}
La classe Lampe est prête pour être utilisée
• Constructeurs
• Co po te e t des la pes thodes d’i sta e
}
TestInterrupteur.java
public class TestInterrupteur {
public static void main (String[] args) {
Interrupteur inter;
inter = new Interrupteur();
inter.allume();
inter.eteint();
}}
Console :
Interrupteur allumé et Lampe allumée
Interrupteur éteint et Lampe éteinte
Interrupteur.java
public class Interrupteur{
private int position;
private Lampe lampe;
public Interrupteur () {position =0; lampe = new Lampe();}
public Interrupteur(int position) {this.position= position; switch (position)
{ case 0 : lampe= new Lampe(false) ;break ; case 1 : lampe= new Lampe(true) ;break ;}}
public void allume() {position = 1; System.out.print("Interrupteur allumé et ");
lampe.allume();}
public void eteint () {position = 0; System.out.print("Interrupteur allumé et ");
lampe.eteint();}
public void getPosition() { System.out.println ("Interrupteur est à la position : "+position+"
avec lampe "+lampe.getAllume());} Module IPO (2015-2016). MI. Constantine2/ 16
}
Encapsulation : Lampe et Interrupteur
Lampe lamp1
Interrupteur inter1
allume() Position = 1
allume
Lampe=
eteint()
getEtat()
Interrupteur inter2;
inter2= new Interrupteur(1);
inter2.getEtat();
inter2.eteint();
inter2.getEtat();
}
Module IPO (2015-2016). MI. Constantine2/ 18
Variable de classe et méthode de classe
Pour compter le nombre de lampes créées en ajoute à la classe Lampe la
variable de classe nbLampe. Pour afficher ce nombre, on ajoute la méthode
de classe nombreLampe().
Lampe.java
public class Lampe {
private boolean allume;
private static int nbLampe = 0;
Lampe.nombreLampe();
} }
Questions :
Dans la classe TestLampe :
• Co ie ’a-t-il d’o jets f e s ap s e utio ?
• L’i vo atio de : lamp.nombreLampe() provoque t-elle une erreur?
• L’i vo atio de : nombreLampe() provoque t-elle une erreur?
Chapitre 2
public void deplace (double dx, double dy) {x += dx; y += dy;} Objet getY() x =1 getX()
public void identifie() {System.out.println("Je suis un point");} y =4
public double getX(){ return x;}
Identifie()
public double getY() {return y;}}
public void deplace (double dx, double dy) public void deplace (double dx, double dy)
{x += dx; y += dy;} {x += dx; y += dy;}
public void identifie() {System.out.println("Je void deplace (double dx, double dy, double dz)
suis un point");} {x += dx; y += dy; z += dz;}
public void deplace(double dx, double dy) public void deplace(double dx, double dy)
{x += dx; y += dy;} {x += dx; y += dy;}
public void identifie() void deplace(double dx, double dy, double dz)
{System.out.println("Je suis un point"); } {x += dx; y += dy; z += dz;}
public double getX(){ return x;} public void identifie() {System.out.println
public double getY() {return y;}} ("Je suis un point3D"); }
double getX(){ return x;}
double getY() {return y;}
Remarques : double getZ() {return z;}
1. Point3D est un enrichissement de Point avec de nouvelles variables (double z)
2. Point3D est un enrichissement de Point avec de nouvelles méthodes (getZ(), deplace())
3. Point3D possède le comportement défini dans Point (getX(), getY(), deplace(), identifie())
4. Point3D adapte quelques méthodes de Point en les réécrivant (Redéfinition de la méthode
identifie()) Module IPO (2015-2016). MI. Constantine2/ 24
M a is e d’h itage Exemple introductif)
Classe Point Classe Point3D
public class Point { public class Point3D {
private double x, y; private double x, y, z;
public void deplace(double dx, double dy) public void deplace(double dx, double dy)
{x += dx; y += dy;} {x += dx; y += dy;}
public void identifie() void deplace(double dx, double dy, double dz)
{System.out.println("Je suis un point"); } {x += dx; y += dy; z += dz;}
public double getX(){ return x;} public void identifie() {System.out.println
public double getY() {return y;}} ("Je suis un point3D"); }
double getX(){ return x;}
double getY() {return y;}
double getZ() {return z;}
Point
double x, y Classe de base (super-classe)
deplace()
Identifie()
getX()
getY()
Point3D hérite de Point
deplace()
Identifie()
getZ()
Module IPO (2015-2016). MI. Constantine2/ 26
M a is e d’h itage
La classe Point3D est créée à partir de la classe Point en utilisant le
a is e d’Héritage ou Sous-classe
Sous-classe (classe dérivée)
1. fondamental de la POO
public double ge tX(){ return x;} M thodes d’i sta e h it es pa la lasse Poi t3D
public double getY() {return y;}}
public void deplace(double dx, double dy) {x += dx; y += dy;}
Méthode redéfinie
public void deplace (double dx, double dy, double dz)
{ super. deplace(dx, dy); z += dz;} Méthodes ajoutées
public double getZ() {return z;} } 32
Module IPO (2015-2016). MI. Constantine2/
M a is e d’h itage Création de sous-classe)
Accessibilité :
Attention :
1. Super() ’est appel u’à pa ti d’u o st u teu .
2. L’appel pa super() ne concerne que le constructeur de la classe de base du niveau
immédiatement supérieur.
Remarque 1:
Le constructeur Java par défaut est appli u e as d’a se e d’u o st u teu da s
la sous-classe.
Remarque 1:
La méthode identifie() est dite méthode polymorphe
pt.identifie();
pt.deplace(1,1,1);
Exécution Console
Je suis un point3D
Coordonnées 2.0 3.0 4.0
Coordonnées 3.0 4.0 5.0
Module IPO (2015-2016). MI. Constantine2/ 38
M a is e d’h itage La Super-classe Object) (1)
Dans le langage java, toutes les classes étendent la classe générique Object.
Object définit le Comportement spécifique à tous les objets Java.
Les méthodes définies dans Object peuvent être redéfinies dans les sous-
classes. Exemple :
1. La thode d’i sta e toString() retourne une chaîne (String) contenant :
• le o de la lasse o e e,
• l’ad esse de l’o jet e he ad i al p d e de @ .
Point3DColoré
double x, y, z Variables héritées
Caractéristiques String couleur; Variable ajoutée
de Point3DColoré deplace()
deplace()
getX() Méthode héritées
getY()
getZ()
Identifie() Méthode redéfinie
setCouleur() Méthode ajoutée
42
M a is e d’h itage Exe ple d’appli atio )
Caractéristiques des objets de classes dérivées
Le a is e d’h itage pe et :
1. l’h itage de ode
2. l’h itage de t pe
Remarques :
• A la atio d’u o jet de sous-classe, un emplacement est attribué à chaque variable
d’i sta e de la lasse et à ha ue va ia le d’i sta e h it e des super-classes.
• U o jet d’u e sous-classe accède à toutes les méthodes de la classe et toutes les
méthodes des super-classes .
Module IPO (2015-2016). MI. Constantine2/ 43
3. Mécanisme de Polymorphisme (Principe)
Principe :
Le pol o phis e pe et d’o te i u o po te e t adapt à
ha ue t pe d’o jet, sa s avoi esoi de teste sa atu e de uel ue
façon que ce soit.
il se traduit par :
1. Le principe de substitution
Point monPoint ;
Type réel
Définition initiale
de la méthode
Point monPoint
monPoint= new Point3DColoré (2,3,4, "Bleu");
monPoint.identifie();
System.out.println (monPoint.getX()) 47
Mécanisme de Polymorphisme (Principe)
Important
Le polymorphisme est très utile pour la création et la manipulation
d’e se les eg oupa t des o jets de lasses diff e tes o e da s
l’e e ple suiva t :
Point3D monPoint;
monPoint= new Point3DColoré (2,3,4, "Bleu");
monPoint.deplace(10,20);
((Point3DColoré) monPoint).setCouleur("Vert");
Module IPO (2015-2016). MI. Constantine2/49
Mécanisme de Polymorphisme (Transtypage : custing)
Important :
Le transtypage est déconseillé en POO. Il peut être
évité en utilisant le concept de méthode abstraite
définie dans une classe abstraite ou interface
(A voir dans le module 2ème Année licence LMD).
51
Pa uetage et d oits d’a s 2