Vous êtes sur la page 1sur 27

Programmation orientée objet en Java

Chapitre n◦ 4: Concepts de la POO

ISMAILI ALAOUI El Mehdi 1

27 octobre 2021

1. Université Moulay Ismail Faculté des Sciences de Meknès Département d’Informatique


ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 1 / 27
Plan
1 Qu’est-ce qu’un type ?
2 Création d’une classe
Définition des champs et méthodes
3 La notion de constructeur
Surcharge de constructeurs
Création d’un objet
Constructeur par défaut
4 Mise en œuvre d’un programme comportant plusieurs classes
5 Accès aux membres d’une classe
6 Encapsulation
Notion d’encapsulation
Protection des données
Protéger les attributs d’un point
Les méthodes d’accès aux attributs
7 Affectation d’objets
Exercice d’application
8 Le mot clé "this"
Exercice d’application
9 Membres statiques
Exercices d’applications

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 2 / 27


Qu’est-ce qu’un type ?

p Dans un langage de programmation, le type d’une donnée détermine :


ç L’ensemble des valeurs admissibles ;
ç Le nombre d’octets à réserver en mémoire.
p En plus des types primitifs (char, int, double, float, ...), il est possible en Java de
créer vos propres types.
p On appelle type construit un type non primitif (classe).
p Certains types construits sont fournis dans les bibliothèques du langage.

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 3 / 27


Création d’une classe

p On définit une classe comme suit :


.
class Nom_De_Classe{
// Les champs(attributs) typés
// Les méthodes de la classe
}

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, ...

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 4 / 27


Création d’une classe Définition des champs et méthodes

Exemple 1 : Classe Point avec de deux champs et trois méthodes


class Point{
int x,y ;
void initialiser (int x0, int y0){ x = x0 ; y = y0 ;}
void deplacer (int dx, int dy){x += dx ; y += dy ;}
void afficher (){
System.out.println ("Je suis un point de coordonnées " + x + " " + y) ;
}
}

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 La notion d’une classe généralise la notion de type et la notion d’objet généralise la


notion de variable.
p Une classe permet d’instancier plusieurs objets.
ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 5 / 27
Création d’une classe Définition des champs et méthodes

Exemple 2 : Classe Sphere avec de trois champs et trois méthodes


class Sphere{
float x,y, r ;
void initialiser(float x0,float y0, float r0) {x=x0 ; y=y0 ; r=r0 ;}
double surface(){ return(4 ∗ Math.PI ∗ Math.pow (r , 2)) ;}
double volume() { return( 43 ∗ Math.PI ∗ Math.pow (r , 3)) ;}
}

instanciation de la classe Sphere

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 6 / 27


La notion de constructeur

p Comment on fait pour créer une instance à partir d’une classe ?


å Il suffit, pour cela, de faire appel à un constructeur.
p Un constructeur est une méthode qui n’a pas de type de retour, qui porte le même
nom que sa classe.
p On transforme la méthode initialiser en un constructeur en la nommant Point.
Exemple :
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 7 / 27


La notion de constructeur Surcharge de constructeurs

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 :
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................

p Le compilateur choisit le constructeur à utiliser en fonction de la signature.


p La surcharge est également possible pour les méthodes d’une classe, autrement dit
on peut définir plusieurs méthodes avec des signatures différentes.

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 8 / 27


La notion de constructeur Création d’un objet

p Attention : La déclaration d’un objet (Exp : Point p ;) ne créée pas l’objet !.


Autrement dit une référence n’est pas un objet, c’est un nom pour accéder à un
objet.
p La seule manière de déclarer et créer un objet est d’utiliser l’opérateur new avec
l’un des constructeurs de la classe :
NomMaClasse monObjet = new Constructeur(arguments) ;

Exemple :

Point p1 = new Point (1) ;


Point p2 = new Point (2,3) ;

p Le rôle du constructeur est de permettre d’initialiser les variables d’un objet au


moment de sa création.
Conseil : Ne pas initialiser les variables à l’extérieur du constructeur

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 9 / 27


La notion de constructeur Constructeur par défaut

p Si une classe ne déclare pas de constructeur, un constructeur par défaut (sans


arguments) sera automatiquement créé par le compilateur Java.
à Toute classe posséde au moins un constructeur.
p Dans un premier temps, on retiendra qu’un constructeur par défaut :
à Initialise les entiers (byte, short, int, long) à 0 ;
à Initialise les flottants (float, double) à 0.0 ;
à Initialise les booleans à false ;
à Initialise les objet à null.

Exemple :
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 10 / 27


La notion de constructeur Constructeur par défaut

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 ;
}
}
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 11 / 27


Mise en œuvre d’un programme comportant plusieurs classes

p Un programme Java est constitué d’une ou de plusieurs classes. Mais ne peut


