Vous êtes sur la page 1sur 3

UMBB/FS/Dep.

Informatique Enseignant: Djaafri


Spécialité: TecWeb/S4 Module: CPOO

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

Modificateurs de porté pour les classes et membres


d'une classe
Un modificateur de porté est un mot clé java qu'on utilise devant le nom d'une
classe ou d'un membre d'une classe pour contrôler l'accès et l'utilisation de cette
classe et de ses membres.

Valeurs de modificateurs: private, public, [vide] (aucun modificateur)

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

=> L'encapsulation permet l'interdiction d'attribuer des valeurs


incohérentes aux données (valeurs non prévues lors de la conception
des classes d'objet).

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.

Reprise de l'exemple avec utilisation de l'encapsulation:

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.

=> L'encapsulation permet aussi de cacher les mécanismes de


l'implémentation (l'implémentation est comment sont réalisés les
traitements).

Exemple

Dans l'exemple suivant, on verra comment, on peut modifier la réalisation de la


classe Point sans que cela n'affecte l'utilisation de cette classe dans d'autres
classes.
UMBB/FS/Dep. Informatique Enseignant: Djaafri
Spécialité: TecWeb/S4 Module: CPOO

On suppose qu'on veut modifier le code de la classe Point, en définissant un point


non pas par ses coordonnées cartésiennes (ordonné et abscisse ) mais par ses
coordonnées polaires (angle et longueur ).

//code utilisant la classe Point


class MaClasse{
public static void main(String[] args){

Point p1 = new Point();


p1.x=33 ; /*cette affectation causera des des problèmes si on utilise la classe
Point avec la version coordonnées polaires*/
p1.translater(3,-5);
double d = p1.distance(); /* l'appel de la méthode distance() ne subira aucun
changement, malgré le changement de son
implémentation entre les deux versions de la classe Point */
}
}
...
L'utilisation de l'encapsulation dans la classe « Point », en déclarant les
propriétés x et y private, va interdire toute manipulation directe de x ou y.

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.

Vous aimerez peut-être aussi