20
Mécanismes de base de la Programmation Orientée Objet 1. Encapsulation des données 2. Héritage 3. Polymorphisme Université A. Mehri. Constantine (2) Année Universitaire 2015-2016 Faculté NTIC 1 ère Année MI Département MI Introduction à la Programmation Objet Chapitre 2 4. Exemple récapitulatif 1

Réalisation de la classe Lampe - dbenmerzoug.e …dbenmerzoug.e-monsite.com/medias/files/l1-ipo-chap2-partie1-.pdf · Département MI Introduction à la Programmation Objet Chapitre

  • Upload
    hahuong

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

Mécanismes de base de la Programmation Orientée Objet

1. Encapsulation des données

2. Héritage

3. Polymorphisme

Université A. Mehri. Constantine (2) Année Universitaire 2015-2016Faculté NTIC 1ère Année MIDépartement MI Introduction à la Programmation Objet

Chapitre 2

4. Exemple récapitulatif

1

1. Encapsulation des données

Principe :L’encapsulation réunit les deux concepts suivants :

la notion de module : regrouper ou encapsuler les champs et les méthodes au sein d’une même structure : la classe;

la notion d’accessibilité : qui permet de limiter l’accès des champs à la classe dans laquelle ils sont déclarés. Ces champs sont encapsulés pour exprimer qu’ils font partie exclusivement de l’implémentation de leur classe. Les objets sont manipulés via les méthodes publiques.

Avantages • protection de l’accès aux données : mécanisme d’accès / modification• augmentation de la sécurité d’une application• facilité de la maintenance de l’application

2

2. Mécanisme d’héritage (Exemple introductif)

Classe Point

