Sunteți pe pagina 1din 12

Chapitre 6: Hritage

1/12

Chapitre 6 Hritage en Java

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

- peut redfinir (masquer) certaines mthodes, - peut possder de nouvelles mthodes.

La classe drive hrite des membres de la classe de base.

Vhicule Vitesse Nombre de passagers Classe de base Hritage Attributs de Vhicule

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

public A(int x){ i = x; } } // Hritage class B extends A { double z;


// Constructeur de la classe B

public B(int f, double w) {


// Appel explicite du constructeur de A, // et en 1re ligne.

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).

Voir exemple : herex2.java

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

9. Phases dinitialisation dun objet de la classe de base et de la classe drive


Le tableau suivant reprsente la cration dun objet partir des classes de base (A) et drive (B). Un objet de la classe de base A Un objet b de la classe drive B

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

initialisation explicite des champs hrits de B excution des instructions du constructeur de B

10. Redfinition et surdfinition des fonctions membres


Dans lexemple herex1.java, la fonction affiche est membre de la classe de base vhicule. Elle n'affiche que les membres privs de cette classe. On ne peut donc pas afficher par exemple le nombre de moteurs. Pour faire cela, nous allons dfinir dans la classe drive une fonction portant le mme nom, et qui aura pour rle d'afficher les donnes prives de la classe drive. On parle alors de redfinition d'une fonction de la classe de base. Cette nouvelle mthode va masquer la prsence de la mthode hrite. Voir exemple : herred.java Surdfinir1 une mthode consiste lui donner plusieurs significations. Nous choisirons la bonne signification en fonction du contexte dans lequel cette mthode sera utilise. Voir exemple : hersurd.java Nous pouvons nous servir aussi de la surdfinition et de la surcharge au mme temps. Voir exemple : herredsurd.java
1

Ou bien surcharger une mthode.

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.} }

11. Typage statique vs. typage dynamique


- type statique d'une variable: type la compilation, type dclar. - type dynamique d'une variable: type l'excution, type en mmoire.

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

13. Exemple de Balounes2


Exemple -1- : Balounes.html Lapplet est code dans : Balounes.java Exemple -2- : PetageDeBalounes.html Lapplet est code dans : PetageDeBalounes.java

Les deux applets utilisent le schma dhritage suivant :

Baloune

Baloune

Baloune.java

Baloune remplie avec une couleur

Colore

Coloree.java

Baloune colore mais qui s'affiche comme triste ou gaie

Face

Face.java

Code source par Guy Lapalme.

Mohamed N. Lokbani

v 1.3

Programmation II

Chapitre 6: Hritage

11/12

14. Classes et mthodes finales


- Une mthode finale ne peut tre redfinie dans une classe drive. - Une classe finale ne peut plus tre drive.

15. Classes abstraites


a. Intrt - Placer dans une classe abstraite toutes les fonctionnalits que nous souhaitons disposer lors de la cration des descendants. - Une classe abstraite sert comme classe de base pour une drivation. b. C'est quoi au juste? - Une classe abstraite ne permet pas l'instanciation des objets. - Une classe abstraite peut contenir des mthodes et des champs (qui peuvent tre hrits) et une ou plusieurs mthodes abstraites. - une mthode abstraite est une mthode dont la signature et le type de la valeur de retour sont fournis dans la classe et rien d'autre (pas le corps de la mthode i.e. dfinition). c. Syntaxe abstract class A { // etc.}

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

Voir exemple : herabst.java

Un compte bancaire

Compte

CompteSimple

CompteRemunere

CompteCredit

un compte simple Il n'autorise pas le dbit on redfinit donc l'opration de retrait

un compte rmunr on redfinit donc la mthode de mise jour

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

S-ar putea să vă placă și