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

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

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

9
задан danben 16 May 2010 в 01:50
поделиться

2 ответа

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

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

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

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

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

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

10
ответ дан 3 November 2019 в 00:59
поделиться

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

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

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

4
ответ дан 3 November 2019 в 00:59
поделиться