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