Почему множественное наследование не поддерживается в большинстве языков программирования? - PullRequest
9 голосов
/ 16 мая 2010

Почему множественное наследование не поддерживается в большинстве языков программирования?

Я действительно мог бы использовать эту функцию для разработки другого макета приложения?

Ответы [ 3 ]

10 голосов
/ 16 мая 2010

Множественное наследование полезно во многих ситуациях как разработчик, но оно значительно увеличивает сложность языка, что усложняет жизнь как разработчикам компиляторов, так и программистам.

  • Одна проблема возникает, когда два родительских класса имеют элементы данных или методы с одинаковыми именами. Трудно решить, на что ссылается подкласс.

  • Другой случай, когда два родительских класса наследуются от одного и того же базового класса, образуя «ромбический» шаблон в иерархии наследования.

  • Порядок, в котором необходимо указать инициализацию / разработку родительских классов - это может иногда приводить к изменению поведения при изменении порядка наследования - что-то может застать разработчиков врасплох.

  • Некоторые языки поддерживают ссылку на «супер», или эквивалент, который ссылается на атрибут базового класса для этого объекта. Это становится трудно поддерживать в языке с множественным наследованием.

  • Некоторые языки пытаются предоставить автоматическую объектно-реляционную модель, поэтому объекты можно сделать постоянными с помощью обычной RDMS. Это отображение сложно в лучшие времена (оно было описано как «Вьетнамская война» разработки программного обеспечения), но гораздо сложнее, если поддерживается множественное наследование.

4 голосов
/ 16 мая 2010

Одна из причин не поддерживать это - неоднозначность разрешения метода.

http://en.wikipedia.org/wiki/Diamond_problem

Однако я не уверен, что вы подразумеваете под «большинством» языков программирования. Многие из них, которые используются сегодня, поддерживают его напрямую (C ++, Python, Perl, OCaml) или имеют механизм для аналогичной функциональности (на ум приходят Ruby и Scala).

0 голосов
/ 24 июня 2015

Реальная причина, по которой множественное наследование не поддерживается во многих языках, - это просто лень разработчиков языка. Чтобы скрыть эту неловкую ошибку, приводятся всевозможные оправдания: «это усложняет жизнь для разработчика», бла-бла, но для любого, кто действительно использовал язык, который его хорошо реализует, множественное наследование становится естественным и легким примерно через 1 месяц , Ничего страшного.

Единственная проблема с ним состоит в том, что после того, как вы поняли, насколько это полезно и легко, у вас появляется склонность к аллергии на языки, которые его не поддерживают, и это может ограничить ваши карьерные перспективы.

Так что мой совет - держаться подальше от него.

...