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

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

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

3 ответов


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

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

  • другое происходит, когда два родительских класса наследуют от одного и того же базовый класс, образующий" алмазный " шаблон в иерархии наследования.

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

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

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


одна из причин не поддерживать его неоднозначности разрешение метода.

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

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


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

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

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