Héritage vs Composition
Héritage vs Composition
Définitions
Héritage : Une relation “est-un” où une classe dérive d’une autre, héritant de ses attributs et méthodes.
Composition : Une relation “a-un” où une classe contient une instance d’une autre classe comme attribut.
Comparaison
Héritage
Composition
Avantages et inconvénients
Héritage
Avantages : - Permet une réutilisation directe du code - Représente bien les relations hiérarchiques naturelles - Facilite le polymorphisme
Inconvénients : - Peut créer un couplage fort entre les classes - Peut devenir complexe avec l’héritage multiple - Peut violer le principe de substitution de Liskov si mal utilisé
Composition
Avantages : - Offre une plus grande flexibilité - Permet une meilleure encapsulation - Facilite les changements de comportement à l’exécution
Inconvénients : - Peut nécessiter plus de code initial - Peut être moins intuitif pour représenter certaines relations
Quand utiliser l’un ou l’autre ?
Utilisez l’héritage quand :
- Il existe une relation “est-un” claire et logique
- Vous voulez réutiliser le code dans plusieurs classes dérivées
- Le comportement de la classe de base ne change pas souvent
Exemple :
Chien
est unAnimal
,Carré
est uneForme
Utilisez la composition quand :
- Il existe une relation “a-un” ou “utilise-un”
- Vous voulez une plus grande flexibilité pour changer les comportements
- Vous voulez éviter les problèmes liés à l’héritage multiple
Exemple :
Voiture
a unMoteur
,Ordinateur
a uneCPU
Principe de conception : “Favoriser la composition sur l’héritage”
Ce principe suggère d’utiliser la composition comme première approche, car elle offre généralement plus de flexibilité et un couplage plus faible. L’héritage devrait être utilisé judicieusement, lorsqu’il représente vraiment une relation “est-un”.
Exemple combinant héritage et composition
Dans cet exemple : - Epee
hérite de Arme
(relation “est-un”) - Guerrier
hérite de Personnage
(relation “est-un”) - Personnage
utilise la composition avec Arme
(relation “a-un”)
Cette approche combine les avantages de l’héritage et de la composition, permettant une structure flexible et extensible.