Conception Orienté Objet
et Programmation Java
Chapitre 4: Encapsulation
Objectifs du chapitre
● Notion de package
● Encapsulation des classes
● Encapsulation des attributs
● Encapsulation des méthodes
2
Package
Les packages en Java sont un mécanisme de regroupement de
classes qui permet de structurer les fichiers de votre projet en
catégories logiques.
Les paquetages (packages) sont organisés hiérarchiquement comme
des répertoires de classes.
⇒ Package = répertoire.
3
Package
Project
Déclaration d’un package
package1 package package1;
ClassA Import d’un package
ClassB
import [Link]; //importer une seule Classe
package2 import package2.*; //importer toutes les Classes sous
le package
ClassC
ClassD
Package21
ClassE 4
Package
Déclaration d’un package
Structure de projet
Import d’un package
5
Package
ll existe également des packages qui sont automatiquement importés
pour chaque classe Java d'une façon implicite.
Ex:
Les classes du package “[Link]” (String, Integer, Boolean,Object ….).
Il existe un package par défaut en Java, appelé "default package", qui
est utilisé pour les classes qui ne sont pas explicitement déclarées dans
un package. Ces classes ne sont accessibles que par celles qui se
trouvent dans le même package par défaut.
6
Encapsulation
L'encapsulation est un concept qui consiste à rendre
les membres d'un objet plus ou moins visibles pour les autres objets.
L'encapsulation est une manière de définir une classe de telle sorte
que ses attributs ne puissent pas être directement manipulés de
l'extérieur de la classe, mais seulement indirectement par
l'intermédiaire des méthodes.
7
Encapsulation
L'encapsulation peut être appliquée à différents éléments, notamment :
● Les classes : vous pouvez contrôler qui peut accéder aux classes.
● Les constructeurs : vous pouvez contrôler qui peut instancier les classes.
● Les variables d'instance : vous pouvez contrôler qui peut accéder aux
variables d'instance de votre classe.
● Les méthodes : vous pouvez contrôler qui peut appeler les méthodes de
votre classe.
8
Encapsulation
Java offre 4 modificateurs d’accès:
● public : accès non contrôlé
● private : accès limité à la classes courante
● protected : accès limité au membre du package et à ses
descendants (classes filles)
● default : accès limité au membre du package. Il n'existe pas de mot
clef pour ce type de modificateur, de ce fait si aucun mot clé parmi
public, private ou protected n'est utilisé alors l'élément est considéré
comme étant par défaut. 9
Encapsulation des classes (1/3)
Les classes peuvent uniquement être publiques ou par défaut. 10
Encapsulation des classes (2/3)
public
public class A {
…
}
class B { class C extends A { class D {
A a; A a; A a;
… … …
} } }
Une classe public est visible depuis n’importe quelle classe du projet. 11
Encapsulation des classes (3/3)
default
class A {
…
}
class B { class C extends A { class D {
A a; A a; A a;
… … …
} } }
Une classe default est visible seulement par les classes de son package. 12
Encapsulation des attributs (1/4)
public
class A {
public int x;
…
}
class B { class C extends A { class D {
A a=new A(); A a=new A(); A a=new A();
a.x = t ; a.x = t ; a.x = t ;
this.x = t ;
} } }
Un attribut public est visible par toutes les classes 13
Encapsulation des attributs (2/4)
private
class A {
private int y;
…
}
class B { class C extends A { class D {
A a=new A(); A a=new A(); A a=new A();
a. y = t; a. y = t; a. y = t;
y= t;
} } }
Un attribut private n'est accessible que depuis l'intérieur même de la classe. 14
Encapsulation des attributs (3/4)
default
class A {
int z;
…
}
class B { class C extends A { class D {
A a=new A(); A a=new A(); A a=new A();
a.z = t; a.z = t; a.z = t;
z= t;
} } }
La variable default n'est accessible que depuis les classes du même 15
package.
Encapsulation des attributs (4/4)
protected
class A {
protected int w;
…
}
class B { class C extends A { class D {
A a=new A(); A a=new A(); A a=new A();
a.w = t; a.w = t; a.w = t;
this.w= t;
} } }
Un attribut protected est accessible uniquement aux classes du même package
et à ses sous-classes (même si elles sont définies dans un package différent.) 16
Encapsulation des méthodes(1/4)
public
class A {
public void meth1(){ }
…
}
class B { class C extends A { class D {
A a=new A(); A a=new A(); A a=new A();
a.meth1() ; a.meth1() ; a.meth1() ;
this.meth1();
} } }
Une méthode public est visible par toutes les classes 17
Encapsulation des méthodes(2/4)
private
class A {
private void meth2(){ }
…
}
class B { class C extends A { class D {
A a=new A(); A a=new A(); A a=new A();
a.meth2() ; a.meth2(); a.meth2() ;
meth2();
} } }
Une méthode private n'est accessible que depuis l'intérieur de sa
18
classe.
Encapsulation des méthodes(3/4)
default
class A {
void meth3(){ }
…
}
class B { class C extends A { class D {
A a=new A(); A a=new A(); A a=new A();
a.meth3() ; a.meth3(); a.meth3() ;
meth3();
} } }
Une méthode default n'est accessible que depuis les classes du
19
même package.
Encapsulation des méthodes(4/4)
protected
class A {
protected void meth3(){ }
…
}
class B { class C extends A { class D {
A a=new A(); A a=new A(); A a=new A();
a.meth4() ; a.meth4(); a.meth4();
this.meth4();
} } }
Une méthode protected est accessible aux classes du même package et à ses
sous-classes (même si elles sont définies dans un package différent.) 20
Encapsulation des méthodes/attributs
Modificateur Classe Paquetage Classe fille Autre classe
private visible
visible visible*
default visible
(même package) (même package)
protected visible visible visible
public visible visible visible visible
*Les sous-classes peuvent accéder aux attributs et aux méthodes de la
21
classe mère si elles se trouvent dans le même package
Les accesseurs (GET) et les mutateurs
(SET)
Les accesseurs ("getters") et les mutateurs ("setters") sont des
méthodes spéciales qui permettent d'accéder et de modifier les attributs
d'un objet.
Les accesseurs sont utilisés pour lire la valeur d'une propriété, tandis
que les mutateurs sont utilisés pour en changer la valeur.
Attention : Les setter et les getter doivent être déclarés public 22
Les accesseurs (GET) et les mutateurs
(SET)
Les accesseurs sont généralement Les mutateurs sont généralement
définis avec le mot-clé "get" suivi définis avec le mot-clé "set" suivi
du nom de la propriété, par du nom de la propriété, par
exemple : exemple :
public class Product { public class Product {
private int quantity; private int quantity;
public void setQuantity(int quantity) {
public int getQuantity() {
[Link] = quantity;
return quantity; }
} }
}
23
Les accesseurs (GET) et les mutateurs
(SET)
L’accesseur d'un attribut booléen (boolean) s'écrit avec le "is",
exemple :
public class Product {
private boolean onSale;
public int isOnSale() {
return onSale;
}
}
24
Les accesseurs (GET) et les mutateurs
(SET)
L’utilisation des getter et setter permet de gérer les modifications
de manière centralisée et de valider les entrées avant de les
enregistrer.
public class Product {
private int quantity;
public void setQuantity(int quantity) {
if (quantity < 0)
[Link]("The quantity must be a positive number");
else
[Link] = quantity;
}
}
25
Merci pour votre attention
26