Héritage contre composition

Ce billet date de plusieurs années, ses informations peuvent être devenues obsolètes.

En lisant l'article Inheritance versus composition, je me suis rendu compte que je n'utilisais que trop peu la composition.

L'héritage et la composition évoqués dans cet article sont deux concepts de la programmation orientée objet :

  • l'héritage implique l'idée d'une relation "est un" (is a)
  • la composition implique l'idée d'une relation "a un" (has a)

Exemple d'héritage en Python, un vélo "est un" véhicule :

class Bicycle(Vehicle):
    pass

Exemple de composition en Python, une voiture "a un" moteur :

class Car:
    def __init__(self):
        self.engine = Engine()

Évidemment les choses sont plus complexes dans la réalité que dans les exemples des conférences.

Mais je pense que la composition aurait pu éviter à quelques bases de code d'avoir une chaîne d'héritage pénible à comprendre, tout en restant orienté objet !

À ne pas confondre avec la composition de fonctions donc ;)

Avant Comment fonctionne un navigateur ? Après Le Python par défaut de macOS va nous quitter

Tag Kemar Joint