Heritage
Heritage
Heritage
1/12
Mohamed N. Lokbani
v 1.3
Programmation II
Chapitre 6: Hritage
2/12
1. Gnralits
L'hritage est le troisime des paradigmes de la programmation oriente objet (le 1er tant l'encapsulation, le 2e la structure de classe). L'emploi de l'hritage conduit un style de programmation par raffinements successifs et permet une programmation incrmentielle effective. L'hritage peut tre simple ou multiple. Il reprsente la relation: EST-UN Exemple: Un chat est un animal Une moto est un vhicule Un cercle est une forme Alors que l'objet membre reprsente la relation: A-UN Une voiture a un moteur
L'hritage est mis en uvre par la construction de classes drives. Le graphe de l'hritage est comme suit:
Animal
Vhicule
Chat
Chien
Oiseau
Avion
Voiture
Moto
De course
Dcapotable
Mohamed N. Lokbani
v 1.3
Programmation II
Chapitre 6: Hritage
3/12
2. Hirarchisation
- la classe dont on drive est dite CLASSE DE BASE : Animal est la classe de base (classe suprieure), - les classes obtenues par drivation sont dites CLASSES DRIVES : Chat, Chien et Oiseau sont des classes drives (sous-classes).
3. Intrt
- vision descendante => la possibilit de reprendre intgralement tout ce qui a dj t fait et de pouvoir l'enrichir. - vision ascendante => la possibilit de regrouper en un seul endroit ce qui est commun plusieurs.
4. Utilisation
- vers le haut (en analyse O.O.) => on regroupe dans une classe ce qui est commun plusieurs classes. Dans la classe Vhicule, on regroupe les caractristiques communes aux Camions et aux Automobiles. - vers le bas (lors de la rutilisabilit) => la classe de base tant dfinie, on peut la reprendre intgralement pour construire la classe drive. La classe Vhicule tant dfinie, on peut la reprendre intgralement, pour construire la classe Bicyclette.
5. Classe drive
Une classe drive modlise un cas particulier de la classe de base, et est enrichie d'informations supplmentaires. La classe drive possde les proprits suivantes: - contient les donnes membres de la classe de base, - peut en possder de nouvelles, - possde ( priori) les mthodes de sa classe de base,
Mohamed N. Lokbani
v 1.3
Programmation II
Chapitre 6: Hritage
4/12
Avion Vitesse Nombre de passagers Nombre de moteurs Attributs hrits Attribut propre un avion
Classe drive
6. Syntaxe de l'hritage
Protection class classe_drive extends classe_de_base {/* etc. */} Protection: droits d'accs attribus au niveau de la classe. public ou bien nant (i.e. rien). Voir exemple : herex1.java
Mohamed N. Lokbani
v 1.3
Programmation II
Chapitre 6: Hritage
5/12
7. Constructeur
- La classe drive doit prendre en charge la construction de la classe de base. Pour construire un Avion, il faut construire d'abord un Vhicule; Le constructeur de la classe de base (Vhicule) est donc appel avant le constructeur de la classe drive (Avion). Si un constructeur de la classe drive appelle explicitement un constructeur de la classe de base, cet appel doit tre obligatoirement la premire instruction de constructeur. Il doit utiliser pour cela, le mot cl super. class A { int i;
// Constructeur de la classe A
super(f); z = w; } }
- Lors de la construction de la classe drive, nous devons tenir compte de la prsence du constructeur dans la classe de base et/ou dans la classe drive.
Mohamed N. Lokbani
v 1.3
Programmation II
Chapitre 6: Hritage
6/12
-1- La classe de base et la classe drive ont au moins un constructeur public, cest le cas gnral. De ce fait, le constructeur de la classe drive doit appeler le constructeur de la classe de base disponible. -2- La classe de base na aucun constructeur. La classe drive peut ne pas appeler explicitement le constructeur de la classe de base. Si elle le fait, elle ne peut appeler que le constructeur par dfaut, vu que cest le seul qui est disponible dans ce cas dans la classe de base. -3- La classe drive ne possde aucun constructeur. Dans ce cas, la classe de base doit avoir un constructeur public sans argument (par dfaut ou un explicite).
8. Droits d'accs
Les droits d'accs protgent les donnes et les mthodes, et ralisent aussi l'encapsulation. Les droits d'accs sont accords aux fonctions membres, ou aux fonctions globales. L'unit de protection est la classe: tous les objets de la classe bnficient de la mme protection. un membre public est accessible toutes les classes, un membre rien est accessible toutes les classes du mme paquetage, un membre private n'est accessible qu'aux fonctions membre de la classe.
Si les membres de la classe de base sont : public ou rien : les membres de la classe drive auront accs ces membres (champs et mthodes), private : les membres de la classe drive n'auront pas accs aux membres privs de la classe de base.
En plus des 3 niveaux de protection (public, rien et private), il existe un 4e niveau de protection : protected. Un membre de la classe de base dclar protected est accessible ses classes drives ainsi quaux classes du mme paquetage.
Mohamed N. Lokbani
v 1.3
Programmation II
Chapitre 6: Hritage
7/12
allocation mmoire pour un objet du allocation mmoire pour un objet du type B (donc type A A+B) initialisation par dfaut des champs initialisation explicite des champs excution des constructeur de A instructions initialisation par dfaut des champs (A+B) initialisation explicite des champs hrits de A du excution des instructions du constructeur de A
Mohamed N. Lokbani
v 1.3
Programmation II
Chapitre 6: Hritage
8/12
En rsum : Surdfinition Consiste cumuler plusieurs mthodes ayant le mme nom. mme nom, mais signature diffrente et peu importe le type de retour. Redfinition Consiste substituer une mthode par une autre. mme nom, mme signature, mme type de retour.
Contraintes sur la redfinition a- signature identique : class A { public void unefonction(int x) { //etc.} } class B extends A { public void unefonction(int z) { //etc.} }
b- droits daccs : la redfinition ne doit pas diminuer les droits daccs une mthode.
class A { private void unefonction(int x) { //etc.} } class B extends A { public void unefonction(int z) { //etc.} }
Mohamed N. Lokbani
v 1.3
Programmation II
Chapitre 6: Hritage
9/12
12. Compatibilit entre objets d'une classe de base et objets d'une classe drive
Un objet d'une classe drive peut toujours tre utilis au lieu d'un objet de sa classe de base. Par exemple, un avion est un vhicule. Mais l'inverse n'est pas vrai, un vhicule n'est pas ncessairement un avion.
Soit l'exemple suivant: vehicule v = new vehicule(300.,4); avion a = new avion(3,800.,350); 1er cas: v = a Conversion implicite de tout avion EST-UN vhicule. Le compilateur fait une copie en ignorant les membres excdentaires (nbre_moteurs). Supposez que tous les membres des classes base et drive ont t dclars public, nous aurons ce qui suit: v.vitesse = 500.6; // => ok. // Erreur car vhicule n'a pas d'information sur le nombre de moteurs. v.nbre_moteurs = 3; 2e cas: a = v; // erreur Un vhicule n'est pas forcment un avion. On ne peut pas deviner quelles seront les valeurs manquantes (dans cet exemple: nbre_moteurs). Un vhicule n'a pas toutes les donnes d'un avion. Pour que a marche, il faut "caster" (forcer le changement de type) // Ok la compilation mais pas lexcution a = (avion) v; Voir exemple : herconv.java
Mohamed N. Lokbani
v 1.3
Programmation II
Chapitre 6: Hritage
10/12
Baloune
Baloune
Baloune.java
Colore
Coloree.java
Face
Face.java
Mohamed N. Lokbani
v 1.3
Programmation II
Chapitre 6: Hritage
11/12
d. Particularits - Une classe ayant une mthode abstraite est par dfaut abstraite. Donc pas besoin de "abstract" ce stade. - Les classes abstraites doivent tre dclares "public" sinon pas d'hritage! - Le nom d'argument muet doit figurer mme s'il est sans intrt! - Une classe drive d'une classe abstraite n'est pas oblige de redfinir toutes les mthodes abstraites. Elle peut mme n'en dfinir aucune. Si c'est le cas, elle reste abstraite. - Une classe drive d'une classe non abstraite peut tre dclare abstraite.
Mohamed N. Lokbani
v 1.3
Programmation II
Chapitre 6: Hritage
12/12
Un compte bancaire
Compte
CompteSimple
CompteRemunere
CompteCredit
un compte crdit le comportement de ce compte est ici celui de la classe mre, on ne le modifie pas.
Nous avons utilis la mthode abstraite abstract public void maj() pour la mise jour du compte.
15. Interfaces
Un complment dinformations sur le lien entre interface, classe abstraite et hritage. - Linterface nest quune classe abstraite particulire. - Linterface est une notion indpendante de l'hritage et donc de la classe drive. Une classe drive peut implmenter une ou plusieurs interfaces. - Une interface peut drive d'une autre interface en utilisant extends, rserv pour l'hritage. En ralit, l'opration a simplement permis de concatner les dclarations. Les droits d'accs ne sont pas pris en compte ce qui n'est pas le cas lors des hritages des classes.
Mohamed N. Lokbani
v 1.3
Programmation II