Académique Documents
Professionnel Documents
Culture Documents
POO en Java
Ch. III
MAJ 01/03/23
1
02/03/2023
• Exemples:
– Une Fenêtre :
• Etat: position, taille, bordure, titre, couleur,...
• Opérations: fermer, ouvrir, déplacer, agrandir,...
– Un Fichier
• Etat: nom, directory, id, protections, propriétaire, contenu,…
• Opérations: ouvrir, fermer, enregistrer, supprimer,…
2
02/03/2023
démarrer()
accélérer() Comportement
freiner()
Rappels: Classe
• La classe décrit le domaine de définition d’objets.
3
02/03/2023
• Une classe est définie par les attributs et les opérations (méthodes).
1) Attributs:
Appelés également champs, ou données membres,
correspondent aux propriétés de la classe.
Ils sont définis par un nom, un type de données et
éventuellement une valeur initiale.
Un attribut est une variable qui stocke des données.
Employe
code : int
nom : String
nbEmployes : static int
Trois attributs de la classe Employe
7
4
02/03/2023
Exemple: Rectangle est une classe utilisée pour créer des objets
représentant des rectangles particuliers.
• Elle regroupe 4 données de type entier qui caractérisent le rectangle:
longueur, largeur et origine (x,y) (la position en abscisse et en
ordonnée de son origine).
• On suppose qu’on effectue les opérations de déplacement et de calcul
de la surface du rectangle.
• Les symboles + et – sont les spécificateurs d’accès (voir plus loin)
Exemple (notation UML (Unified Modeling Language)
- : private
Rectangle Nom de la classe # : protected
- longueur + : public
- largeur Description des attributs (champs) $ (ou souligné) : static
-x
-y
+ déplacer(int,int)
+ calculSurface() Description des méthodes (comportements)
10
5
02/03/2023
Méthodes 11
12
6
02/03/2023
Classe : déclaration.
En Java, pour déclarer une classe on utilise le mot-clé class suivi
du nom de la classe.
public class Rectangle {
...
}
Règles
1. La première lettre du nom d’une classe doit toujours être
une lettre Majuscule (ex : Chat).
2. Mélange de minuscule, majuscule avec la première lettre de
chaque mot en majuscule (ex : ChatGris).
3. Une classe se trouve dans un fichier portant son nom
suivi de l’extention .java (ex : ChatGris.java)
13
Classe : écriture
Il est recommandé de placer une seule classe par fichier source. Mais, Java n’est pas
tout à fait aussi strict, il vous impose seulement de respecter les règles suivantes dans le:
Règles
1. un fichier source peut contenir plusieurs classes
mais une seule doit être publique
2. la classe contenant la méthode main doit obligatoirement
être publique, afin que la machine virtuelle y ait accès
3. une classe n’ayant aucun spécificateur d’accès reste accessible à toutes
les classes du même paquetage donc, a fortiori, du même fichier source
14
7
02/03/2023
15
16
8
02/03/2023
UML
???
17
18
9
02/03/2023
• Une fois la classe est définie, on peut créer des objets (=variables)
19
20
10
02/03/2023
Rectangle
« instance»
Voiture
« instance»
VW BM Honda
- Marque: Polo - Marque: X5 - Marque: Civic
- Coleur: Rouge - Coleur: Blanche - Coleur: Noire
- Vitesse: 5 - Vitesse: 6 - Vitesse: 5
- Porte: 3 - Porte: 5 - Porte: 5
11
02/03/2023
- Déclaration de l’objet
- Création de l’objet
23
Attention:
- La déclaration d’une variable de type primitif réserve un emplacement
mémoire pour stocker la variable
- Par contre, la déclaration d’un objet, ne réserve pas une place mémoire
pour l’objet, mais seulement un emplacement pour une référence
à cet objet
les objets sont manipulés avec des références
24
12
02/03/2023
Exemple:
Considérons la classe ClasseTest
class ClasseTest {
// corps de la classe ClasseTest
}
l’instruction:
ClasseTest objA;
- Déclare objA comme objet (variable) de type ClasseTest
- Définit le nom et le type de l’objet.
- Déclare que la variable objA est une référence à un objet de la classe
ClasseTest. Cela veut dire qu’on va utiliser une variable objA qui
référencera un objet de la classe ClasseTest.
- Aucun objet n’est créé: un objet seulement déclaré vaut « null ».
objA null
25
26
13
02/03/2023
Exemple
class ClasseTest {
/* Corps de la classe ClasseTest */
}
En générale:
1. Chaque objet met ses données membres dans sa propre zone mémoire.
2. Les données membres ne sont pas partagées entre les objets de la même classe.
27
28
14
02/03/2023
Rectangle rectangleR1;
– déclare que l’on va utiliser une variable rectangleR1
qui référencera un objet de la classe Rectangle
– mais aucun objet n’est créé
29
15
02/03/2023
Plan de construction
Classe « Chemise »
Objet 1 Objet 2
Référence 1 Référence 2
32
16
02/03/2023
Attention:
Cette garantie d’initialisation par défaut
ne s’applique pas aux variables locales
(variables déclarées dans un bloc, par exemple
variables locales d’une méthode)
(voir plus loin)
34
17
02/03/2023
– un type de retour
– un nom
– une liste (éventuellement vide) de paramètres typés en entrée
– une suite d’instructions (un bloc d’instructions) qui constitue le corps
de la méthode
/*
corps de la méthode qui peut contenir l’instruction
*/
}
35
36
18
02/03/2023
37
19
02/03/2023
Remarques importantes
1) La portée d’une variable locale est limitée au bloc constituant la
méthode où elle est déclarée. De plus, une variable locale ne doit pas
posséder le même nom qu’un argument muet de la méthode :
void f(int n)
{ float x ; // variable locale à f
float n ; // interdit en Java
.....
}
void g ()
{ double x ; // variable locale à g, indépendante de x locale à f
.....
}
40
20
02/03/2023
nomObjet.nomAttibut
nomObjet = nom de la référence à l’objet
nomAttribut =nom de la donnée membre (attribut).
41
class ClasseTest {
Exemple 1: boolean b;
double x;
Pour les objets objA et objB }
ClasseTest objA = new ClasseTest();
de la classe ClassTest ClasseTest objB = new ClasseTest();
qui sont déjà créés:
42
21
02/03/2023
class Etudiant {
Exemple 2: String nom;
int age;
Soient 2 objets Etud1 et Etud2 }
Etudiant etud1 = new Etudiant();
de la classe Etudiant Etudiant etud2 = new Etudiant();
43
44
22
02/03/2023
45
Classe chemise
public class Chemise{
int id;
char couleur;
float prix;
String description;
int quantite;
}
Objet 1 Objet 2
taChemise
Référence 1 maChemise
Référence 2
23
02/03/2023
Notion de référence1/5
Chemise maChemise;
maChemise=new Chemise();
maChemise
maChemise.couleur=‘R’;
}
}
Stack Heap
(pile) (tas)
24
02/03/2023
Stack Heap
Stack Heap
25
02/03/2023
Stack Heap
Mémoire
0x034009
public class Test{
id 0
public static void main(String[] args){ maChemise couleur R
prix 0.0f
Chemise maChemise=new Chemise() 0x034009
description null
quantite 0
maChemise.couleur=‘R’;
} id 0
} taChemise
couleur '\u0000’
Stack Heap
26
02/03/2023
Mémoire
0x034009
public class Test{
id 0
public static void main(String[] args){ maChemise couleur R
prix 0.0f
Chemise maChemise=new Chemise() 0x034009
description null
quantite 0
maChemise.couleur=‘R’;
taChemise.couleur=‘B’; id 0
taChemise B
couleur
taChemise.quantite=10; 0x99f311 prix 0.0f
} description null
} quantite 10
Stack Heap
Exercice: Soit Rectangle une classe utilisée pour créer des objets représentant
des rectangles particuliers
• Elle regroupe 4 données de type entier qui caractérisent le rectangle: longueur,
largeur et origine (x,y) (la position en abscisse et en ordonnée de son origine).
• On suppose qu’on effectue l’opération d’instanciation suivante:
Rectangle
27
02/03/2023
Solution :
public class Rectangle{
int longueur, largeur;
int x, y;
public static void main (String args[]) {
Rectangle rectangleR1=new Rectangle ();
rectangleR1.longueur=10; rectangleR1.largeur=2;
rectangleR1.x=0; rectangleR1.y=0;
Rectangle rectangleR2=new Rectangle ();
rectangleR2.longueur=5; rectangleR2.largeur=7;
rectangleR2.x=1; rectangleR2.y=2;
Rectangle rectangleR3=new Rectangle ();
rectangleR3.longueur=3; rectangleR3.largeur=5;
rectangleR3.x=2; rectangleR3.y=0;
}
} 55
28