2010-05-16 1 views
7

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

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

+0

Некоторые причины: http://stackoverflow.com/questions/191691/should-c-include-multiple-inheritance, http://stackoverflow.com/questions/406081/why-should-i-avoid-multiple- inheritance-in-c, http://stackoverflow.com/questions/225929/what-is-the-exact-problem-with-multiple-inheritance – kennytm

+0

Многие языки поддерживают его посредством реализации нескольких интерфейсов, как и PHP. Не могли бы вы объяснить, что именно вы пытаетесь сделать? –

+0

Я комбинирую различные классы и строю один основной класс, через который у меня будет доступ ко всем методам во всех подклассах. Моя библиотека кода очень большая, поэтому я пытался ее разделить. – Starx

ответ

9

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

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

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

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

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

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

4

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

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

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

-4

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

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

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

+0

просто из любопытства: какой у вас предпочитаемый язык и на каком языке является множественным Наследование лучше всего решалось? – sodik