Académique Documents
Professionnel Documents
Culture Documents
Ch03 Classes Et Objets
Ch03 Classes Et Objets
Chapitre 03
Classes et Objets
SMI 5
Classe et définition
1
07/10/2022
2
07/10/2022
3
07/10/2022
Conventions en Java
Conventions de noms
» CeciEstUneClasse
» celaEstUneMethode(…)
» jeSuisUneVariable
» JE_SUIS_UNE_CONSTANTE
Objet et définition
4
07/10/2022
5
07/10/2022
Affectation et comparaison
Affecter un objet
» « a = b » signifie a devient identique à b
» Les deux objets a et b sont identiques et toute modification de a
entraîne celle de b
Affectation et comparaison
6
07/10/2022
Affectation et comparaison
Partie « statique »
» Ne varie pas d’une instance de classe à une autre
» Permet d’activer l’objet
» Constituée des méthodes de la classe
Partie « dynamique »
» Varie d’une instance de classe à une autre
» Varie durant la vie d’un objet
» Constituée d’un exemplaire de chaque attribut de la classe
7
07/10/2022
Utilisation
» Usage des Méthodes et des Attributs (non recommandé)
» Les attributs de l’objet peuvent être modifiés
» Les attributs (ou leurs dérivés) peuvent être consultés
8
07/10/2022
9
07/10/2022
Le constructeur de «Voiture»
Actuellement
» On a utilisé le constructeur par défaut sans paramètre
» On ne sait pas comment se construit la «Voiture»
» Les valeurs des attributs au départ sont indéfinies et identiques pour
chaque objet (puissance, etc.)
Rôle du constructeur en Java
» Effectuer certaines initialisations nécessaires pour le nouvel objet créé
Toute classe Java possède au moins un constructeur
» Si une classe ne définit pas explicitement de constructeur , un
constructeur par défaut sans arguments et qui n’effectue aucune
initialisation particulière est invoquée
Le constructeur de «Voiture»
Le constructeur de Voiture
» Initialise vitesse à zéro
» Initialise estDemaree à faux
» Initialise puissance à la valeur passée en paramètre du constructeur
public class Voiture {
private int puissance;
private boolean estDemarree;
Constructeur
private double vitesse;
avec un
paramètre
public Voiture(int p) {
puissance = p;
estDemaree = false;
vitesse = 0;
}
...
}
10
07/10/2022
Création de la Voiture
» Déclaration de la variable maVoiture
» Création de l’objet avec la valeur 7 en paramètre du constructeur
11
07/10/2022
Constructeurs multiples
Intérêts
» Possibilité d’initialiser un objet de plusieurs manières différentes
» On parle alors de surcharge (overloaded)
» Le compilateur distingue les constructeurs en fonction
• de la position des arguments
• du nombre
• du type
public class Voiture {
...
public Voiture() {
puissance = 4; ...
}
Chaque constructeur
public Voiture(int p) {
possède le même nom puissance = p; ...
(le nom de la classe) }
public Voiture(int p, boolean estDemaree){
...
}
}
12
07/10/2022
identificationObjet.nomDeMethode("Paramètres éventuels")
13
07/10/2022
Les objets
• Leur modification dans la méthode entraîne celle de l’original !!!
• Leur référence est recopiée et non pas les attributs
14
07/10/2022
L’objet « courant »
15
07/10/2022
Le retour d’UML…
public Voiture(int p) {
leMoteur = new Moteur(p);
...
}
...
A discuter : si le moteur d’une }
voiture est « mort », il y a la
possibilité de le changer
Création de l'objet Moteur
16
07/10/2022
public Moteur(int p) {
puissance = p;
...
}
...
}
public Voiture(int p) {
leMoteur = new Moteur(p,this);
...
}
...
}
Transmission de la référence
Création de l’objet Moteur de l’objet courant
17
07/10/2022
public Voiture(Galerie g) {
laGalerie = g;
...
}
...
}
18
07/10/2022
1 0..1
Voiture Conducteur
... ...
1..* 1
Voiture Conducteur
... ...
19
07/10/2022
Destruction et ramasse-miettes
Destruction et ramasse-miettes
public class Voiture {
private boolean estDemarree;
Pour être sûr que finalize
...
s'exécute il faut absolument
protected void finalize() { appeler explicitement
estDemarree = false; System.gc()
System.out.println("Moteur arrete");
}
public class TestMaVoiture {
...
} public static void main (String[] argv){
// Déclaration puis création de maVoiture
Voiture maVoiture = new Voiture();
Force le programme à maVoiture.demarre();
se terminer // maVoiture ne sert plus à rien
maVoiture = null;
// Appel explicite du garbage collector
System.gc();
// Fin du programme
System.exit(0);
System.out.println("Message non visible");
}
}
20
07/10/2022
ou
if (maVoiture.getClass() == Voiture.class) {...} //C’est vrai
//également
Surcharge
21
07/10/2022
Surcharge
Exemple : une voiture surchargée
public class Voiture {
private double vitesse;
...
public void accelere(double vitesse) {
if (estDemarree) {
this.vitesse = this.vitesse + vitesse;
}
}
public void accelere(int vitesse) {
if (estDemaree) {
this.vitesse = this.vitesse +
(double)vitesse; public class TestMaVoiture {
} public static void main (String[] argv){
}
..} // Déclaration puis création de maVoiture
Voiture maVoiture = new Voiture();
// Accélération 1 avec un double
maVoiture.accelere(123.5);
// Accélération 2 avec un entier
maVoiture.accelere(124);
}
}
22
07/10/2022
Encapsulation
+ public - private
23
07/10/2022
Encapsulation
Exemple : encapsulation
public class Voiture {
Une méthode privée ne peut plus
private int puissance; être invoquée en dehors du code
...
de la classe où elle est définie
public void demarre() {
...
}
Initialisation
String maChaine = "Bonjour!"; //Cela ressemble à un type simple
Longueur
maChaine.length(); //Avec les parenthèses car c'est une méthode
Comparaison
maChaine.equals("Bonjour!"); //Renvoi vrai
Concaténation
Faites attention à la comparaison de
String essai = "ess" + "ai"; chaînes de caractères.
String essai = "ess".concat("ai");
maChaine == "toto";
Comparaison sur les références !!
24
07/10/2022
Un exemple
StringTokenizer st =
new StringTokenizer("Bonjour, le monde|de|Java",", |");
while(st.hasMoreElements())
System.out.println("Element : " + st.nextElement());
25
07/10/2022
Attributs de classe
Attributs de classe
Voiture.nbVoitureCreees = 3;
26
07/10/2022
Constantes de classe
Usage
• Ce sont des constantes liées à une classe Une constante de classe
est généralement
• Elles sont écrites en MAJUSCULES toujours visible
27
07/10/2022
Méthodes de classe
Usage
• Ce sont des méthodes qui ne s'intéressent pas à un objet particulier
• Utiles pour des calculs intermédiaires internes à une classe
• Utiles également pour retourner la valeur d’un attribut de classe en
visibilité private
Méthodes de classe
Exemple : méthode de classe
public class Voiture { Déclaration d’une
variable de classe
private static int nbVoitureCreees; privée. Respect du
... principe
d'encapsulation
public static int getNbVoitureCreees(){
return Voiture.nbVoitureCreees;
}
}
28
07/10/2022
Méthodes de classe
Rappel : les types simples (int, double, etc.) possède un alter-ego
objet disposant de méthodes de conversion
Par exemple la classe Integer « encapsule » le type int
• Constructeur à partir d’un int ou d’une chaîne de caractères
public Integer(int value);
public Integer(String s);
• Disponibilité de méthodes qui permettent la conversion en type simple
Integer valueObjet = new Integer(123);
int valuePrimitif = valueObjet.intValue();
Ou
int valuePrimitif = valueObjet; (AutoBoxing)
• Des méthodes de classe très utiles qui permettent à partir d’une chaîne de
caractères de transformer en type simple ou type object
String maValueChaine = new String("12313");
int maValuePrimitif = Integer.parseInt(maValueChaine);
29
07/10/2022
1. Déclaration
Voiture[]
monTableau;
Ou 1, 2 et 3
2. Dimensionnement
Voiture[] monTab = {
monTableau = new Voiture[3]; new Voiture(5),
new Voiture(7),
new Voiture(8),
3. Initialisation };
monTableau[0] = new Voiture(5);
monTableau[1] = new Voiture(7);
monTableau[2] = new Voiture(8);
30
07/10/2022
• Ensemble de paramètres
maVoiture.ajouterPassager("Ali","Khalid","Jamal");
31
07/10/2022
32