Héritage multiple

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, d’autres langages comme Ada, C#, Fortran, Java, Objective-C, Ruby, Swift ou Visual Basic ont préféré ne pas le proposer directement.

Utilité

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

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 concurrentes[c'est un problème?].

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

Solutions

Priorisation

Eiffel et Python proposent de prioriser les méthodes, indiquant lors de la déclaration d'héritage quelle méthode prendre dans les situations de polymorphisme en cas de conflit.

Méthodes virtuelles

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

Une interface est une classe complètement abstraite, c'est-à-dire qu'elle propose 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

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

Traits

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

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

Voir aussi

  • Portail de la programmation informatique
Cet article est issu de Wikipedia. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.