Académique Documents
Professionnel Documents
Culture Documents
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
Encapsulation -1-
C’est quoi un package?
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
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
class A class C
class B class D
public class A La classe public est visible depuis n’importe quelle classe du projet.
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
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.
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
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
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
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.
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.
class A class C
public void meth1(){};
private void meth2(){};
void meth3(){};
protected void meth4(){};
class B class D
class A class C
public void meth1(){};
private void meth2(){};
void meth3(){};
protected void meth4(){};
class B class D
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.
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;
Variable d’instance:
Etudiant [class]
Chaque instance de la classe possède
ses propres valeurs des variables.
Class Etudiant{
String nom;
Encapsulation -17-
Les attributs static
Variable d’instance:
Utilisation
On invoque les variables d’instance avec le nom de l’instance
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
Encapsulation -21-
Les méthodes static
Encapsulation -22-