public class Point3D {private double x, y, z;

public Point3D(){x=0; y=0; z=0;}public Point3D (double x, double y, double z){this.x=x; this.y=y; this.z=z;}

public void deplace (double dx, double dy){x += dx; y += dy;}

void deplace (double dx, double dy, double dz){x += dx; y += dy; z += dz;}

public void identifie() {System.out.println("Je suis un point3D");}

double getX(){ return x;}

double getY() {return y;}

double getZ() {return z;}

public class Point {private double x, y;

public Point(){x=0; y=0;}public Point (double x, double y) {this.x=x; this.y=y;;}

public void deplace (double dx, double dy){x += dx; y += dy;}

public void identifie() {System.out.println("Je suis un point");}

public double getX(){ return x;}

public double getY() {return y;}}

Classe Point3D

3

public class Point3D {private double x, y, z;

public Point3D(){x=0; y=0; z=0;}public Point3D (double x, double y, double z){this.x=x; this.y=y; this.z=z;}

public void deplace(double dx, double dy){x += dx; y += dy;}void deplace(double dx, double dy, double dz) {x += dx; y += dy; z += dz;}public void identifie() {System.out.println ("Je suis un point3D"); }double getX(){ return x;}double getY() {return y;}double getZ() {return z;}

public class Point {private double x, y;

public Point(){x=0; y=0;}public Point (double x, double y){this.x=x; this.y=y;;}

public void deplace(double dx, double dy){x += dx; y += dy;}public void identifie() {System.out.println("Je suis un point"); } public double getX(){ return x;}public double getY() {return y;}}

SimilitudeDifférence

Remarques :

4. Point3D adapte quelques méthodes de Point en les réécrivant (Redéfinition de la méthode identifie())

1. Point3D est un enrichissement de Point avec de nouvelles variables (double z)

2. Point3D est un enrichissement de Point avec de nouvelles méthodes (getZ(), deplace())

3. Point3D possède le comportement défini dans Point (getX(), getY(), deplace(), identifie())

Classe Point Classe Point3D

Mécanisme d’héritage (Exemple introductif)

4

La classe Point3D est une extension de la classe Point

Classe Point Classe Point3D

OU Point3D est une spécialisation de la classe Point

Mécanisme d’héritage (Exemple introductif)

public class Point3D {private double x, y, z;

public Point3D(){x=0; y=0; z=0;}public Point3D (double x, double y, double z){this.x=x; this.y=y; this.z=z;}

public void deplace(double dx, double dy){x += dx; y += dy;}void deplace(double dx, double dy, double dz) {x += dx; y += dy; z += dz;}public void identifie() {System.out.println ("Je suis un point3D"); }double getX(){ return x;}double getY() {return y;}double getZ() {return z;}

public class Point {private double x, y;

public Point(){x=0; y=0;}public Point (double x, double y){this.x=x; this.y=y;;}

public void deplace(double dx, double dy){x += dx; y += dy;}public void identifie() {System.out.println("Je suis un point"); } public double getX(){ return x;}public double getY() {return y;}}

SimilitudeDifférence

5

Mécanisme d’héritage

La classe Point3D peut être créée à partir de la classe Point en utilisant le mécanisme d’Héritage ou Sous-classe

Point double x, y

deplace()Identifie()getX()getY()

Point3D extends Point

double z

deplace()Identifie()getZ()

Classe de base (super-classe)

Classe dérivée (sous-classe)

Point3D hérite de Point

6

Mécanisme d’héritage

La classe Point3D est créée à partir de la classe Point en utilisant le mécanisme d’Héritage ou Sous-classe

Point3D extends Point

double z

deplace()Identifie()getZ()

Sous-classe (classe dérivée)

Point3D double x, y

double zdeplace()getX()getY()deplace()getZ()Identifie()

Caractéristiques de Point3D

Méthodes héritées

Méthodes ajoutées

Méthode redéfinie

Variables héritées

Variable ajoutée

7

Mécanisme d’héritage (Caractéristiques d’une sous-classe)

1. Une sous-classe hérite des attributs de sa super-classe (double x , y).

2. Une sous-classe hérite des méthodes de sa super-classe (getX(), getY(), deplace()).

3. Une sous-classe spécialise sa super-classe, en ajoutant de nouveaux attributs (double z) et/ou de nouvelles méthodes (getZ(), deplace()).

4. Une sous-classe spécialise sa super-classe, en redéfinissant les méthodes de sa super-classe(identifie()).

Point

double x, y

deplace()Identifie()getX()getY()

Point3D extends Point

double z

deplace()Identifie()getZ()

8

1. Une sous-classe spécialise une seule super-classe Héritage simple: adopté dans JAVA. L’ensemble des classes forme une arborescence ou un arbre d’héritage.

2. Une sous-classe spécialise une ou plusieurs super-classes Héritage multiple: Interdit dans JAVA et adopté dans C++ et Smalltalk.L’ensemble des classes forme un treillis d’héritage.

3. Une classe peut être spécialisée par une ou plusieurs sous-classes

4. Une sous-classe peut à son tour être spécialisée par une autre classe

Mécanisme d’héritage (Caractéristiques d’une sous-classe)

Remarque:Une classe déclarée

final ne peut plus être

dérivée

9

Mécanisme d’héritage

L’héritage est un mécanisme:

1. fondamental de la POO

2. par lequel on définit, par spécialisation, de nouvelles classes

(classes dérivées) à partir de classes existantes (classes de base)

4. de réutilisation de composants logiciels (Classes)

3. d’organisation des classes en hiérarchie

10

Mécanisme d’héritage (Création de sous-classe)

{protected double x, y, z;

public Point3D(){ x=0; y=0; z =0;}public Point3D (double x, double y, double z){this.x=x; this.y=y; this.z=z;}

void deplace(double dx, double dy, double dz) {x += dx; y += dy; z += dz;}public void identifie() {System.out.println("Je suis un point3D");} public void deplace(double dx, double dy) x += dx; y += dy;}{double getX(){ return x;}double getY() {return y;}double getZ() {return z;}

public class Point {protected double x, y;

public Point(){x=0; y=0;}public Point (double x, double y) {this.x=x; this.y=y;;}public void deplace(double dx, double dy) {x += dx; y += dy;}public void identifie() {System.out.println("Je suis un point");} public double getX(){ return x;}public double getY() {return y;}}

Héritage

Point :

Point3D :

Super();Super(x, y);

Classe de base, super-classe

Classe dérivée, sous-classe

Super.deplace(dx, dy) ou deplace(dx, dy)

extends Point public class Point3D

11

public class Point3D {

protected double z;

public Point3D() { Super(); z =0;}public Point3D (double x, double y, double z) { Super(x, y); this.z=z;}

public void identifie() {System.out.println("Je suis un point3D");}

public void deplace (double dx, double dy, double dz) { super. deplace(dx, dy); z += dz;}

public double getZ() {return z;} }

public class Point {protected double x, y;

public Point(){x=0; y=0;}public Point (double x, double y) {this.x=x; this.y=y;;}

public void identifie() {System.out.println("Je suis un point");}

public double ge tX(){ return x;}public double getY() {return y;}} public void deplace(double dx, double dy) {x += dx; y += dy;}

Héritage

extends Point

Variables d’instance héritées par la classe Point3D

Méthodes ajoutées

Méthodes d’instance héritées par la classe Point3D

Méthode redéfinie

Point : Classe de base, super-classe

Point3D : Classe dérivée, sous-classe

Mécanisme d’héritage (Création de sous-classe)

Variable ajoutée

12

Le modificateur d’accès protected est introduit pour permettre aux sous-classes d’accéder aux membres des super-classes.

Accessibilité :

Une méthode d’une classe dérivée n’a pas accès aux membres privés de sa classe de base.

Modificateurs d’accès : publicprivateprotected

Mécanisme d’héritage (Création de sous-classe)

public class Point {protected double x, y;

……

13

Un constructeur d’une classe dérivée appelle un constructeur d’une classe de base en utilisant super(). super() doit obligatoirement être la première instruction du constructeur.

Construction et initialisation des objets dérivés : (1)

En Java, le constructeur de la classe dérivée doit prendre en charge l’intégralité de la construction de l’objet.

Attention : 1. Super() n’est appelé qu’à partir d’un constructeur.2. L’appel par super() ne concerne que le constructeur de la classe de base du niveau

immédiatement supérieur.

Mécanisme d’héritage (Création de sous-classe)

public class Point {

public Point3D() { Super(); z =0;}public Point3D (double x, double y, double z) { Super(x, y); this.z=z;}

14

Construction et initialisation des objets dérivés : (2)

Mécanisme d’héritage (Création de sous-classe)

public class Point {

public Point3D() { Super(); z =0;}public Point3D (double x, double y, double z) { Super(x, y); this.z=z;}

Remarque 1:Le constructeur Java par défaut est appliqué en cas d’absence d’un constructeur dans la sous-classe.

Remarque 2: (super v.s super() )super permet de pointer la super-classe immédiate super() permet l’appel du constructeur de la super-classe immédiate

15

Redéfinition des méthodes

Redéfinir une méthode consiste à créer dans une sous-classe une méthode dont la signature (nom, nombre, type et ordre des arguments) est identique à celle de la super-classe. La nouvelle méthode "masque " alors celle de la super-classe.

Remarque 1:La méthode identifie() est dite méthode polymorphe

Mécanisme d’héritage (Création de sous-classe)

public class Point {

public void identifie() { System.out.println("Je suis un point3D");}….

Remarque 2:Une méthode déclarée final ne peut pas être redéfinie dansune classe dérivée.

16

surcharge (overloading) et Redéfinition (overriding) des méthodes

Surcharge : permet la définition de plusieurs méthodes de même nom au niveau d’une même classe (les méthodes surchargées sont différentes par le nombre et le type de leurs arguments).

Redéfinition : permet la redéfinition (fournir un nouveau code en préservant la signature) d’une méthodes de la super-classe dans une .sous-classe

Mécanisme d’héritage (Création de sous-classe)

Dans la classe Point3G :

public void identifie() Méthode redéfinie

public void deplace (double dx, double dy, double dz) public void deplace(double dx, double dy) Méthodes surchargées

17

Mécanisme d’héritage (La Super-classe Object)

Dans le langage java toutes les classes héritent de la classe générique Object. Object définit le Comportement spécifique à tous les objets dans Java.

public class Point extends Object {………..}

Quelques méthodes définies dans Object : peuvent être redéfinies dans les sous-classes : 1. La méthode d’instance toString() retourne une chaîne (String) contenant :

• le nom de la classe concernée,• l’adresse de l’objet en hexadécimal (précédée de @).

2. La méthode d’instance equals(Object o) compare les adresses des deux objets concernés et retourne un boolean. Ainsi, avec :Object o1 = new Point (1, 2) ;Object o2 = new Point (1, 2) ;L’expression o1.equals(o2) retourne la valeur false.

18

Création et manipulation d’objets dérivés

Mécanisme d’héritage (Exemple d’éxecution)

public class TestPoint3D extends Object {

public static void main { String[] args) {

Point3D pt = new Point3D (2,3,4);

pt.identifie();

System.out.println ("Coordonnées "+ pt.getX()+" "+pt.getY()+" "+pt.getZ());

pt.deplace(1,1,1);

System.out.println ("Coordonnées "+ pt.getX()+" "+pt.getY()+" "+pt.getZ());

Je suis un point3DCoordonnées 2.0 3.0 4.0Coordonnées 3.0 4.0 5.0

Execution Console

19

Réaliser la classe Point3DColoré. Un objet de type point3DColoré est un point 3D qui possède une couleur. Cette dernière peut être modifiée.

Mécanisme d’héritage (Exemple d’application)

20