Chapitre 2
Encapsulation
Mouna Torjmen Khemakhem
Définition d’encapsulation
Le principe d'encapsulation dit qu'un objet ne doit pas
exposer sa représentation interne au monde extérieur.
2
représentation interne d’un objet:
• Les attributs
• Les méthodes
monde extérieur
• Les autres classes dans la même package
• Les classes des autres packages
Mouna Torjmen Khemakhem
Les packages
Projet
package 1
ClassA
ClassB
• Package = répertoire.
• Les classes Java peuvent être regroupées dans
des packages.
Déclaration d’un package
package pack1;
Utilisation d’un package
1- Nom du package suivi de nom de la classe
3
Package 2
ClassB
ClassC
ClassD
2- Import de la classe du package
Package 21
ClassE
java.util.Date now = new java.util.Date() ;
System.out.println(now) ;
1- Nom du package suivi de nom de la classe
import java.util.Date ;
…
Date now = new Date() ;
System.out.println(now) ;
2- Import de tout le package
import java.util.*;
…
Date now = new Date() ;
System.out.println(now) ;Mouna Torjmen Khemakhem
Les packages
Les packages sont eux-mêmes organisés hiérarchiquement. : on
peut définir des sous-packages, des sous-sous-packages, …
Mouna Torjmen Khemakhem
Encapsulation des classes
class C est la fille de class A
5
Package 1
class A
class B
Package 2
class C
class D
Mouna Torjmen Khemakhem
Encapsulation des classes
Package 1
class A
class B
Package 2
class C
class D
La classe public
6
public class A {
…
}
public class A
class B {
A a;
…
}
La classe public est visible depuis n’importe quelle classe du projet.
class C extends A{
A a;
…
}
class B class D
class D {
A a;
…
}
Mouna Torjmen Khemakhem
Encapsulation des classes
Package 1
class A
class B
Package 2
class C
class D
La classe default
7
class A {
…
}
class A
class B {
A a;
…
}
class C extends A {
A a;
…
}
class D {
A a;
…
}
La classe default est visible seulement par les classes de son package.
class B class D
Mouna Torjmen Khemakhem
Encapsulation des attributs
Package 1
class A
public int x;
private int y;
int z;
protected int w;
class B
Package 2
class C
class D
L’attribut public
8
public class A {
public int x;
…
}
public int x
class B {
A a=new A();
int t=a. x ;
…
}
L’attribut public est visible par toutes les classes
protected int w;
class B class D
class C extends A {
A a=new A();
int t=a. x ;
…
}
class D {
A a=new A();
int t=a. x ;
…
}
Mouna Torjmen Khemakhem
Encapsulation des attributs
Package 1
class A
public int x;
private int y;
int z;
protected int w;
class B
Package 2
class C
class D
L’attribut private
9
public class A {
private int y;
…
}
private int y
class B {
A a=new A();
int t=a. y ;
…
}
L’attribut private n'est accessible que depuis l'intérieur même de
la classe.
class C extends A {
A a=new A();
int t=a. y ;
…
}
class D {
A a=new A();
int t=a. y ;
…
}
protected int w;
class B class D
Mouna Torjmen Khemakhem
Encapsulation des attributs
Package 1
class A
public int x;
private int y;
int z;
protected int w;
class B
Package 2
class C
class D
L’attribut default
10
public class A {
int z;
…
}
int z
class B {
A a=new A();
int t=a. z ;
…
}
L’attribut default n'est accessible que depuis les classes faisant
partie du même package.
class C extends A {
A a=new A();
int t=a. z ;
…
}
class D {
A a=new A();
int t=a. z ;
…
}
protected int w;
class B class D
Mouna Torjmen Khemakhem
Encapsulation des attributs
Package 1
class A
public int x;
private int y;
int z;
protected int w; class B
Package 2
class C
class D
L’attribut protected
11
public class A {
protected int w;
…
}
protected int w
class B {
A a=new A();
int t=a. w ;
…
}
L’attribut protected est accessible uniquement aux classes d'un
même package et à ses classes filles (même si elles sont définies
dans un package différent.)
class C extends A {
A a=new A();
int t=a.w;
…
}
class D {
A a=new A();
int t=a.w;
…
}
protected int w;
Mouna Torjmen Khemakhem
Encapsulation des attributs
Package 1
class A
public int x;
private int y;
int z;
protected int w;
class B
Package 2
class C
class D
12
Visibilité à
partir de:
Classe
A
Package
B
Classe fille
C
Tout le
reste
D
public (x)
private (y)
default (z)
protected (w)
Mouna Torjmen Khemakhem
Encapsulation des méthodes
Package 1
class A
public void meth1(){};
private void meth2(){};
void meth3(){};
protected void meth4(){}; class B
Package 2
class C
class D
La méthode public
13
public class A {
public void meth1(){}
…
}
public void meth1()
class B {
A a=new A();
a.meth1() ;
…
}
class C extends A {
A a=new A();
a.meth1() ;
…
}
class D {
A a=new A();
a.meth1();
…
}
protected void meth4(){}; class B class D
Mouna Torjmen Khemakhem
La méthode public est accessible par toutes les classes du
projet.
Encapsulation des méthodes
Package 1
class A
public void meth1(){};
private void meth2(){};
void meth3(){};
protected void meth4(){}; class B
Package 2
class C
class D
La méthode private
14
public class A {
private void meth2(){}
…
}
private void meth2()
class B {
A a=new A();
a.meth2() ;
…
}
La méthode private n'est accessible que depuis l'intérieur
même de la classe.
class C extends A {
A a=new A();
a.meth2() ;
…
}
class D {
A a=new A();
a.meth2();
…
}
protected void meth4(){}; class B class D
Mouna Torjmen Khemakhem
Encapsulation des méthodes
Package 1
class A
public void meth1(){};
private void meth2(){};
void meth3(){};
protected void meth4(){}; class B
Package 2
class C
class D
La méthode default
15
public class A {
void meth3(){}
…
}
void meth3()
class B {
A a=new A();
a.meth3() ;
…
}
La méthode default n'est accessible que depuis les classes
faisant partie du même package.
class C extends A {
A a=new A();
a.meth3() ;
…
}
class D {
A a=new A();
a.meth3();
…
}
protected void meth4(){}; class B class D
Mouna Torjmen Khemakhem
Encapsulation des méthodes
Package 1
class A
public void meth1(){};
private void meth2(){};
void meth3(){};
protected void meth4(){}; class B
Package 2
class C
class D
La méthode protected
public class A {
protected void meth4(){}
…
}
protected void meth4()
class B {
A a=new A();
a.meth4() ;
…
}
La méthode 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.)
class C extends A {
A a=new A();
a.meth4() ;
…
}
class D {
A a=new A();
a.meth4();
…
}
protected void meth4(){};
16Mouna Torjmen Khemakhem
Encapsulation des méthodes
Package 1
class A
public void meth1(){};
private void meth2(){};
void meth3(){};
protected void meth4(){};
class B
Package 2
class C
class D
17
Visibilité à partir de: Classe
A
Package
B
Classe
fille
C
Tout le
reste
D
public (meth1)
private (meth2)
default (meth3)
protected (meth4)
Mouna Torjmen Khemakhem
Encapsulation des attributs/méthodes
Dans le but de renforcer le contrôle de l'accès aux attributs d'une
classe, il est recommandé de les déclarer private.
Pour la manipulation des attributs private, on utilise:
• Un mutateur (setter): une méthode qui permet de définir
la valeur d'un attribut particulier.
• Un accesseur (getter): une méthode qui permet d'obtenir
la valeur d'un attribut particulier.
18
Le setter et le getter doivent être déclarés public
private float prix;
public void setPrix(float prix){
this.prix=prix;
}
public float getPrix(){
return prix;
}
private boolean exist;
public void setExist(boolean exist){
this.exist=exist;
}
public boolean isExist(){
return exist;
}
Mouna Torjmen Khemakhem
Exemple
class Rectangle {
private int longueur;
private int largeur ;
Rectangle (){
this. longueur = 0 ;
this. largeur = 0 ;
}
Rectangle(int longueur, int largeur){
19
Rectangle(int longueur, int largeur){
this. longueur = longueur ;
this. largeur = largeur ;
}
void allongerRectangle (int lg) { longueur+=lg ;}
void affiche () {System.out.println(" longueur= "+longueur+ " ; largeur =" +
largeur) ; }
public int getLongueur () {return(longueur) ;}
public int getLargeur () {return(largeur) ;}
}
19
Mouna Torjmen Khemakhem
Exemple
class TestRectangle {
public static void main (String[] args){
Rectangle r1;
r1=new Rectangle();
longueur=0, largeur=0
r1.affiche(); // Affiche longueur=? ; largeur=?
r1.longueur=20; // instruction incorrecte car l’attribut longueurest privé
20
r1.longueur=20; // instruction incorrecte car l’attribut longueurest privé
r1.largeur=10; // instruction incorrecte car l’attribut largeur est privé
r1=new Rectangle (20, 10) ;
r1.affiche () ; // Affiche longueur=? ; largeur=?
r1.allongerRectangle (5) ;
System.out.println (" longueur= "+r1.longueur) ; // erreur car l’attribut longueur
est privé
System.out.println (" longueur= "+r1.getLongueur() ) ; // Affiche longueur = ?
r1.affiche () ; // Affiche longueur=? ; largeur=?
}
}
Mouna Torjmen Khemakhem

POO Java Chapitre 2 Encapsulation

