Vous êtes sur la page 1sur 31

Programmation Orientée

Objet Java

Encapsulation
Plan du cours

Encapsulation

Notion de package
Encapsulation des classes
Encapsulation des attributs/méthodes
Les attributs et méthodes static
Définition d’encapsulation
• L'encapsulation est un mécanisme consistant à rassembler les
données et les méthodes au sein d'une structure en cachant
l'implémentation de l'objet, c'est-à-dire en empêchant l'accès
aux données par un autre moyen que les services proposés.
• L'utilisateur d'une classe n'a pas forcément à savoir de quelle
façon sont structurées les données dans l'objet, cela signifie
qu'un utilisateur n'a pas à connaître l'implémentation
• . Ainsi, en interdisant l'utilisateur de modifier directement les
attributs, et en l'obligeant à utiliser les fonctions définies pour
les modifier
Définition d’encapsulation

Le principe d'encapsulation dit qu'un objet ne doit pas


exposer sa représentation interne au monde extérieur.

représentation interne d’un objet: monde extérieur


•Les attributs •Les autres classes dans la même package
•Les méthodes •Les classes des autres packages

Encapsulation -1-
C’est quoi un package?

Projet • Package = répertoire.


• Les classes Java peuvent être regroupées dans
package 1 des packages.

ClassA
Déclaration d’un package
ClassB
package pack1;
Package 2
Import d’un package
ClassC
import pack2.ClassC;
ClassD
import pack2.*;
Package 21
•Importe toutes les classe du package 2 (ClassC et ClassD)
ClassE •N’importe pas les classes du sous package 21 (ClassE)

Encapsulation -2-
Encapsulation des classes

Package 1 Package 2

class A class C

class B class D

•Dans le package 1, on a: class A et class B


•Dans le package 2, on a: class C et class D
•class C est la fille de class A

Encapsulation -3-
Déclaration de classes
[modificateur d’accés] class nom_classe
{
/*Déclaration des attributs*/
/*Déclaration des méthodes*/
}
L'encapsulation permet de définir des niveaux de visibilité des éléments pour
réglementer l’accès aux classes et aux objets, aux méthodes et aux données.
Il existe 3 modificateurs qui peuvent être utilisés pour définir les
attributs de visibilité des entités (classes, méthodes ou attributs) :

1-publique
2-protégé
3- Privé
4- par défaut

Leur utilisation permet de définir des niveaux de protection différents


Les mots clés qui gèrent la visibilité des entités
Encapsulation des classes
La classe public : : les fonctions de toutes les classes peuvent accéder aux données ou
aux méthodes d'une classe définie avec le niveau de visibilité public. Il s'agit du plus bas niveau
de protection des données
Package 1 Package 2

class A class C

class B class D

public class A La classe public est visible depuis n’importe quelle classe du projet.

public class A { class B { class C extends A{ class D {


A a; A a; A a;
… … … …
} } } }

Encapsulation -4-
Encapsulation des classes
La classe Protected : : l'accès aux données est réservé aux méthodes( fonctions)
membres de la classe ainsi que des classes dérivées

Package 1 Package 2

class A class C

class B class D

Protectedclass A La classe Protected est visible seulement par les classes dérivées
et les classes du même package .
class A { class B { class C extends A { class D {
A a; A a; A a;
… … … …
} } } }

Encapsulation -5-
Encapsulation des classes
La classe Private : l'accès aux données est limité aux méthodes de la classe elle-même.
Il s'agit du niveau de protection des données le plus élevé.

Package 1 Package 2

class A class C

class B class D

Private class A est seulement accessible depuis l'intérieur de la classe où


il est défini.
class A { class B { class C extends A { class D {
A a; A a; A a;
… … … …
} } } }

Encapsulation -5-
Encapsulation des classes
La classe default : sans modificateur d'accès, seules les classes du même
package peuvent accéder à cette classe.

Package 1 Package 2

class A class C

class B class D

class A La classe default est visible seulement par les classes de son package.

class A { class B { class C extends A { class D {


A a; A a; A a;
… … … …
} } } }

Encapsulation -5-
Encapsulation des attributs
L’attribut public

Package 1 Package 2

class A class C
public int x;
private int y;
int z;
protected w;
class B class D

public int x La variable public est visible par toutes les classes

