<!-- Slide number: 1 -->
Conception par Objet et Programmation Java
1

Chapitre 3 : Encapsulation
Equipe Java
2019-2020

Notes:
<!-- Slide number: 2 -->
Plan
2
Introduction
Classe et objet
Encapsulation
Héritage
Polymorphisme
Exceptions
Connexion Base de donnée
Interfaces
Lambda Expression
Collections
Stream
<!-- Slide number: 3 -->
Objectifs
3
Notion de package
Encapsulation des classes
Encapsulation des attributs/méthodes
Les attributs et méthodes static
<!-- Slide number: 4 -->
Encapsulation : définition
4
L’ encapsulation : est un des concepts fondamentaux de la POO (Programmation Orientée Objets)
Le principe d'encapsulation : un objet ne doit pas exposer sa représentation interne au monde extérieur.
| Représentation extérieur |
| --- |
| Les autres classes |
| Représentation interne |
| --- |
| 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.
L'objet est ainsi vu de l'extérieur comme une boîte noire
Protéger l'information contenue dans un objet et ne proposer que des méthodes de manipulation de cet objet
<!-- Slide number: 5 -->
C’est quoi un package ?
5
Package = répertoire.
Les classes Java peuvent être regroupées dans des packages.
Projet
package 1
Déclaration d’un package
ClassA
package pack1;
ClassB
Package 2
Import d’un package
ClassC
ClassD
import pack2.ClassC;
Package 21
import pack2.*;
ClassE
<!-- Slide number: 6 -->
Encapsulation des classes 1/3
6

<!-- Slide number: 7 -->
Encapsulation des classes 2/3
7

Classe public :
public class A {
…
}
class C extends A {
A a;
…
}
class B {
A a;
…
}
class D {
A a;
…
}
La classe public est visible depuis n’importe quelle classe du projet.
Notes:
<!-- Slide number: 8 -->
Encapsulation des classes 3/3
8

Default classe
class A {
Publicité
…
}
class C extends A {
A a;
…
}
class B {
A a;
…
}
class D {
A a;
…
}
La classe default est visible seulement par les classes de son package.
Notes:
<!-- Slide number: 9 -->
Encapsulation des attributs 1/5
9

<!-- Slide number: 10 -->
Encapsulation des attributs 2/5
10

L’attribut public
public class A {
public int x;
…
}
class C extends A {
A a=new A();
a. x = t ;
x = t ;
}
class B {
A a=new A();
a. x = t ;
}
class D {
A a=new A();
a. x = t ;
}
La variable public est visible par toutes les classes
Notes:
<!-- Slide number: 11 -->
Encapsulation des attributs 3/5
11

L’attribut private
public class A {
…
}
private int y;
class C extends A {
A a=new A();
a. y = t ;
y= t;
}
class B {
A a=new A();
a. y = t ;
}
class D {
A a=new A();
a. y = t ;
}
La variable private n'est accessible que depuis l'intérieur même de la classe.
Notes:
<!-- Slide number: 12 -->
Encapsulation des attributs 4/5
12
L’attribut par défaut : package friendly

public class A {
…
}
int z ;
class C extends A {
A a=new A();
a. z = t ;
z = t;
}
class D {
A a=new A();
a. z = t ;
}
class B {
A a=new A();
a.z= t ;
}
La variable par défaut n'est accessible que depuis les classes faisant partie du même package.
Notes:
<!-- Slide number: 13 -->
Encapsulation des attributs 5/5
13
Publicité

L’attribut protected
public class A {
…
protected int w ;
}
class C extends A {
A a=new A();
a. w = t ;
w = t;
}
class B {
A a=new A();
a.w= t ;
}
class D {
A a=new A();
a. z = t ;
}
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.)
Notes:
<!-- Slide number: 14 -->
Encapsulation des méthodes 1/5
14

<!-- Slide number: 15 -->
Encapsulation des méthodes 2/5
15
Méthode public

public class A {
public void meth1()
{ }
…
}
class C extends A {
A a=new A();
a.meth1() ;
meth1();
}
class B {
A a=new A();
a.meth1() ;
}
class D {
A a=new A();
a.meth1() ;
}
La méthode public est visible par toutes les classes
Notes:
<!-- Slide number: 16 -->
Encapsulation des méthodes 2/5
16
Méthode private

