🧬
developpement

Heritage

Mécanisme permettant à une classe de reprendre les propriétés et méthodes d'une autre classe parente.

Qu'est-ce que l'héritage ?

L'héritage est un mécanisme fondamental de la programmation orientee objet qui permet à une classe (enfant ou sous-classe) de reprendre automatiquement les attributs et méthodes d'une autre classe (parent ou superclasse). L'héritage etablit une relation "est-un" (is-a) entre les classes et permet la réutilisation et l'extension du code existant.

Héritage simple vs multiple

L'héritage simple (une seule classe parente) est supporté par la majorité des langages : Java, C#, TypeScript, Python, Ruby. L'héritage multiple (plusieurs classes parentes) est supporté par Python et C++, mais pas par Java ou C#. L'héritage multiple peut créer le "problème du diamant" (deux parents ayant une méthode de même nom). Python le résout avec le MRO (Method Résolution Order) et l'algorithme C3 linearization.

Mécanismes associes

La redefinition (override) permet à la classe enfant de fournir sa propre implémentation d'une méthode heritee. Le mot-cle super (ou base en C#) appelle l'implémentation du parent. Les classes abstraites contiennent des méthodes sans implémentation que les enfants doivent définir. Les interfaces (Java, TypeScript, C#) définissent un contrat sans implémentation, permettant l'héritage multiple de comportement.

Composition vs héritage

Le principe "composition over inheritance" recommande de privilegier la composition (un objet contient d'autres objets) plutôt que l'héritage profond. L'héritage cree un couplage fort entre parent et enfant : modifier le parent peut casser les enfants. La composition est plus flexible : on peut changer le comportement à l'exécution en remplacant un composant. Les design patterns comme Strategy, Decorator et Observer favorisent la composition.

Héritage dans les langages modernes

En Java, extends pour l'héritage de classe, implements pour les interfaces. En JavaScript/TypeScript, class extends avec le prototype chain sous le capot. En Python, héritage multiple avec super() et MRO. En Go, pas d'héritage classique, mais de la composition via l'embedding de structs. En Rust, pas d'héritage de classes, mais les traits offrent la réutilisation de comportement. La tendance moderne est de limiter l'héritage à un ou deux niveaux et de privilegier les interfaces et la composition.

Besoin d'aide technique ?

Decrivez votre projet pour des conseils personnalises par nos experts.

Recevoir des conseils

Questions fréquentes

Pourquoi dit-on de preferer la composition a l'heritage ?
L'heritage cree un couplage fort et une hierarchie rigide. La composition permet d'assembler des comportements de maniere flexible, de les changer a l'execution, et de respecter le principe de responsabilite unique. L'heritage est adapte quand la relation "est-un" est naturelle et stable.
Qu'est-ce que le probleme du diamant en heritage multiple ?
Quand une classe herite de deux classes qui ont elles-memes un parent commun, il y a ambiguite sur quelle version d'une methode utiliser. Python resout ce probleme avec le MRO (Method Resolution Order). Java l'evite en n'autorisant l'heritage multiple que via les interfaces.

Pages liées

Chaque semaine, le meilleur de la tech française

Tendances, salaires, outils et opportunités — directement dans votre boîte mail.

Gratuit. Desabonnement en un clic. Pas de spam.