Académique Documents
Professionnel Documents
Culture Documents
Encapsulation
Définitions
• L'encapsulation est la possibilité de pour un objet de cacher ses données
(les rendre protéger).
• L'accès depuis l'extérieur de la classe aux données ne peut se faire qu'à
travers ses méthodes.
• Les données qu'on veut cacher doivent être invisibles depuis l'extérieur
(données ou propriétés privées).
• Les méthodes qui permettent d'accéder aux données doivent être visibles
depuis l'extérieur pour qu'elles soient utilisables dans d'autres classes
(méthodes publiques).
private public
Non autorisé La classe peut être utilisée La classe ne peut être
(utilisé dans les classes dans n’importe quelle classe utilisée que dans les
Classe
internes:hors du cours) classes du même
package
Attribut accessible Attribut accessible Attribut accessible
uniquement dans le directement depuis code de uniquement dans le code
Propriété
code de la classe qui le n’importe quelle classe des classes du même
définit package.
Méthode invoquée Méthode invoquée dans le Méthode invoquée
uniquement dans le code de n’importe quelle uniquement dans le les
méthode
code de classe qui le classe. méthodes des classes du
définit. même package.
Intérêt
Exemple
class Personne {
String nom;
String prenom;
Int age;
UMBB/FS/Dep. Informatique Enseignant: Djaafri
Spécialité: TecWeb/S4 Module: CPOO
/* déclaration des méthodes
…*/
}
Class TestPersonne {
Public static void main (String args[]){
Nom="Daki";
Prenom="salah";
age=-30;
}
}
L'encapsulation permet d'éviter d'attribuer la valeur -30 à la propriété age.
class Personne {
private String nom;
private String prenom;
private Int age;
/* déclaration des méthodes*/
public void setAge(int age){
if (age>0) this.age=age;
}
…
}
class TestPersonne {
public static void main (String args[]){
Personne per1=new Personne();
per1.age=-30; /*erreur de compilation; la donnée age est cachée, elle est déclarée
private*/
per1.setAge(-30);
/* appel de la méthode publique setAge avec la valeur -30 passée en argument,
mais aucune valeur ne sera affectée à age */
per1.setAge(30);
/* appel de la méthode publique setAge avec la valeur 30 passée en argument, la
valeur 30 sera affectée à age de l'objet per1 */
}
}
Dans l'exemple précédent l'encapsulation nous a permet de restreindre les
valeurs de la propriété age et de la rendre cohérente avec sa sémantique.
Exemple
De ce fait, les classes qui utiliseront la classe « Point », comme le cas de la classe
« MaClasse », ne demanderont aucune maintenance si l'implémentation de la
classe « Point » change, l'essentiel est que les signatures des méthodes
publiques ne changent pas.