🧬
developpement

Heritage

Mecanisme permettant a une classe de reprendre les proprietes et methodes d'une autre classe parente.

Qu'est-ce que l'heritage ?

L'heritage est un mecanisme fondamental de la programmation orientee objet qui permet a une classe (enfant ou sous-classe) de reprendre automatiquement les attributs et methodes d'une autre classe (parent ou superclasse). L'heritage etablit une relation "est-un" (is-a) entre les classes et permet la reutilisation et l'extension du code existant.

Heritage simple vs multiple

L'heritage simple (une seule classe parente) est supporte par la majorite des langages : Java, C#, TypeScript, Python, Ruby. L'heritage multiple (plusieurs classes parentes) est supporte par Python et C++, mais pas par Java ou C#. L'heritage multiple peut creer le "probleme du diamant" (deux parents ayant une methode de meme nom). Python le resout avec le MRO (Method Resolution Order) et l'algorithme C3 linearization.

Mecanismes associes

La redefinition (override) permet a la classe enfant de fournir sa propre implementation d'une methode heritee. Le mot-cle super (ou base en C#) appelle l'implementation du parent. Les classes abstraites contiennent des methodes sans implementation que les enfants doivent definir. Les interfaces (Java, TypeScript, C#) definissent un contrat sans implementation, permettant l'heritage multiple de comportement.

Composition vs heritage

Le principe "composition over inheritance" recommande de privilegier la composition (un objet contient d'autres objets) plutot que l'heritage profond. L'heritage 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 a l'execution en remplacant un composant. Les design patterns comme Strategy, Decorator et Observer favorisent la composition.

Heritage dans les langages modernes

En Java, extends pour l'heritage de classe, implements pour les interfaces. En JavaScript/TypeScript, class extends avec le prototype chain sous le capot. En Python, heritage multiple avec super() et MRO. En Go, pas d'heritage classique, mais de la composition via l'embedding de structs. En Rust, pas d'heritage de classes, mais les traits offrent la reutilisation de comportement. La tendance moderne est de limiter l'heritage a 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 frequentes

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 liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.