30
1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

Embed Size (px)

Citation preview

Page 1: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

1

COURS DE PROGRAMMATION ORIENTEE OBJET :

Héritage

Page 2: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

2

Principes– L’héritage permet de mettre en œuvre la

notion de réutilisation.– L’héritage est une relation entre deux

classes qui permet à une classe de réutiliser les caractéristiques d’une autre classe

X

Y

Classe parent ou superclasse

Classe enfant ou sous-classe

Héritage

Page 3: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

3

Exemple : – Un compte bancaire peut soit être un

compte courant soit un compte d’épargne.

• Un compte courant permet un solde négatif mais des agios sont déduits chaque jour si le solde est négatif.

• Un compte d’épargne doit toujours avoir un solde positif mais on ajoute des intérêts calculés chaque jour.

Héritage

Page 4: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

4

CompteBancaire

public void crediter (int montant)public void debiter (int montant)public void afficherEtat ()public String getNom ()public void setNom(String nom)public String getAdresse ()public void setAdresse(String adresse)public int getNumero()public int getSolde()public void traitementQuotidien()

CompteCourant

- tauxAgios : double

CompteEpargne

- tauxInterets : double

Héritage

Page 5: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

5

Classe CompteCourant :

public class CompteCourant extends CompteBancaire{private double tauxAgios; // taux quotidien des agios

...}

Héritage

Page 6: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

6

Classe CompteEpargne:

public class CompteEpargne extends CompteBancaire{private double tauxInterets; //taux d’intérêts par jour

...}

Héritage

Page 7: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

7

Classes abstraites – Dans certains cas, la classe ancêtre est tellement

générale que certaines méthodes ne peuvent plus être implémentées dans celle-ci mais seulement dans chacune des classes dérivées, on parle de méthodes abstraites.

– On ne considère plus la classe ancêtre comme une classe pouvant être instanciée.

– Une classe possédant une ou plusieurs méthodes abstraites doit être déclarée abstraite.

– On emploie le mot clé abstract .

Héritage

Page 8: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

8

Classes abstraites – Exemple :

• La classe CompteBancaire sera déclarée abstraite car la méthode traitementQuotidien est abstraite. Le traitement à appliquer dépend du type de compte et sera décrit dans les classes dérivées.

• La classe CompteBancaire ne pourra pas être instanciée directement.

Héritage

Page 9: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

9

Classe CompteBancaire modifiée :

public abstract class CompteBancaire {…

public abstract void traitementQuotidien();

}

Héritage

Page 10: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

10

La redéfinition de méthode– Certaines méthodes de la superclasse

ne conviennent pas pour la sous-classe.On peut alors les redéfinir.

– Dans ce cas, on utilisera le mot clé super pour faire référence à la méthode de la superclasse.

Héritage

Page 11: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

11

La redéfinition de méthodeExemple : Redéfinir debiter pour la classe CompteEpargne

//méthode debiter redéfiniepublic void debiter ( int montant ) {

if ( montant <= getSolde ())super.debiter ( montant );

