Наследование (программирование)
- 1 year ago
- 0
- 0
Эта статья тематически связана с вики-проектом «Информационные технологии» , цель которого — создание и улучшение статей по темам, связанным с информационными технологиями . Вы можете , а также присоединиться к проекту , принять участие в его обсуждении и поработать над требуемыми статьями .
Статью ещё никто не оценил по шкале оценок проекта |
"То означает" -- что означает? Наследование означает? Противопоставление означает?
Кроме того, после слов "а именно" следует поставить запятую. -- 16:58, 18 июля 2011 (UTC)
Pancar , видимо там пропущено "это": "то это означает". Другое дело, что эта фраза сама по себе некорректна, ибо применение интерфейсов не способно ни решить большую часть проблем, ни свести множественное наследование к одиночному (простому). Противопоставлением можно считать агрегацию, но и оно не решает возникающих проблем, а всего лишь маскирует их, так что эти проблемы перестают восприниматься как проблемы, а начинают казаться естественными следствиями.
Вообще, проблем множественного наследования в том виде, как они повсеместно воспринимаются, не существуют. Существуют проблемы реализации этой парадигмы в том или ином языке, и также существует задача (а не проблема) дизайна системы, которая сводится к множественному наследованию. Что касается проблем реализации, то это сугубо техническая сложность, и при программировании такой иерархии безусловно приходится идти на поводу технических ограничений и/или особенностей языка, но это не проблема множественного наследования как таковая. Что касается задачи дизайна, то она слабо соотносится с программированием, это задача дизайнера системы, автора её архитектуры. Задача же программиста - воплотить этот дизайн, и от его классности качество результата в общем-то не сильно и зависит.
Наследование ли, агрегация ли, способы наследования или агрегации - выбор того или иного пути имеет большое значение для отражения истинных взаимоотношений между объектами. "Существует мнение, что множественное наследование неверная концепция порождённая неверным анализом и проектированием...". (Кстати, тоже отсутствует множество знаков препинания.) Существует мнение, в частности моё, что нет никакой концептуальной разницы между множественным и простым наследованиями. Совершенно неважно, сколько родителей у класса. Если он является каждым из них, т.е. может выступать в качестве любого из них там, где требуются именно они, то он должен быть порождён от них явно. Агрегация тут совершенно не к месту, ибо не отражает истинной природы класса. Агрегация какого-либо базового класса может быть к месту, если он не может подменить собой этот базовый класс в точке, где тот нужен. В этом случае явно показывается, что производный класс не является этим базовым, но использует его в своей реализации. (Агрегированный класс при этом может быть и публичным, в общем-то, хотя это и редкость, ибо, по сути являясь аттрибутом, обычно скрывается от публичного доступа.)
Иметь множественное наследование интерейсов и не иметь множественного наследования реализаций - это, мягко говоря, нелогично. Во-первых, якобы "решение" проблемы множественного наследования перепроектированием её в агрегацию просто-напросто врёт, выдавая нагора не те взаимоотношения между классами, каковые требуются дизайном системы. Во-вторых, если агрегация якобы успешно справляется с подменой множественного наследования, она так же успешно должна справляться и с простым наследованием. Возникает вопрос, зачем тогда вообще нужно наследование, включая простое. В-третьих, проблема ромба, если уж рассматривать её как проблему, при наследовании интерфейсов стоит так же остро, проблемы со случайно совпавшими именами никуда не деваются и также должны решаться, задача разделения/совмещения аттрибутов также дожна решаться на уровне дизайна архитектуры и реализовываться явно по утверждённому дизайну. Я в принципе не вижу никаких объективных причин, кроме маркетинговых, политических и других, не имеющих отношения к IT, по которым отсутствие множественного наследования реализаций при наличии множественного наследования интерфейсов могло бы быть оправданным. Думаю, эти три абзаца имеет смысл добавить в статью, естественно подредактировав.
Для подраздела "Критика".
Посему предлагаю вообще удалить ссылку на C++ из фразы перед списком. Нет причин там вообще что-то указывать, ибо проблемы эти довольно специфичны для каждого конкретного языка. -- 05:41, 29 октября 2011 (UTC)
Ерунда в статье написана. Class Helpers никакого отношения не имеют к множественному наследованию, т.к. класс, который они "расширяют" по-прежнему наследует от единственного класса-родителя.
Ну и кроме технического замечания - стилистическое:
Языки обладают различными способами разрешения таких проблем вложенного наследования, а именно:...'
...Delphi с версии 2007 позволяет частично реализовать множественное наследование с помощью помощников классов (Class Helpers).
пункт про делфи никаких способов решения (несуществующей) проблемы не указывает.
Итог - упоминание о Delphi из статьи нужно убрать, либо оставить, как язык в котором множенственное наследование отсутствует. 107.15.235.99 06:49, 28 ноября 2014 (UTC)