Title: Comment grer des objets en Java
1Comment gérer des objets en Java ?
2Plan du document
- Concepts de base
- Variable
- Type primitifs
- Littéraux Java
- Chaînes de caractères
- Définition de variable
- Quelques opérations sur les variables
- Modèle objet de JAVA
- Classe
- Objet
- Méthode
- Constructeur
- Règles de bonne conduite
- Commentaires
- Idiomes
- Questions pratiques
- Les fichiers java
- La chaîne de développement
- Caractéristiques de Java
- Bibliographie
3Variable
- Abstraction d'un emplacement mémoire auquel on
peut affecter différentes valeurs au cours du
temps - Possède un type
- Sert à programmer les attributs
Vision interne
100
0000 0000
Vision  utilisateurÂ
x Entier
0000 0000
x _at_
1111 1111
65535
x 65535
?
x
x
1111 1111
Table d' adresses
Affectation
Mémoire
4Les types primitifs JAVA
- Type booléen
- boolean (false lt true)
- Type entier
- int (32 bits), long (64 bits)
- byte (8 bits), short (16 bits)
- Type réel
- float (32 bits), double (64 bits)
- Type caractère
- char (16 bits Unicode)
5Littéraux JAVA
- Booléens
- false, true
- Entiers
- 14, 012 (octal), 0x15 (hexadécimal)
- Réels
- 3., .6, 3.14, 31.4E-1
- Caractères
- 's', 'K', 'i', '\n', '\t'
6Le cas particulier des chaînes de caractères
- Pas un type simple
- String
- Exemple
- String phrase
- phrase "ceci est sur une ligne !"
- phrase "ceci est un texte sur une ligne \n
écrit sur deux lignes"
7Déclaration et définition dune variable
- Déclarer
- Nommer une variable
- Lui associer un type gt lui associer des
opérations possibles - Définir lui réserver de la place en mémoire
- Déclarer et définir une variable en java
- nomDeType nomDeVariable
- Attention aux majuscules / minuscules / espaces
/point virgule - Exemples
- int unNombre
- int un Nombre
- int unnombre
- int un, nombre
De la rigueur !
8Initialisation de variable
- A la définition, pas de valeur prédéfinie
- int unNombre
- unNombre 3
- Initialisation à la définition
- int unNombre 3
?
unNombre
3
unNombre
3
unNombre
9Quelques opérations
- Affectation
- Exemple daffectation échange du contenu de
deux variables - Opérations arithmétiques
- Conversion de type
10Affectation
- Permet dassigner une valeur à une variable
- Sémantique
- Sens de lecture
- Variable (adresse mémoire) à affecter (variable Ã
gauche de l'affectation) - Valeur (Ã droite de l'affectation)
- Constante
- Calculée (expression).
int x, y x 0 y x x x 1
11Échange du contenu de deux variables
int x, y, aux x 128 y 256 aux x //
(1) sauvegarde du contenu de x x y // (2) y
aux // (3) restauration
2
128
x
256
y
1
3
aux
12Opérateurs arithmétiques
Opérateurs binaires Addition Multiplication /
Division Modulo
Opérateurs unaires - Négation Incrémentation
de 1 -- Décrémentation de 1
tronquée si les arguments sont entiers
13Exemples dopérations arithmétiques
- int x, y
- x 9
- y - 6
- x x 1
- x
- y
- y - y
- x x / y
- y 11 x
14Conversion de types (casting)Pour les bons
- Doivent être faites explicitement s'il y a un
risque de perte d'information - (type) expression
- Troncation
int i 65 char c (char) i // c vaut
A char c 'B' int i c // i
vaut 66
double f 3.14 int i (int) f // i
vaut 3
15Les concepts objet rappel
- Classe
- "Moule" qui conditionne tous les comportements
- Objet
- Instance d'une (seule) classe
- Attribut
- Méthode
- Action élémentaire sur un objet
- Message
- Demande d'exécution d'une méthode
16Les classes et leurs instances - Rappel
- Classe Moule
- Instances générées à partir des classes
CompteBancaire
compte001
solde réel 0 déposer(montant
réel) retirer(montant réel) donneMoiTonSolde()
réel
compte112
17Déclarer une référence en Java
- Déclaration dune variable une référence sur un
objet potentiel dune classe - CompteBancaire compte001
- compte001 peut référencer un objet CompteBancaire
- l objet de CompteBancaire nexiste pas encore
!!!
Avant
Après
retirer (montant)
donne Moi Ton Solde() réel
???
compte001
deposer (montant)
18Créer un objet en Java
- Créer lobjet et lassocier à la référence
- compte001 new CompteBancaire()
- réserve la mémoire pour stocker lobjet
- associe lobjet à la référence
Avant
Après
compte001
compte001
19Déclarer et instancier
- CompteBancaire compte001 new CompteBancaire()
Avant
Après
compte001
20Écrire une classe en java
Concept
Java
class CompteBancaire double solde CompteBancair
e () solde 0 void deposer100 () solde
solde 100
CompteBancaire
solde Réel 0
deposer100()
CompteBancaire.java
21Utiliser une classe java
- Créer une référence et une instance (un objet)
- Invocation d'une méthode (opération) sur une
instance - référenceInstance.nomOpération()
Concept
Java
CompteBancaire compte001 compte001 new
CompteBancaire () compte001.deposer100()
compte001CompteBancaire
deposer100()
TestCompteBancaire.java
22Classe plus complète en java
class CompteBancaire double solde CompteBancair
e () solde 0 CompteBancaire (double
depotInitial) solde depotInitial void
deposer100 () solde solde 100 void
deposer (double montant) solde solde
montant void retirer100 () solde solde -
100 void retirer (double montant) solde
solde - montant double donneMoiTonSolde ()
return solde
- Variable d'instance
- propres à chaque instance (objet)
- Constructeur
- retourne implicitement une instance
- même nom que la classe
- 1 ou n constructeurs
- Méthode (d'instance)
- signature
- type résultat (peut être void)
- nom méthode
- paramètres (type nom)
- plusieurs méthodes de même nom
23Utiliser une classe (2)
Java
double s CompteBancaire compte001,
compte112 compte001 new CompteBancaire
() compte112 new CompteBancaire(1000) compte00
1.deposer (100) compte112.deposer100() s
compte001.donneMoiTonSolde () System.out.println(
"solde " s) System.out.println("solde "
compte112.solde)
TestCompteBancaire.java
24Passage de paramètres
deposer(m)
compte001CompteBancaire
void deposer(double montant) solde solde
montant
CompteBancaire compte001 double m compte001
new CompteBancaire() compte001.deposer100() m
200 compte001.deposer(m)
1. Evaluation de l'expression m
2. Copie de la valeur et affectation à montant
3. Calcul et Mise à jour de solde
m
solde
montant
200
200
300
200
25Valeur retournée par une méthode
donneMoiTonSolde()
compte001CompteBancaire
double donneMoiTonSolde() return solde
CompteBancaire compte001 new
CompteBancaire() double s s
compte001.donneMoiTonSolde()
1. Evaluation de l'expression
2. Retour de la valeur
3. Affectation à s
s
solde
0
0
0
???
26Aïe !
1 double s 2 CompteBancaire compte001 3 compte112
new CompteBancaire(1000) 4 compte001.deposer
(100) 5 compte112.deposer100(100) 6 compte112.de
poser(100, 200) 7 compte001.donneMoiTonSolde
() 8 System.out.println("solde "
s) 9 System.out.println("solde "
compte112.solde)
double interet() resultat solde 0.04
void deposer 100 () solde solde 100E
27Règles de bonne conduite
- Commenter les programmes
- écrit 1 fois
- Relu n fois !
- Noms utilisés (classe, objet, méthode, ..)
- Parlant
- Respecter les conventions
- Classe 1ere lettre majuscule, changement de mot
majuscule - attribut minuscules, changement de mot
majuscule - méthode minuscules, changement de mot majuscule
- NomDuConstructeur nom de la classe
- Indenter les programmes !
28Commentaires JAVA
- Il faut commenter ses programmes
- Style C
- / définition des attributs
- de la classe /
- int solde
- Style C
- int solde // solde du compte bancaire
- Style JavaDoc
- / Methode permettant de déposer 100 Euros
- sur un compte bancaire /
- void deposer100()
- solde solde 100
29Idiomes relatifs aux désignations en JAVA
- Classes et constructeurs
- Lettre majuscule suivie de lettres (majuscules ou
minuscules) et/ou de chiffres - CompteBancaire
- Variables, méthodes (sauf les constructeurs)
- Lettre minuscule suivie de lettres (majuscules ou
minuscules) et/ou chiffres - x, unCompteBancaire, consulter()
- Articulations
- Marquées par une majuscule
- unCompteBancaire
30Questions pratiques
- Les fichiers java
- comment répartir le code source dans différents
fichiers ? - par où commence l'ordinateur ?
- Chaîne de développement
31Comment répartir le source dans différents
fichiers
- Une classe un fichier
- Il n y a quune classe par fichier
- Le fichier doit porter le nom de la classe
 .java - Cest la définition du  mouleÂ
class CompteBancaire double solde
CompteBancaire () solde 0 double
donneMoiTonSolde () return solde
CompteBancaire.java
32Quel est le point dentrée ?
- Le système a besoin de savoir où il doit
commencer - une méthode spéciale main()
- dans une classe à part ? dans un autre fichier
- utilise les "moules" définis dans les fichiers
correspondant aux classes
class TestCompteBancaire public static void
main(String argv) CompteBancaire compte001
new CompteBancaire() double s s
compte001.donneMoiTonSolde()
TestCompteBancaire.java
33Chaîne de développement
- Organiser (arborescence)
- Éditer et sauver
- xemacs TestCompteBancaire.java
- xemacs CompteBancaire.java
- Compiler
- javac TestCompteBancaire.java
- Génère
- soit des erreurs de compilation
- soit TestCompteBancaire.class (CompteBancaire.clas
s) - Éxécuter
- java TestCompteBancaire
- exécution
- soit incorrecte (plante ou non conforme aux
prévisions) - soit correcte (Ouf!)
Corriger syntaxe
Corriger logique
34Bibliographie
- Le tutoriel http//www-inf.int-evry.fr/COURS/jav
a - Java de l'esprit à la méthode
- Michel Bonjour, Gilles Falquet, Jacques Guyot,
André Le Grand - International Thomson Publishing, 1996
- http//www.javasoft.com/
- Tutoriel de sun http//java.sun.com/docs/books/t
utorial/index.html
35Diapos non utilisées suite à réorganition IP10
36Un peu de vocabulaire
class CompteBancaire double solde CompteBancair
e () solde 0 CompteBancaire (double
depotInitial) solde depotInitial void
deposer (double montant) solde solde
montant void retirer (double montant) solde
solde - montant double donneMoiTonSolde ()
return solde void capitaliser (int nbMois)
int i for (i 1 i lt
nbMois i i 1) solde solde i
Attribut (d'instance)
Paramètre
Variables locales
37Durée de vie des variables
Itérations
- variables
- Durée de vie
- début de vie leur définition
- fin de vie fin du bloc
- inaccessibles de l'extérieur du bloc
- les modifier ne modifie rien à l'extérieur
38Exemple
Itérations
nbMois
// economiserPuisConsommer int nbMois
Lire.i() System.out.println("Solde avant phase
d'économie " solde) for (int i 1 i lt
nbMois i ) solde solde i
System.out.println("Solde au bout de
"nbMois" "solde) for (int i nbMois i
gt 1 i i - 1) solde solde - i
System.out.println("Solde au bout de
"2nbMois" "solde)
i
i variable locale au bloc "for"
un autre i !
i
décrémente i !