contenir qu’une seule classe publique contenant la méthode statique main().

Exemple : Bonjour.java

public class Bonjour {


public static void main(String args[]) {...}
}
class Test1 {...}
class Test2 {...}

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).

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 12 / 27


Accès aux membres d’une classe

p L’accès à un membre d’une classe se fait au moyen de l’opérateur point «.».


p On accède aux méthodes et aux variables de la classe comme suit :
NomObjet.méthode(args)
NomObjet.variable

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 L’encapsulation consiste à «cacher» de l’extérieur l’implémentation d’une structure


d’informations.
p L’encapsulation est un mécanisme qui rend une structure inaccessible depuis
l’extérieur.
p Ce mécanisme permet donc de protéger la structure interne de l’objet contre toute
manipulation non contrôlée, produisant une incohérence.

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 14 / 27


Encapsulation Protection des données

p Plusieurs niveaux visibilité peuvent être définis en précédant, la déclaration d’un


membre ou d’une classe, par un modificateur d’accè : public, private ou protected :
p Ces 3 niveaux de visibilité définissent les droits d’accès aux données suivant le type
d’accès :
.
public (publique) private (privé) protected (protégé)
Visible par N’est utilisable Ne peut pas être
Classe n’importe que par sa classe déclarée protected
quelle classe englobante
Visible hors Visible uniquement Visible uniquement
Membre de la classe au sein de la classe dans la classe et dans
les classes dérivées de
cette classe

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.

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 15 / 27


Encapsulation Protéger les attributs d’un point

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 ? ? ?
. }
}

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 16 / 27


Encapsulation Les méthodes d’accès aux attributs

p Pour connaître ou modifier la valeur d’un attribut, il est nécessaire de créer, à


l’intérieur de la classe, des méthodes d’accès à ces attributs.
Méthodes d’accès

p Les méthodes d’une classe réalisent les modes d’accès sont :


p Accesseur en consultation : C’est une méthode publique fournit la valeur de
l’attribut privé mais ne peut la modifier.
p Accesseur en modification : C’est une méthode publique modifie la valeur
de l’attribut privé.
p Par convention, les accesseurs en consultation commencent par get et les
accesseurs en modification commencent par set.
ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 17 / 27
Encapsulation Les méthodes d’accès aux attributs

Exemple :
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 18 / 27


Affectation d’objets

Utilisons la classe Point définie précédemment.


.
public class TestPoint {
public static void main(String args[]){
Point A,B ;
A = new Point(3,5) ;
B = new Point(2,0) ;
A = B;
}
}

Après l’exécution de ce programme, on a la situation suivante en mémoire :


.

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 19 / 27


Affectation d’objets

Utilisons la classe Point définie précédemment.


.
public class TestPoint {
public static void main(String args[]){
Point A,B ;
A = new Point(3,5) ;
B = new Point(2,0) ;
A = B;
}
}

Après l’exécution de ce programme, on a la situation suivante en mémoire :


.

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 20 / 27


Affectation d’objets Exercice d’application

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 : ...................................................................................................................
.................................................................................................................................
.................................................................................................................................

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 21 / 27


Le mot clé "this"

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 : ...................................................................................................................
.................................................................................................................................
.................................................................................................................................

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 23 / 27


Membres statiques

p Rappel : membres = variables + méthodes


p Déclaration est précédée du modifieur static
p Un membre statique est lié à la classe et non à un objet de la classe. Autrement
dit, le membre est partagé par tout les objets de la classe (v membre globale).
p Pour accéder à un membre statique, il faut le précéder du nom de sa classe.
ç NomDeLaClasse.nomDeLaVariable
ç NomDeLaClasse.nomDeLaMethode(liste de paramètres)

Exemple :

Math.PI Math.cos(x) ...


⇒ La classe Math contient un membre de classe dont le nom est (PI et cos()).

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 24 / 27


Membres statiques

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 :

class Addition { public class TstMembreStatique {


static int c ; public static void main(String args[]) {
int a,b ; Addition obj1=new Addition(10,10) ;
Addition(int x, int y) {a=x ; b=y ; } Addition.fctConst(1) ;
static void fctConst(int cte){ System.out.println(obj1.somme()) ;
c=cte ; Addition.c= 2 ;
a=cte ;//Erreur car a n’est pas statique System.out.println(obj1.somme()) ;
} }
int somme(){ return a+b+c ;} }
}

Remarque
Une classe peut ne contenir que des membres static. Dans ce cas elle ne sert pas à créer des
objets ! ! !

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 25 / 27


Membres statiques Exercices d’applications

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 ?
.........................................................................................................................
.........................................................................................................................

ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java 27 octobre 2021 26 / 27


Membres statiques Exercices d’applications

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

Vous aimerez peut-être aussi