Title: Hritage: les concepts
1Héritage les concepts
2Généralisation et spécialisation
- Généralisation
- Factoriser les éléments communs (attributs,
opérations...) dun ensemble de classes - Simplifier les diagrammes (regroupements
sémantiques) - est un , est une sorte de
- Spécialisation
- Utiliser les caractéristiques d'une classe déjà
identifiée et en spécifier de nouvelles. - Hiérarchie de classe
- Arborescence des héritages
3Généralisation
Constat des caractéristiques communes
4Généralisation
Nota La sémantique de retirer est différente
5Spécialisation
Un PlanEpargneLogement est un CompteEpargne
ayantdes caractéristiques propres
6Arborescence d'héritage
CompteChèque
montantDécouvAutorisé
changerDecouvert () retirer ()
7Redéfinition dune méthode
Sémantique de la méthode retirer CompteCheque
retrait autorisé suivant découvert CompteEpargne
pas de découvert autorisé CompteEpargneLogement
pas de retrait
8Héritage et sous classes
- Héritage
- Mécanisme permettant de dériver une classe à
partir d'une classe existante - Permet de classer
- Etendre structurellement et comportementalement
une classe - Permet de construire
- Réutiliser le code d'une classe existante
- Classe dérivée
- Hérite de toutes les caractéristiques de son
(ses) ancêtre(s) - Peut avoir des caractéristiques propres
- Peut redéfinir des caractéristiques héritées
9Héritage La programmation java
10Héritage dans JAVA
- Définir une classe dérivée
- extends
- par défaut extends Object
class CompteBancaire double solde //
... void deposer( double montant ) //
class CompteEpargne extends
CompteBancaire double taux // double
calculerInterets() //
class TestCompteEpargne public static void
main( String arg ) //...
CompteEpargne ce double
interet ce new CopmpteEpargne()
ce.deposer( 100.0 ) interet
ce.calculerInterets()
CompteBancaire.java
TestCompteEpargne.java
CompteEpargne.java
11Héritage Constructeur
class CompteBancaire double solde
CompteBancaire ( double soldeInitial )
solde soldeInitial //
.. class CompteEpargne extends CompteBancaire
double taux CompteEpargne
(double soldeInit, double tauxInit)
super ( soldeInit ) taux
tauxInitial //...
- Appel du constructeur de la classe mère
- En labsence de constructeur, appel du
constructeur par défaut de la classe mère - le
compilateur insère un appel à la méthode super() - Conseil Pour éviter tout problème, toujours
définir un contructeur !! - Pour invoquer un constructeur de la classe mère
- super(...) doit être la première instruction
12Redéfinition dune méthode
class CompteBancaire // void retirer (
double montant ) if (solde gt
montant) solde solde - montant
//...
class CompteEpargne extends CompteBanc // Pas
de méthode retirer // car héritage de
CompteBancaire
class CompteChèque extends CompteBancaire //
void retirer ( double montant )
if (solde decouvert gt montant) solde
solde - montant //...
class CompteEpargneLogement extends CompteBanc
void retirer ( double montant ) //
Interdit
13Règles (partielles) de visibilité en JAVA
ClasseDérivée
ClasseMère
Les qualificatifs s'appliquent aux attributs et
aux méthodes