public class A {
private void meth2 ()
{ }
…
}
class C extends A {
A a=new A();
a.meth1() ;
meth1();
}
class B {
A a=new A();
a.meth1() ;
}
class D {
A a=new A();
a.meth1() ;
}
La méthode private n'est accessible que depuis l'intérieur même de la classe.
Notes:
<!-- Slide number: 17 -->
Encapsulation des méthodes 3/5
17
Méthode par défaut : package friendly

public class A {
void meth3 () {}
…
}
class C extends A {
A a=new A();
a.meth1() ;
meth1() ;
}
class B {
A a=new A();
a.meth1() ;
}
class D {
A a=new A();
Publicité
a.meth1() ;
}
La méthode par défaut n'est accessible que depuis les classes faisant partie du même package.
Notes:
<!-- Slide number: 18 -->
Encapsulation des méthodes 4/5
18
Méthode protected

public class A {
Protected void meth4() {}
…
}
class B {
A a=new A();
a.meth1() ;
}
class C extends A {
A a=new A();
a.meth1() ;
meth1() ;
}
class D {
A a=new A();
a.meth1() ;
}
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.)
Notes:
<!-- Slide number: 19 -->
Encapsulation des attributs/méthodes
19
Pour la manipulation des attributs private, il faut :
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.
Les setter et les getter doivent être déclarés public
<!-- Slide number: 20 -->
Encapsulation des attributs/méthodes : Exemples
20
private float prix;
public void setPrix(float prix){
this.prix=prix;
}
public float getPrix(){
return prix;
}
private boolean absent;
public void setAbsent(boolean absent){
this.absent=absent;
}
public boolean isAbsent(){
return absent;
}
<!-- Slide number: 21 -->
Les attributs static 1/4
21
Variable d’instance:
| Etudiant [class] |
| --- |
| |
Chaque instance de la classe possède ses propres valeurs des variables.
Class Etudiant {
String nom;
Etudiant(String nom){
this.nom=nom;
}
}
| Etudiant [instance] |
| --- |
| |
| Etudiant [instance] |
| --- |
| |
nom
nom
Ahmed
Marwa
Etudiant etud1 = new Etudiant (“Ahmed");
Etudiant etud2 = new Etudiant (“Marwa");
<!-- Slide number: 22 -->
Les attributs static 2/4
22
Variable d’instance:
Class Etudiant {
String nom;
Etudiant(String nom){
this.nom=nom;
}
}
class Test {
public static void main(String[] args){
Etudiant etudiant =new Etudiant();
System.out.println(etudiant.nom);
}
}
On invoque les variables d’instance avec le nom de l’instance
Publicité
<!-- Slide number: 23 -->
Les attributs static 3/4
23
0
1
Variable de classe:
2
| Etudiant [class] |
| --- |
| |
3
n'appartient pas à une instance particulière
elle appartient à la classe.
elle est partagée par toutes les instances de la classe
nbrEtudiants
| Etudiant [instance] |
| --- |
| |
| Etudiant [instance] |
| --- |
| |
Class Etudiant {
String nom;
static int nbrEtudiants;
Etudiant(String nom){
this.nom=nom;
nbrEtudiants++;
}
}
nom
nom
Ahmed
Fatma
| Etudiant [instance] |
| --- |
| |
nom
Marwa
Etudiant etud1 = new Etudiant (“Ahmed");
Etudiant etud2 = new Etudiant (“Marwa");
Etudiant etud3 = new Etudiant (“Fatma");
<!-- Slide number: 24 -->
Les attributs static 4/4
24
Variable de classe:
class Etudiant{
String nom;
static int nbrEtudiants;
Etudiant(String nom){
this.nom=nom;
nbrEtudiants++;
}
}
class Test{
public static void main(String[] args){
System.out.println(Etudiant.nbrEtudiants);
}
}
On invoque les variables static avec le nom de la classe
<!-- Slide number: 25 -->
Les méthodes static 1/2
25
Le comportement d’une méthode statique ne dépend pas de la valeur des variables d'instance
class MaClassMath {
static int min(int a , int b){
if(a<b){
return a;
}else{
return b;
}
}
}
Utilisation:
L'appel à une méthode statique se fait en
utilisant le nom de la classe.
class Test {
public static void main ( String [] args ){
int x = MaClassMath .min (21 ,4);
}
}
Notes:
<!-- Slide number: 26 -->
Les méthodes static 2/2
26
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