public class A { class B { class C extends A { class D {


public int x; A a=new A(); A a=new A(); A a=new A();
… int t=a. x ; int t=a. x ; int t=a. x ;
} … … …
} } }
Encapsulation -6-
Encapsulation des attributs
L’attribut private

Package 1 Package 2

class A class C
public int x;
private int y;
int z;
protected w;
class B class D

private int y La variable private n'est accessible que depuis l'intérieur même
de la classe.
public class A { class B { class C extends A { class D {
private int y; A a=new A(); A a=new A(); A a=new A();
… int t=a. y ; int t=a. y ; int t=a. y ;
} … … …
} } }
Encapsulation -7-
Encapsulation des attributs
L’attribut default

Package 1 Package 2

class A class C
public int x;
private int y;
int z;
protected w;
class B class D

int y La variable default n'est accessible que depuis les classes faisant
partie du même package.
public class A { class B { class C extends A { class D {
int y; A a=new A(); A a=new A(); A a=new A();
… int t=a. y ; int t=a. y ; int t=a. y ;
} … … …
} } }
Encapsulation -8-
Encapsulation des attributs
L’attribut protected
Package 1 Package 2

class A class C
public int x;
private int y;
int z;
protected w;
class B class D

protected int y La variable protected est accessible uniquement aux classes d'un
package et à ses sous-classes (même si elles sont définies dans
un package différent.)
public class A { class B { class C extends A { class D {
protected int y; A a=new A(); A a=new A(); A a=new A();
… int t=a. y ; int t=a. y ; int t=a. y ;
} … … …
} } }
Encapsulation -9-
Encapsulation des attributs
Package 1 Package 2

class A class C
public int x;
private int y;
int z;
protected w;
class B class D

Visibilité à Classe Package Classe fille Tout le


partir de: reste
A B C D
public (x)
protected (y)
default (z)
private (w)

Encapsulation -10-
Encapsulation des méthodes
La méthode public
Package 1 Package 2

class A class C
public void meth1(){};
private void meth2(){};
void meth3(){};
protected void meth4(){};
class B class D

public void meth1() La méthode public est visible par toutes les classes

public class A { class B { class C extends A { class D {


public void meth1(){} A a=new A(); A a=new A(); A a=new A();
… a.meth1() ; a.meth1() ; a.meth1();
} … … …
} } }
Encapsulation -11-
Encapsulation des méthodes
La méthode private
Package 1 Package 2

class A class C
public void meth1(){};
private void meth2(){};
void meth3(){};
protected void meth4(){};
class B class D

private void meth2() La méthode private n'est accessible que depuis l'intérieur
même de la classe.

public class A { class B { class C extends A { class D {


private void meth2(){} A a=new A(); A a=new A(); A a=new A();
… a.meth2() ; a.meth2() ; a.meth2();
} … … …
} } }
Encapsulation -12-
Encapsulation des méthodes
La méthode default
Package 1 Package 2

class A class C
public void meth1(){};
private void meth2(){};
void meth3(){};
protected void meth4(){};
class B class D

void meth3() La méthode default n'est accessible que depuis les classes
faisant partie du même package.

public class A { class B { class C extends A { class D {


void meth3(){} A a=new A(); A a=new A(); A a=new A();
… a.meth3() ; a.meth3() ; a.meth3();
} … … …
} } }
Encapsulation -13-
Encapsulation des méthodes
La méthode protected
Package 1 Package 2

class A class C
public void meth1(){};
private void meth2(){};
void meth3(){};
protected void meth4(){};
class B class D

protected void meth3() La méthode protected est accessible uniquement aux


classes d'un package et à ses sous-classes (même si
elles sont définies dans un package différent.)
public class A { class B { class C extends A { class D {
protected void meth4(){} A a=new A(); A a=new A(); A a=new A();
… a.meth4() ; a.meth4() ; a.meth4();
} … … …
} } }
Encapsulation -14-
Encapsulation des méthodes
Package 1 Package 2

class A class C
public void meth1(){};
private void meth2(){};
void meth3(){};
protected void meth4(){};
class B class D

Visibilité à partir de: Classe Package Classe Tout le


fille reste
D
A B C
public (meth1)
private (meth2)
default (meth3)
protected (meth4)
Encapsulation -15-
Encapsulation des attributs/méthodes

