27 octobre 2021
Convention
p Pour nommer une classe, vous devez respecter les règles suivantes :
à Le nom doit commencer par une majuscule.
Exp : Point, Sphere, ...
à Quand une classe est composée de plusieurs mots, tous les mots
commencent par une lettre majuscule.
Exp : ProgrammePrincipal, TestPoint, ...
p Le type Point est un type comme les autres, il devient donc possible d’éecrire
Point p1,p2 ;
p Cette instruction déclare deux variables p1 et p2 de type Point, ces variables
s’appellent des objets.
Objet ? ? ? :
Un objet est une instance d’une classe. Pour chaque instance d’une classe, le code est le
même, seules les données des attributs changent.
p En Java il est possible de définir dans la même classe plusieurs constructeurs avec
le même nom pour autant que la liste des paramètres (la signature) soit différente.
à Cette technique s’appelle la surcharge (surdéfinition).
p Deux listes de paramètres sont différentes si :
à Le nombre de paramètres est différent ou alors
à La liste ordonnée des types des paramètres est différente.
(Remarque : la deuxième règle est suffisante)
Exemple :
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
Exemple :
Exemple :
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
Remarque
p Lorsqu’un constructeur est défini par le programmeur, le constructeur proposé par
défaut par le langage Java n’existe plus, comme le montre cet exemple :
Exemple :
class Point {
int x, y ;
public Point ( int x0 , int y0) {
x = x0 ;
y = y0 ;
}
}
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
Exemple : Bonjour.java
p Le fichier source doit être enregistré avec l’extension .java et porter le même nom
que la classe publique qui contient main() (Exp. Bonjour.java).
Exemple :
class Point{
double x,y ;
Point(double x0,double y0) {x=x0 ; y=y0 ;}
void deplacer(double dx, double dy) {x += dx ; y += dy ;}
void deplacer(int dx, int dy) {x += dx ; y += dy ;}
}
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 13 / 27
Encapsulation Notion d’encapsulation
p Accès par défaut : Lorsque les données sont déclarées sans type de protection, leur
protection est public. Les données sont alors accessibles depuis toute l’application.
Exemple :
p Observons la nouvelle classe, PointPrive, dont les attributs sont ainsi protégés.
. class PointPrive{
. private int x,y ;
. PointPrive (int x0, int y0){x = x0 ; y = y0 }
. ...
. }
p Étudions les conséquences d’une telle protection sur la phase de compilation de
l’application FaireDesPointPrives.
. public class FaireDesPointPrives{
. public static void main(String [] arg){
. Scanner kyb= new Scanner(System.in) ;
. PointPrive p = new PointPrive(2,4) ;
. System.out.println(" Entrez l’abscisse x : ") ;
. int abs=kyb.nextInt() ;
. p.x = abs ; //Erreur car x est visible à l’intérieur de PointPrive
. System.out.println(" Le point est d’abscisse : " +p.x) ; //Erreur ? ? ?
. }
}
Exemple :
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
Exercice
p Q : Combien d’instances de la classe Point crée le code suivant ?
Point p1,p2,p3 ;
p1=new Point(1,2) ;
Point p4=p1 ;
Point p5=new Point(3,4) ;
p R : ...................................................................................................................
.................................................................................................................................
.................................................................................................................................
p Le mot clé this référence l’instance courante de la classe sur laquelle s’applique la
méthode ;
p Il est permis à une variable locale de porter le même nom qu’une variable
d’instance ⇒ permet d’éviter les conflits de nom.
p Pour appeler explicitement un unique constructeur à partir d’un autre if faut
utiliser le mot cle this(args).
Cet appel ne peut être que la première instruction de ce constructeur.
Exemple :
class Point {
int x, y ;
Point(int x, int y){
this.x=x ;// this.x :Fait référence à la variable d’instance. x : Fait référence au paramètre
this.y=y ;
}
Point(int x) {
this(1,2) ;
...
}
Point() {
this(4) ;
...
}
}
ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 22 / 27
Le mot clé "this" Exercice d’application
.
p Q : Ce programme peut-il être compilé ? Si oui, qu’affiche-t-il ? Si non, expliquez
pourquoi, corrigez-le et indiquez l’affichage exact produit par son exécution.
.
1 class A { 13 public class TestConstructeur {
2 int x ; 14 public static void main(String[] args){
3 A(){x=3 ;} 15 A o=new A(2021,3) ;
4 A(int x){ 16 System.out.println("Année :"+o.x) ;
5 this.x=this.x+x ; 17 }
6 this() ; 18}
7 }
8 A(int x, int y){
9 this. x= this.x-y ;
10 this(x) ;
11 }
12 }
p R : ...................................................................................................................
.................................................................................................................................
.................................................................................................................................
Exemple :
p Une méthode statique ne peut utiliser que des membres statiques à la classe, afin
de garantir l’utilisation exclusive de données statiques.
Exemple :
Remarque
Une classe peut ne contenir que des membres static. Dans ce cas elle ne sert pas à créer des
objets ! ! !
Exercice 1
1 Considérons le programme suivant.
1. class A2 { 8. A2 x=new A2() ;
2. public static int i ; 9. A2 y=new A2() ;
3. public int j ; 10. A2 z= x ;
4. public A2() {i++ ; j=i ;} 11. A2 t= y ;
5. } 12. sopln(A2.i + "-" + z.j) ;
6. public class TestStatique1 { 13. }
7. public static void main(String[] args){ 14.}
1 Ce programme peut-il être compilé ? Si oui, qu’affiche-t-il ? Si non, pourquoi ?
.........................................................................................................................
.........................................................................................................................
2 Même question en supprimant le mot-clé static de la ligne 2 et en
remplaçant A2.i par z.i et z.j par t.j.
.........................................................................................................................
.........................................................................................................................
3 Combien d’instances de la classe A2 sont créées pendant l’exécution de ce
programme ?
.........................................................................................................................
.........................................................................................................................
Exercice 2
Indiquez l’affichage produit par le programme suivant :
1. class A { 14. A x = new A() ;
2. int val=0 ; 15. A y = new A() ;
3. static void affichePlus (int a) { 16. A.affichePlus (x.val) ;
4. a++ ; 17. x.affichePlus (x) ;
5. System.out.println (a) ; 18. x.affichePlus (x) ;
6. } 19. A.affichePlus (y.val) ;
7. void affichePlus (A a) { 20. y.affichePlus (y) ;
8. a.val++ ; 21. y.affichePlus (y) ;
9. System.out.println (a.val) ; 22. A z = y;
10. } 23. A.affichePlus (z.val) ;
11. } 24. z.affichePlus (z) ;
12. public class TestStatique2 { 25. }
13. public static void main (String[] args) { 26. }
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 27 / 27