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