elseSystem.out.println ( " Débit

non autorisé ");}

Héritage

Page 12: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

12

Constructeur de la sous-classe– La première instruction dans le constructeur

de la sous-classe doit être l’appel au constructeur de la superclasse avec le mot clé super.

– Si on ne fait pas d’appel explicite au constructeur de la superclasse, c’est le constructeur par défaut de la superclasse qui est appelé à condition qu’il existe.

Héritage

Page 13: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

13

Constructeur de la sous-classeExemple :

Classe CompteCourant :

//constructeur

public CompteCourant(String nom,String adresse, double tauxAgios) {super (nom, adresse);this.tauxAgios = tauxAgios;

}

Héritage

Page 14: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

14

Constructeur de la sous-classeExemple :

Classe CompteEpargne :

//constructeur

public CompteEpargne ( String nom,String adresse, double tauxInterets ) {super ( nom, adresse );this.tauxInterets = tauxInterets;

}

Héritage

Page 15: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

15

Définition de la méthode traitementQuotidien dans chaque sous-classe :

Classe CompteCourant :

public void traitementQuotidien () {if (getSolde () < 0) {

debiter ((int)(-1.0*getSolde()*tauxAgios));}

}

Héritage

Page 16: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

16

Définition de la méthode traitementQuotidien dans chaque sous-classe :

Classe CompteEpargne:public void traitementQuotidien () {

crediter ((int)(getSolde()* tauxInterets));

}

Héritage

Page 17: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

17

Polymorphisme Possibilité d’affecter un objet d’une sous-classe

à une variable de la superclasse. Exemple : CompteBancaire c;c = new CompteEpargne(…);

Application :Une agence gère plusieurs comptes.

CompteBancaire[] agence = new CompteBancaire[100];

CompteCourant courant = new CompteCourant(…);

agence[0] = courant;

Héritage

Page 18: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

18

La classe OBJECT Toutes les classes sont dérivées de la classe

Object. Chaque méthode de la classe Object est héritée

par toutes les classes. Méthodes importantes de la classe Object :

public boolean equals ( Object o ) protected Object clone() public final Class getClass() public int hashcode() public String toString()

Héritage

Page 19: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

19

La classe OBJECT – La méthode equals– La méthode equals détermine si deux

objets sont égaux ou non.– Son implémentation dans la classe Object

vérifie que les références d’objets sont identiques.

– On aura souvent besoin de redéfinir la méthode equals : deux objets seront égaux quand ils auront le même état.

Héritage

Page 20: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

20

La classe OBJECT – La méthode equals

Redéfinir la méthode equals pour la classe CompteBancaire

Héritage

Page 21: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

21

public boolean equals(Object autre){ //tester si les objets sont identiquesif (this == autre) return true;//doit renvoyer false si le paramètre explicite vaut nullif (autre == null) return false;//si les classes ne correspondent pas , elles ne//peuvent être égalesif (getClass() != autre.getClass())

return false; //autre est un objet de type CompteBancaire non null CompteBancaire autreCompte

=(CompteBancaire)autre; //tester si les comptes ont même numéro return this.numero==

autreCompte.numero;} //fin de la méthode equals

Héritage

Page 22: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

22

La classe OBJECT – La méthode hashCode

– Un code de hachage est un entier dérivé d’un objet.

– Par défaut, le code de hachage est extrait de l’adresse mémoire de l’objet.

– Les objets égaux doivent renvoyer des codes de hachages identiques.

Héritage

Page 23: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

23

La classe OBJECT – La méthode clone

– La méthode clone renvoie une copie de l’objet.

– Si la sous-classe ne redéfinit pas cette méthode, elle effectue une copie champ par champ.

Héritage

Page 24: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

24

La classe OBJECT – La méthode toString

– Il est conseillé de redéfinir la méthode toString.

– L’appel de System.out.print(o) pour un objet o va afficher le résultat de l’appel de o.toString()

Héritage

Page 25: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

25

La classe OBJECT : toString Exemple : dans les classes CompteBancaire

et CompteCourant et CompteEpargne, on pourrait redéfinir toString et supprimer alors la méthode afficherEtat.

Méthode toString()de la classe CompteBancaire:

public String toString (){ return " Compte numéro " +

numero + " ouvert au nom de " + nom + " \n Adresse du titulaire " + adresse+ " \nSolde actuel " + solde" ;}

Héritage

Page 26: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

26

La classe OBJECT : toString Méthode toString() de la classe

CompteCourantpublic String toString(){

return " Compte courant " +super.toString();

} Méthode toString() de la classe

CompteEpargnepublic String toString(){

return " Compte d’épargne " +super.toString();

}

Héritage

Page 27: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

27

Exemple complet

Page 28: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

28

Page 29: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

29

Page 30: 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Héritage

30