Vous êtes sur la page 1sur 25

Conception par Objet et programmation Java

Encapsulation
Plan du cours

Introduction
Classe et objet
Encapsulation
Héritage
Polymorphisme
Exceptions
Interface et Collection
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

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 1/3

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-
Encapsulation des classes 2/3
La classe public

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 3/3
La classe default

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 1/5
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 2/5
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 3/5
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 {
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 -8-
Encapsulation des attributs 4/5
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 {
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 -9-
Encapsulation des attributs 5/5
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)
private (y)
default (z)
protected (w)
Encapsulation -10-
Encapsulation des méthodes 1/5
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.meth2() ; a.meth3();
} … … …
} } }
Encapsulation -11-
Encapsulation des méthodes 2/5
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 3/5
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 4/5
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 5/5
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

Dans le but de renforcer le contrôle de l'accès aux variables d'une


classe, il est recommandé de les déclarer private.

Pour la manipulation des attributs private, on utilise:


•Un mutateur (setter): est une méthode qui permet de définir
la valeur d'une variable particulière
•Un accesseur (getter): est une méthode qui permet d'obtenir
la valeur d'une variable particulière.

Le setter et le getter doivent être déclarés public

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 prix;
} }
Encapsulation -16-
Les attributs static 1/4

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 attibuts static 2/4

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 attibuts static 3/4

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 4/4

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 1/2

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 2/2

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