Множественное наследование в ООП - PullRequest
1 голос
/ 27 апреля 2010

Я запутался насчет функции ООП, множественного наследования. Разрешает ли ООП множественное наследование? Является ли множественное наследование функцией ООП? Если множественное наследование является функцией, то почему языки, такие как C #, VB.NET, Java и т. Д., Не поддерживают множественное наследование? Но эти языки считаются строго поддерживаемыми языками ООП. Кто-нибудь может ответить на этот вопрос?

Ответы [ 6 ]

3 голосов
/ 17 сентября 2018

Такие языки, как Java и C #, которые в значительной степени основаны на java как объектно-ориентированные принципы, созданы для разработки приложений, поэтому разработчики этих языков решили использовать подход, при котором ООП может быть понятным и быстро Изучено разработчиками. Так, ради простоты и прояснения обязанностей каждого класса в наследовании, они избегают рассмотрения одного объекта, наследуемого от нескольких объектов. Вместо этого они рассматривают использование Интерфейсов для реализации нескольких очень различных поведений и атрибутов. С этим в учитывать принципы: Отдельная ответственность каждого объекта и прозрачное разделение ответственности каждого интерфейса и последующих унаследованных объектов должны быть полностью понятны.

3 голосов
/ 27 апреля 2010

Наследование не имеет ничего общего с ориентацией объекта. Существует множество ОО-языков, которые вообще не поддерживают наследование , и есть множество не-ОО-языков, которые поддерживают наследование. Эти две вещи полностью ортогональны.

3 голосов
/ 27 апреля 2010

Пожалуйста, посмотрите на Проблема с бриллиантами

3 голосов
/ 27 апреля 2010

В OO нет требования поддерживать множественное наследование, которое поддерживается такими языками, как C ++. C # и Java не поддерживают, и из-за этого они не менее OO.

0 голосов
/ 28 июня 2010

Во-первых, вы должны различать множественное наследование и множественные супертипы, это две совершенно разные вещи.

Множественное наследование обычно отражает фактическое наследование реализации (например, наследование классов в большинстве языков ООП) и вызывает множество проблем. Одним из них является конфликт между именами и реализациями (например, два метода с одинаковым именем и другой реализацией), а затем возникают проблемы, подобные проблеме idamond.

Несколько супертипов обычно относится к возможности проверки типов (и в некоторых случаях приведение типов) и обычно не включает наследование реализаций. Например, в Java у вас есть интерфейсы, которые просто объявляют ваши методы. Таким образом, ваш подтип поддерживает объединение методов, поддерживаемых супертипами. Это создает меньше проблем, потому что у вас нет метода с несколькими реализациями.

Множественное наследование обычно включает в себя несколько супертипов, хотя некоторые языки, такие как C ++, позволяют изменять видимость этого факта (например, кто может знать, что тип B является подтипом типа A).

Насколько мне известно, нет необходимости поддерживать язык ООП, но, по крайней мере, несколько супертипов необходимы для используемого языка ООП, где большинство шаблонов проектирования могут быть реализованы простым способом. Множественное наследование, ИМХО, на самом деле не так уж полезно, чтобы оправдать сложность и затраты. Я переключился на Java десять лет назад и не могу сказать, что слишком много пропустил.

0 голосов
/ 27 апреля 2010

Множественное наследование относится к функции НЕКОТОРЫХ объектно-ориентированных языков программирования, а не ко всем из них.

Эти другие языки, на которые вы ссылаетесь, используют интерфейсы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...