Héritage multiple

Un article de Wikipédia, l'encyclopédie libre.
Sauter à la navigation Sauter à la recherche

En informatique, l’héritage multiple est un mécanisme de programmation orientée objet dans lequel une classe peut hériter de comportements et de fonctionnalités de plus d'une super-classe. Il s'oppose à l'héritage simple, dans lequel une classe ne peut hériter que d'une seule super-classe.

Il est supporté par certains langages de programmation, par exemple C++, Eiffel ou Python. Pouvant poser des problèmes, les développeurs de nombreux autres langages comme Ada, C#, Fortran, Java, Objective-C, Ruby, Swift ou Visual Basic ont préféré ne pas le proposer directement.

Utilité[modifier | modifier le code]

L'héritage multiple sert à combiner les comportements de plusieurs classes.

Selon B. Stroustrup[1], l'inventeur du langage C++, ce mécanisme est facultatif parce que les problèmes qu'il résout peuvent être résolus par d'autres moyens.

Problèmes[modifier | modifier le code]

L'héritage multiple génère parfois des erreurs de compilation.

Le principal problème rencontré est la présence de différentes implémentations par les super-classes d'une certaine classe pour une même déclaration. Ce problème est aussi connu sous le nom du problème du diamant.

Un autre problème est la compilation de classes à héritage multiple. En effet, lorsqu'une méthode polymorphique est appelée, il faut déduire la bonne implémentation à exécuter. Si la méthode est le résultat d'un héritage simple, elle n'a alors qu'une seule implémentation possible, et il ne sera donc pas difficile retrouver l'implémentation. Si la méthode est le résultat d'un héritage multiple, elle a alors plusieurs implémentations possibles. Il faut donc choisir l'une des implémentations concurentes[c'est un problème?].

La compilation d'une classe à héritage multiple n'est par contre pas nécéssairement moins efficace que la compilation d'une classe à héritage simple[réf. nécessaire].

Solutions[modifier | modifier le code]

Méthodes Virtuelles[modifier | modifier le code]

Une méthode virtuelle, ou encore « méthode polymorphique » est une méthode destinée à pouvoir être redéfinie dans les sous-classes de la classe de celle-ci.

On en retrouve dans plusieurs langages orientés objet.

Interfaces[modifier | modifier le code]

Une interface est une classe complètement abstraite, c'est-à-dire qu'elle impose la déclaration de fonctionnalités tout en empêchant leur définition.

On en retrouve notamment en Java, en Delphi, en C# et en Visual Basic. Dans ces langages, une classe ne peut hériter que d'une seule super-classe et peut implémenter plusieurs super-interfaces.

Mixins[modifier | modifier le code]

Un mixin est exclusivement une super-classe. En d'autres mots, un mixin est une classe servant exclusivement à être hérité.

Traits[modifier | modifier le code]

Un trait est un mixin qui rend impossible les collisions causés par l'héritage multiple.

On en retrouve notamment en Scala et en PHP.

Notes et références[modifier | modifier le code]

  1. voir "Do we really need class inheritance?" dans http://www.stroustrup.com/bs_faq2.html

Voir aussi[modifier | modifier le code]