Deux types de méthodes ont un statut particulier en Java : les getters et les setters .

Dans le but de renforcer le contrôle d’accès aux variables d'une classe, il est
recommandé de les déclarer private.

Pour la manipulation des attributs private, on utilise:


•Un accesseur (getter): est une méthode qui va nous permettre d'accéder aux
variables de nos objets en lecture
•Un mutateur (setter): nous permettra d'en faire de même en écriture (modifier)

Le nom de ces deux méthodes est fixé par une convention universellement suivie. Il
convient donc de la respecter !
Un getter commence par get, suivi d'un nom, qui est en général le nom du champ,
commençant par une majuscule. Il retourne une valeur en général du même type que le
champ associé.
Le setter associé commence par set, suivi du même nom que le get. Il prend en
paramètre un unique argument, du même type que le type de retour du getter associé.

Encapsulation -16-
La présence d'un getter définit dans une classe une propriété. Si aucun setter associé n'est
présent, alors cette propriété est en lecture seule.
private float prix; private boolean absent;

public void setPrix(float prix){ public void setAbsent(boolean absent){


this.prix=prix; this.absent=absent;
} }
public float getPrix(){ public boolean isAbsent(){
return prix; return absent;
} }
Les attributs static

Variable d’instance:
Etudiant [class]
Chaque instance de la classe possède
ses propres valeurs des variables.

Class Etudiant{
String nom;

Etudiant(String nom){ Etudiant [instance] Etudiant [instance]


this.nom=nom; nom nom
}
Ahmed Marwa
}

Etudiant etud1 = new Etudiant (“Ahmed");


Etudiant etud2 = new Etudiant (“Marwa");

Encapsulation -17-
Les attributs static

Variable d’instance:
Utilisation
On invoque les variables d’instance avec le nom de l’instance

Class Etudiant{ class Test{


String nom; public static void main(String[] args){

Etudiant(String nom){ Etudiant etudiant=new Etudiant();


this.nom=nom;
} System.out.println(etudiant.nom);
} }
}

Encapsulation -18-
Les attributs static
Variable de classe:
•n'appartient pas à une instance particulière, elle
appartient à la classe. Etudiant [class]
•est partagée par toutes les instances de la classe
nbrEtudiants
Class Etudiant{ 0
3
2
1
String nom;
static int nbrEtudiants;
Etudiant [instance]
Etudiant(String nom){ nom Etudiant [instance]
Ahmed
this.nom=nom; nom
Fatma
nbrEtudiants++;
}
Etudiant [instance]
} nom
Marwa
Etudiant etud1 = new Etudiant (“Ahmed");
Etudiant etud2 = new Etudiant (“Marwa");
Etudiant etud3 = new Etudiant (“Fatma");
Encapsulation -19-
Les attibuts static

Variable de classe:
Utilisation
On invoque les variables static avec le nom de la classe

class Etudiant{
String nom;
static int nbrEtudiants; class Test{
public static void main(String[] args){
Etudiant(String nom){
this.nom=nom; System.out.println(Etudiant.nbrEtudiants);
nbrEtudiants++;
} }
} }

Encapsulation -20-
Les méthodes static

Le comportement d’une méthode statique ne dépend pas de la valeur des


variables d'instance

class MaClassMath{ Utilisation:


L'appel à une méthode statique se fait en
static int min(int a , int b){ utilisant le nom de la classe.
if(a<b){
return a;
}else{ class Test {
return b; public static void main ( String [] args ){
} int x = MaClassMath .min (21 ,4);
} }
} }

Encapsulation -21-
Les méthodes static

Puisque les méthodes static appartiennent à la classe,


elles ne peuvent en aucun cas accéder aux variables
d'instances qui appartiennent aux instances de la classe.

•Les méthodes d’instances accèdent aux variables d’instance et méthodes d’instances


•Les méthodes d’instances accèdent aux variables de classe (static) et méthodes de
classe (static)
• Les méthodes de classe (static) accèdent aux variables de classe (static) et méthodes
de classe (static)
• Les méthodes de classe (static) n’accèdent pas aux variables de d’instance et
méthodes d’instance
• Dans une méthode static on ne peut pas utiliser this

Encapsulation -22-

Vous aimerez peut-être aussi