  • 1.
  • 2.
    Définition d’encapsulation Le principed'encapsulation dit qu'un objet ne doit pas exposer sa représentation interne au monde extérieur. 2 représentation interne d’un objet: • Les attributs • Les méthodes monde extérieur • Les autres classes dans la même package • Les classes des autres packages Mouna Torjmen Khemakhem
  • 3.
    Les packages Projet package 1 ClassA ClassB •Package = répertoire. • Les classes Java peuvent être regroupées dans des packages. Déclaration d’un package package pack1; Utilisation d’un package 1- Nom du package suivi de nom de la classe 3 Package 2 ClassB ClassC ClassD 2- Import de la classe du package Package 21 ClassE java.util.Date now = new java.util.Date() ; System.out.println(now) ; 1- Nom du package suivi de nom de la classe import java.util.Date ; … Date now = new Date() ; System.out.println(now) ; 2- Import de tout le package import java.util.*; … Date now = new Date() ; System.out.println(now) ;Mouna Torjmen Khemakhem
  • 4.
    Les packages Les packagessont eux-mêmes organisés hiérarchiquement. : on peut définir des sous-packages, des sous-sous-packages, … Mouna Torjmen Khemakhem
  • 5.
    Encapsulation des classes classC est la fille de class A 5 Package 1 class A class B Package 2 class C class D Mouna Torjmen Khemakhem
  • 6.
    Encapsulation des classes Package1 class A class B Package 2 class C class D La classe public 6 public class A { … } public class A class B { A a; … } La classe public est visible depuis n’importe quelle classe du projet. class C extends A{ A a; … } class B class D class D { A a; … } Mouna Torjmen Khemakhem
  • 7.
    Encapsulation des classes Package1 class A class B Package 2 class C class D La classe default 7 class A { … } class A class B { A a; … } class C extends A { A a; … } class D { A a; … } La classe default est visible seulement par les classes de son package. class B class D Mouna Torjmen Khemakhem
  • 8.
    Encapsulation des attributs Package1 class A public int x; private int y; int z; protected int w; class B Package 2 class C class D L’attribut public 8 public class A { public int x; … } public int x class B { A a=new A(); int t=a. x ; … } L’attribut public est visible par toutes les classes protected int w; class B class D class C extends A { A a=new A(); int t=a. x ; … } class D { A a=new A(); int t=a. x ; … } Mouna Torjmen Khemakhem
  • 9.
    Encapsulation des attributs Package1 class A public int x; private int y; int z; protected int w; class B Package 2 class C class D L’attribut private 9 public class A { private int y; … } private int y class B { A a=new A(); int t=a. y ; … } L’attribut private n'est accessible que depuis l'intérieur même de la classe. class C extends A { A a=new A(); int t=a. y ; … } class D { A a=new A(); int t=a. y ; … } protected int w; class B class D Mouna Torjmen Khemakhem
  • 10.
    Encapsulation des attributs Package1 class A public int x; private int y; int z; protected int w; class B Package 2 class C class D L’attribut default 10 public class A { int z; … } int z class B { A a=new A(); int t=a. z ; … } L’attribut default n'est accessible que depuis les classes faisant partie du même package. class C extends A { A a=new A(); int t=a. z ; … } class D { A a=new A(); int t=a. z ; … } protected int w; class B class D Mouna Torjmen Khemakhem
  • 11.
    Encapsulation des attributs Package1 class A public int x; private int y; int z; protected int w; class B Package 2 class C class D L’attribut protected 11 public class A { protected int w; … } protected int w class B { A a=new A(); int t=a. w ; … } L’attribut protected est accessible uniquement aux classes d'un même package et à ses classes filles (même si elles sont définies dans un package différent.) class C extends A { A a=new A(); int t=a.w; … } class D { A a=new A(); int t=a.w; … } protected int w; Mouna Torjmen Khemakhem
  • 12.
    Encapsulation des attributs Package1 class A public int x; private int y; int z; protected int w; class B Package 2 class C class D 12 Visibilité à partir de: Classe A Package B Classe fille C Tout le reste D public (x) private (y) default (z) protected (w) Mouna Torjmen Khemakhem
  • 13.
    Encapsulation des méthodes Package1 class A public void meth1(){}; private void meth2(){}; void meth3(){}; protected void meth4(){}; class B Package 2 class C class D La méthode public 13 public class A { public void meth1(){} … } public void meth1() class B { A a=new A(); a.meth1() ; … } class C extends A { A a=new A(); a.meth1() ; … } class D { A a=new A(); a.meth1(); … } protected void meth4(){}; class B class D Mouna Torjmen Khemakhem La méthode public est accessible par toutes les classes du projet.
  • 14.
    Encapsulation des méthodes Package1 class A public void meth1(){}; private void meth2(){}; void meth3(){}; protected void meth4(){}; class B Package 2 class C class D La méthode private 14 public class A { private void meth2(){} … } private void meth2() class B { A a=new A(); a.meth2() ; … } La méthode private n'est accessible que depuis l'intérieur même de la classe. class C extends A { A a=new A(); a.meth2() ; … } class D { A a=new A(); a.meth2(); … } protected void meth4(){}; class B class D Mouna Torjmen Khemakhem
  • 15.
    Encapsulation des méthodes Package1 class A public void meth1(){}; private void meth2(){}; void meth3(){}; protected void meth4(){}; class B Package 2 class C class D La méthode default 15 public class A { void meth3(){} … } void meth3() class B { A a=new A(); a.meth3() ; … } La méthode default n'est accessible que depuis les classes faisant partie du même package. class C extends A { A a=new A(); a.meth3() ; … } class D { A a=new A(); a.meth3(); … } protected void meth4(){}; class B class D Mouna Torjmen Khemakhem
  • 16.
    Encapsulation des méthodes Package1 class A public void meth1(){}; private void meth2(){}; void meth3(){}; protected void meth4(){}; class B Package 2 class C class D La méthode protected public class A { protected void meth4(){} … } protected void meth4() class B { A a=new A(); a.meth4() ; … } La méthode 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.) class C extends A { A a=new A(); a.meth4() ; … } class D { A a=new A(); a.meth4(); … } protected void meth4(){}; 16Mouna Torjmen Khemakhem
  • 17.
    Encapsulation des méthodes Package1 class A public void meth1(){}; private void meth2(){}; void meth3(){}; protected void meth4(){}; class B Package 2 class C class D 17 Visibilité à partir de: Classe A Package B Classe fille C Tout le reste D public (meth1) private (meth2) default (meth3) protected (meth4) Mouna Torjmen Khemakhem
  • 18.
    Encapsulation des attributs/méthodes Dansle but de renforcer le contrôle de l'accès aux attributs d'une classe, il est recommandé de les déclarer private. Pour la manipulation des attributs private, on utilise: • Un mutateur (setter): une méthode qui permet de définir la valeur d'un attribut particulier. • Un accesseur (getter): une méthode qui permet d'obtenir la valeur d'un attribut particulier. 18 Le setter et le getter doivent être déclarés public private float prix; public void setPrix(float prix){ this.prix=prix; } public float getPrix(){ return prix; } private boolean exist; public void setExist(boolean exist){ this.exist=exist; } public boolean isExist(){ return exist; } Mouna Torjmen Khemakhem
  • 19.
    Exemple class Rectangle { privateint longueur; private int largeur ; Rectangle (){ this. longueur = 0 ; this. largeur = 0 ; } Rectangle(int longueur, int largeur){ 19 Rectangle(int longueur, int largeur){ this. longueur = longueur ; this. largeur = largeur ; } void allongerRectangle (int lg) { longueur+=lg ;} void affiche () {System.out.println(" longueur= "+longueur+ " ; largeur =" + largeur) ; } public int getLongueur () {return(longueur) ;} public int getLargeur () {return(largeur) ;} } 19 Mouna Torjmen Khemakhem
  • 20.
    Exemple class TestRectangle { publicstatic void main (String[] args){ Rectangle r1; r1=new Rectangle(); longueur=0, largeur=0 r1.affiche(); // Affiche longueur=? ; largeur=? r1.longueur=20; // instruction incorrecte car l’attribut longueurest privé 20 r1.longueur=20; // instruction incorrecte car l’attribut longueurest privé r1.largeur=10; // instruction incorrecte car l’attribut largeur est privé r1=new Rectangle (20, 10) ; r1.affiche () ; // Affiche longueur=? ; largeur=? r1.allongerRectangle (5) ; System.out.println (" longueur= "+r1.longueur) ; // erreur car l’attribut longueur est privé System.out.println (" longueur= "+r1.getLongueur() ) ; // Affiche longueur = ? r1.affiche () ; // Affiche longueur=? ; largeur=? } } Mouna Torjmen Khemakhem