11
votes

Pourquoi le héritage multiple n'est-il pas pris en charge dans la plupart des langues de programmation?

Pourquoi multiples héritage n'est-il pas pris en charge dans la plupart des langues de programmation?

Je pourrais vraiment utiliser cette fonctionnalité pour développer différentes dispositions d'application?


7 commentaires

Quelques raisons: Stackoverflow.com/questions/191691/... < / a>, Stackoverflow.com/Questtions/225929/...


De nombreuses langues prennent la charge grâce à la mise en œuvre de plusieurs interfaces, de même que PHP. Pourriez-vous expliquer ce que vous essayez de faire?


Je combine diverses cours et construit une classe majeure à travers laquelle j'aurai accès à toutes les méthodes de toutes les sous-classes. Ma bibliothèque de code est très grande, alors j'essayais de le séparer.


Hehe - Je suppose que la réponse est évidente alors, la raison pour laquelle la plupart des langues ne le soutiennent pas est que les programmeurs choisissent de faire des choses comme ça ^^^. Rechercher le principe de responsabilité unique. Ma suggestion vous permettrait de supprimer tout votre héritage en tant que pratique et utilisez simplement des interfaces. Après cela pendant un certain temps, les quelques cas où vous devriez utiliser réellement l'héritage devraient devenir évidents. N'oubliez pas non plus que chaque classe devrait être minuscule et faire une chose très simple.


@Bill K, j'ai parcouru un long chemin depuis que j'ai posé cette question, maintenant je suis sûr de ce que je devrais faire. Merci pour vos conseils.


@Starx C'est une excellente question mais - content que ce soit ici. De nombreux programmeurs (tous?) Semblent abuser de l'héritage lorsqu'ils le découvrent d'abord. Vous voudrez peut-être modifier votre question pour inclure ce que vous avez appris.


Stackoverflow.com/Questtions/225929/...


3 Réponses :


4
votes

Une des raisons de ne pas supporter c'est l'ambiguïté de la résolution de la méthode.

http://fr.wikipedia.org/wiki/diamond_problem

Cependant, je ne suis pas sûr de ce que vous entendez par "la plupart" Langues de programmation. Beaucoup qui sont utilisés aujourd'hui le soutiennent directement (C ++, Python, Perl, OCAML) ou ont un mécanisme de fonctionnalité similaire (Ruby et Scala viennent à l'esprit).


0 commentaires

12
votes

L'héritage multiple est utile dans de nombreuses situations en tant que développeur, mais augmente considérablement la complexité de la langue, ce qui rend la vie plus difficile pour les développeurs de compilateur et les programmeurs.

  • Un problème se produit lorsque deux classes parent ont des membres de données ou des méthodes du même nom. Il est difficile de résoudre ce qui est référencé par la sous-classe.

  • Autre se produit lorsque deux classes parent héritent de la même classe de base, formant un motif "diamant" dans la hiérarchie de l'héritage.

  • L'ordre que l'initialisation / élaboration des classes des parents doit être spécifié - cela peut parfois conduire à un comportement changer lorsque l'ordre des changements d'héritage - quelque chose peut attraper des développeurs par surprise.

  • Certaines langues prennent en charge une référence à «Super» ou équivalent, qui fait référence à un attribut de la classe de base pour cet objet. Qui devient difficile à soutenir dans une langue avec de multiples héritages.

  • Certaines langues tentent de fournir un modèle automatique d'objet-relationnel, les objets peuvent donc être rendus persistants avec une TDR régulière. Cette cartographie est difficile au mieux de fois (il a été décrit comme la "guerre du Vietnam" du développement logiciel), mais il est beaucoup plus difficile si l'héritage multiple est pris en charge.


0 commentaires

-5
votes

La vraie raison pour laquelle le héritage multiple n'est pas pris en charge sur de nombreux langatuges, n'est que la paresse des développeurs de langues. Pour couvrir cette défaillance embarrassante, toutes sortes d'excuses sont fabriquées: "Cela rend la vie difficile pour le développeur" BLA BLA, mais pour toute personne qui a effectivement utilisé une langue qui l'enfreint bien, de multiples héritages devient naturel et facile après environ 1 mois . Pas de gros problème.

Le seul problème avec c'est après avoir réalisé à quel point il est utile et facile, vous avez tendance à devenir allergique aux langues qui ne l'appuient pas et cela peut limiter vos perspectives de carrière.

Mon conseil serait donc de rester bien loin de celui-ci.


1 commentaires

Juste hors de curiosité: quelle est votre langue préférée et dans quelle langue est la meilleure héritage résolu mieux?