Форум Сообщества Аналитиков

×


Новый термин (почти тоже что и Наследование)(Прочитано 23167 раз)
при таком селективном наследовании неясной становится операция приведения потомка к  предку. поскольку потомок унаследовал только часть свойств предка, приведение потомка к предку - становится теоретически невозможным.
селективное наследование просто противоречит самому понятию наследования.
также портиворечит понятию инкапсуляции, поскольку потомок не имеет права! решать, что он может унаследовать от предка. если он вытащит у предка только часть атрибутов и функций, не в смысле их видимости/невидимости, а в смысле присуттсвия в экземпляре нового класса - то в общем случае может оказаться, что для исполнения оставшихся предковых методов, у потомка не хватает атрибутов.
короче раз предок сказал, что ему нужны такие-вот атрибуты, и такие-вот функции для реализации его как целостного класса, потомок не имеет права это оспаривать.
выбросьте из головы эти заморочки с селективным наследованием.



Всем привет!

ВНЕС некоторые ИЗМЕНЕНИЯ: (*)
прим. не смотрите на пример с точки зрения ООП - протектед итд

НАСЛЕДОВАНИЕ:
1. пусть есть класс с атррибутами (Atta#) С1{Atta1,Atta2,Atta3}
2. пусть есть класс с атррибутами (Atta#,Attb#) С2{Atta1,Atta2,Atta3,Attb4} который является наследником класса С2.


у меня такой вопрос как назвать такую операцию "НАСЛЕДОВАНИЯ":
1. пусть есть класс с атррибутами (Atta#) С1{Atta1,Atta2,Atta3}
(*)2. пусть есть класс с атррибутами (Atta#) С2{Atta1,Atta2} который является наследником класса С1.

У наследников класса С1 никогда не будет новых аттрибутов только некоторые из его аттрибутов.

получается, что это наследование только несколько специфичное.
Представим, что у нас есть сущность и на основе ее нужно сделать другую, но только не со всеми ее признаками. (предполагается что остальные лишнии). И показать между ними (классами) связь "специфичного Наследования".


Просьба - помогите предложениями как бы эту связь обозвать.



Здравствуйте, :)
Такого наследования быть не может. Срузу возникает вопрос, если это все ж таки "наследование", то как оно  согласовано с принципом Барбары Лисков, так называемым "принципом подстановочности".
  Принцип Барбары Лисков (принцип подстановочности):
система обеспечивает принцип наследования в том случае, если выполняется требование:
в любом месте, где допустимо использование объекта, принадлежащего классу – предку, должно быть точно также допустимо использование объекта, принадлежащего любому классу – наследнику.
 



То, о чем говорит автор называется отрицательной изменчивостью.
Читаем Д.Коплиена (http://www.books.ru/shop/books/236692) и не надо ничего придумывать.

Образец проектирования bridge один из вариантов решения проблемы.



Образец проектирования bridge один из вариантов решения проблемы.
Поскольку цели форума в том числе образовательные, Denis, не мог ли бы Вы описать шаблон, привести примеры его применения.
Можно устроить FAQ по шаблонам проектирования и их применению
« Последнее редактирование: 18 Июля 2008, 10:08:41 от Galogen »



Пример.

Предметная область - линейная алгебра.
Выводится следующая иерархия (см. рис.1)

Есть Числа (интерфейс).
Комплексное число - специализация Числа.
Действительное число - специализация Комплексного числа.

Такая иерархия разумна с точки зрения предметной области.

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

В Числе нет данных по определению (интерфейс).
В Комплексном числе два double.
В Действительном числе должен быть один double, но к нам из Комплексного числа по наследованию уже два(!) приехало.
Получаем ситуацию, описанную автором топика.

Кто виноват?
Виновата иерархия абстракций предметной области, которая НЕ совпадает с иерархией данных.

Отступление: Еще можно построить иерархии алгоритмов подобным образом и с ней тоже может быть не все в порядке.

Что делать?

Смотрим рис.2

Это и есть bridge



А если от С1 такие будут наследники?




 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19