Conception par Objet et Programmation Java

1/26
100%

<!-- Slide number: 1 -->

Conception par Objet et Programmation Java

1

![](Picture6.jpg)

Chapitre 3 : Encapsulation

Equipe Java

2019-2020

![](Image15.jpg)

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

![](Image14.jpg)

<!-- Slide number: 7 -->

Encapsulation des classes 2/3

7

![](Image11.jpg)

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

![](Image11.jpg)

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

![](Image1.jpg)

<!-- Slide number: 10 -->

Encapsulation des attributs 2/5

10

![](Image2.jpg)

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

![](Image2.jpg)

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

![](Image2.jpg)

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é

![](Image2.jpg)

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

![](Image1.jpg)

<!-- Slide number: 15 -->

Encapsulation des méthodes 2/5

15

Méthode public

![](Image16.jpg)

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

![](Image11.jpg)

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

![](Image11.jpg)

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

![](Image11.jpg)

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

Notes:

Conception par Objet et Programmation Java

Programming, Math, etc. · course

Voir tous les documents en programmation

<!-- Slide number: 1 -->

Conception par Objet et Programmation Java

1

![](Picture6.jpg)

Chapitre 3 : Encapsulation

Equipe Java

2019-2020

![](Image15.jpg)

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

![](Image14.jpg)

<!-- Slide number: 7 -->

Encapsulation des classes 2/3

7

![](Image11.jpg)

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

![](Image11.jpg)

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

![](Image1.jpg)

<!-- Slide number: 10 -->

Encapsulation des attributs 2/5

10

![](Image2.jpg)

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

![](Image2.jpg)

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

![](Image2.jpg)

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é

![](Image2.jpg)

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

![](Image1.jpg)

<!-- Slide number: 15 -->

Encapsulation des méthodes 2/5

15

Méthode public

![](Image16.jpg)

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

![](Image11.jpg)

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

![](Image11.jpg)

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

![](Image11.jpg)

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

Notes: