Même s'il peut s'agir de mauvaises pratiques, je dirais qu'il est temps qu'elle remplisse son objectif.
Même s'il peut s'agir de mauvaises pratiques, je dirais qu'il est temps qu'elle remplisse son objectif.
Réponses:
/programming/995255/why-is-multiple-inheritance-not-allowed-in-java-or-c couvre bien cette question.
Mon opinion est la suivante: les concepteurs voulaient probablement créer un langage qui promeuve de bons principes de conception. Ok, il y a donc des moments où l'héritage multiple est parfait. Ce sont l'exception, plutôt que la règle, cependant, et peuvent être abusées très facilement. Ainsi, les concepteurs ont décidé de rendre cela impossible.
Pour les cas où ce serait bien, vous devez utiliser des interfaces. Ces travaux, quoique maladroitement; mais vous n'en aurez pas besoin pour autant.
Juste pour illustrer pourquoi, l'héritage multiple est pris en charge par C ++, mais est fortement déconseillé car vous pouvez accomplir la plupart des choses avec la composition que vous feriez avec MI, mais de manière beaucoup plus propre. Contrairement à C ++, C # n'est pas un langage OOP de type "hybride", c'est-à-dire qu'il n'a pas évolué à partir d'un langage précédent.
Si vous avez vraiment besoin d'un héritage multiple, vous pouvez implémenter plusieurs interfaces.
Walter Bright est à la fois le créateur de D, qui n'inclut pas MI, et la seule personne à avoir écrit un compilateur C ++ entier par lui-même. Selon lui, la raison pour laquelle D manque de MI est qu'il est trop difficile de créer un système de MI à la fois efficace, simple et utile. Je soupçonne que Java et C # utilisent un raisonnement similaire. Les langages comme Perl et Python n'ont pas l'efficacité comme objectif principal, ils ont donc un système simple et utile, mais difficile à mettre en œuvre efficacement. Le C ++ ne semble pas avoir pour objectif la simplicité, il a donc créé un système extrêmement compliqué que presque personne ne comprend.
Je pense que Walter a raison. S'il existe une langue qui dispose d'un système MI qui satisfait raisonnablement bien à ces trois critères, veuillez laisser un commentaire.
L'héritage multiple, si vous l'utilisez beaucoup, entraîne des situations très complexes. Trop de complexité avec peu d'avantages est la raison pour laquelle il a été exclu pour Java et C #.
Parce que les concepteurs de langage voulaient apparemment produire un meilleur C ++, pas un meilleur langage en général. (Leur succès peut être débattu.)
L'héritage multiple de style C ++ a quelques problèmes, donc les personnes dérivant du C ++ l'ont généralement omis (Java, C #, D). D'autres langues, Eiffel et Common Lisp pour n'en nommer que deux, le font différemment et ne semblent pas avoir les mêmes problèmes.