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

Общий раздел => Нововведения => Тема начата: HelpMePls от 23 Апреля 2007, 13:58:48

Название: Новый термин (почти тоже что и Наследование)
Отправлено: HelpMePls от 23 Апреля 2007, 13:58:48
Всем привет!

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

НАСЛЕДОВАНИЕ:
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 никогда не будет новых аттрибутов только некоторые из его аттрибутов.

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


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


(*) И ТАК нашел такое понятие как - ИЗБИРАТЕЛЬНОЕ (SELECTIVE) НАСЛЕДОВАНИЕ. это когда у класса наследуются только определенные аттрибуты. и уже далее у такого класса наследника не может быть других потомков.
и еще пишут что в COM нет избирательного наследования.

(*)вопрос кто сталкивался с таким понятием?
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: Galogen от 23 Апреля 2007, 15:42:22
Всем привет!
И вам не болеть

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

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

Цитировать
У наследников класса С1 никогда не будет новых аттрибутов только некоторые из его аттрибутов.
получается, что это наследование только несколько специфичное.
Представим, что у нас есть сущность и на основе ее нужно сделать другую, но только не со всеми ее признаками. (предполагается что остальные лишнии). И показать между ними (классами) связь "специфичного Наследования".
Вообще-то наследование есть обощение, зачем же делать обобщение относительно класса, чьи атрибуты наследуются частично? Это уже вовсе не наследование - а какое-то антинаследование.
Подумайте что такое КЛАССИФИКАЦИЯ (она ведь может быть и множественной)

Просьба - помогите предложениями как бы эту связь обозвать.
[/quote]
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: bas от 23 Апреля 2007, 18:35:09
Это вообще-то спецефичность ЯП. Вроде бы в Си++ надо сделать Attr3 - protected (или private не помню точно) и все будет так как вам надо, связь тут не причем.
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: Galogen от 23 Апреля 2007, 19:39:55
Это вообще-то спецефичность ЯП. Вроде бы в Си++ надо сделать Attr3 - protected (или private не помню точно) и все будет так как вам надо, связь тут не причем.
Насколько я понял, не наследуется только атрибут видимости private, а protected и package наследуется.

Т.е. перефразируя вопрос HelpMePls
Пусть есть класс С1{Atta1,Atta2,Atta3} и класс С2{Atta1,Atta2,Atta3,Attb4}, который наследуется от класс C1. Поскольку он наследует все Atta1,Atta2,Atta3, то можно сказать, что это видимости типа public protected package.

Второй случай
Пусть есть класс С1{Atta1,Atta2,Atta3} и класс С2{Atta1,Atta2} который является наследником класса С1.
Очевидно сигнатура класса С1{+Atta1,+Atta2,-Atta3}.

Думаю от языка зависит область видимости атрибута по умолчанию, т.е. если она явно не задана, то какая область видимости будет по умолчанию у атрибута или операции.

Тогда
Цитировать
получается, что это наследование только несколько специфичное.
вполне нормальное каноническое наследование
Цитировать
аждому члену класса можно установить его область доступа (access control level). Область доступа члена класса определяет участки кода, из которых к этому члену будет возможно обращаться. В большинстве объектно-ориентированных языков программирования поддерживаются следующие области доступа:
private (закрытый, внутренний член класса) — обращения к члену допускаются только из кода методов класса, в котором этот член определён. Любые наследники класса уже не смогут получить доступ к этому члену;
protected (защищённый, внутренний член иерархии классов) — обращения к члену допускаются из кода методов класса, в котором этот член определён, или из любых его классов-наследников;
public (открытый член класса) — обращения к члену допускаются из любого кода.
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: HelpMePls от 24 Апреля 2007, 12:04:40
Насколько я понял, не наследуется только атрибут видимости private, а protected и package наследуется.

Т.е. перефразируя вопрос HelpMePls
Пусть есть класс С1{Atta1,Atta2,Atta3} и класс С2{Atta1,Atta2,Atta3,Attb4}, который наследуется от класс C1. Поскольку он наследует все Atta1,Atta2,Atta3, то можно сказать, что это видимости типа public protected package.

Второй случай
Пусть есть класс С1{Atta1,Atta2,Atta3} и класс С2{Atta1,Atta2} который является наследником класса С1.
Очевидно сигнатура класса С1{+Atta1,+Atta2,-Atta3}.

Думаю от языка зависит область видимости атрибута по умолчанию, т.е. если она явно не задана, то какая область видимости будет по умолчанию у атрибута или операции.

Тогдавполне нормальное каноническое наследование

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

С3{Atta1,Atta2}
С3{Atta1,Atta3}
С4{Atta2,Atta3}

я хотел показать концепцию. Решение не нужно.

в UML есть расширения языка. вот мне и нужно такое расширение ввести. чтобы решить свою задачу.
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: Galogen от 24 Апреля 2007, 12:51:51
А если от С1 такие будут наследники?

С3{Atta1,Atta2}
С3{Atta1,Atta3}
С4{Atta2,Atta3}

я хотел показать концепцию. Решение не нужно.

в UML есть расширения языка. вот мне и нужно такое расширение ввести. чтобы решить свою задачу.

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

И какие расширения Вы имеете в виду. Не догоняю я вашего вопроса.
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: bas от 24 Апреля 2007, 13:39:02
Я вот тоже не понимаю. Для чего это все?? Как это в коде будет выглядеть???? Это уже не будет наследованием как таковым, просто определение нового класса с какими-то атрибутами.

Я даже не могу представить как это будет выглядеть на диаграмме или в коде....
Т. е. на диаграмме надо будет указать в связи какие же атрибуты переходят от одного класса другому?! Не легче просто новый класс создать?
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: Galogen от 24 Апреля 2007, 14:09:20
Я даже не могу представить как это будет выглядеть на диаграмме или в коде....
Т. е. на диаграмме надо будет указать в связи какие же атрибуты переходят от одного класса другому?! Не легче просто новый класс создать?
Саша, не парься, пусть вопрошающий парится, а то навел тень на плетень
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: HelpMePls от 24 Апреля 2007, 17:31:07
Саша, не парься, пусть вопрошающий парится, а то навел тень на плетень

мне кажется что если смотреть с т.з реализации то конечно очень трудно представить как это будет в коде. мне нужно ввести новую концепцию расширяющую наследование.

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

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

вот этот новый тип наследования.
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: HelpMePls от 24 Апреля 2007, 17:32:25
Я вот тоже не понимаю. Для чего это все?? Как это в коде будет выглядеть???? Это уже не будет наследованием как таковым, просто определение нового класса с какими-то атрибутами.

Я даже не могу представить как это будет выглядеть на диаграмме или в коде....
Т. е. на диаграмме надо будет указать в связи какие же атрибуты переходят от одного класса другому?! Не легче просто новый класс создать?

вообще по селективному наследованию есть патент. но там на уровне компилятора... так что это еще не реализовано и даже не знаю будет ли....
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: nvoynov от 24 Апреля 2007, 17:53:22
Это просто нарушение принципов правильного ООП - настоятельно рекомендую почитать Мартина - после этого чтива все станет на свои места. Здесь есть небольшое описание http://nvoynov.blogspot.com/2007/02/blog-post.html
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: bas от 24 Апреля 2007, 17:55:12
вообще по селективному наследованию есть патент. но там на уровне компилятора... так что это еще не реализовано и даже не знаю будет ли....
О как!!!! Не знал.

Так что Вы от нас хотите??? Как назвать такую связь? Как изобразить? Или что??
Селективное наследование - очень даже подходит.
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: Galogen от 24 Апреля 2007, 21:13:37
Не, братцы, давайте все-таки разбираться.
Мы, конечно, не биологическое наследование тут изобретаем. Нужно все-таки исходить из реалий практики. Связь наследования она, что реализует в ООП: обобщение!!!!! и конкретизацию!!!! Наследование есть часть общей системы классификации. В природе нет такого понятия как классификация, однако есть такое понятие как наследование - генетика это изучает. Однако там все сложнее и круче. Там есть доминирующий ген однако есть и рецессивный ген. Но наше наследование в ООП - это не то наследование. Я вообще не очень улавливаю необходимость селективного наследования. Это значит я делаю офигительный метакласс в котором определяю весь набор хромосом: т.е. весь набор атрибутов и методов, которые могут быть в природе, на которые у меня хватило фантазии, а потом типа наследую от этого супер-пупер-мета-мега-квази-семи-класса свои подклассики с селективным наследованием???? Да мне такой код лучше потом не давайте - это будет какой-то секретный код, санскритская надпись на пасхальных яйцах.

Возьми молодого барашка, а? Возьми молодое вино, да? Разожги костер, вай? Сделай угли, джан? Дай девушке - испортит шашлик, ну е мое что такое, а?

А вообще если серьезно, HelpMePls, если Вам так нужно это селективное наследование, и вы никак не можете обойтись без оного, может Вы скажите что делаете, мы как все общество посмотрим да и выскажем. Я все вот думаю и никак все равно не могу понять идею селективного наследования в программировании. А главное ее большую значимость. Извините тут множественную классификацию еще не разрешили, да и множестенное наследование не во всех языках реализуется, а мы еще пытаемся селективность в наследовании ввести. Необходимсть проистекает из реалности. если это реально приведите пример - ну только не из биологии, пожалуйста. Все-таки мы пока не на том уровне обощения находимся.
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: AlexTheRaven от 02 Июня 2007, 21:29:50
<...>у меня такой вопрос как назвать такую операцию "НАСЛЕДОВАНИЯ":
1. пусть есть класс с атррибутами (Atta#) С1{Atta1,Atta2,Atta3}
(*)2. пусть есть класс с атррибутами (Atta#) С2{Atta1,Atta2} который является наследником класса С1. <...>
А это и есть наследование. Только на самом деле C1 является наследником C2, причём C2 - не абстрактный.
Можно, конечно, сказать, что Atta3 переопределён на отсутствующий... Но зачем такие извращения?
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: KGP от 24 Августа 2007, 15:06:35
Давайте разилчать отсутствие интерфейса от отсутствия реализации всех функций интерфейса.

имхо у С2 всё же будет Atta3 (getAtta3 , setAtta3 ) но возвращать они будут нечто вроде no implemented
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: alys от 01 Июня 2008, 14:26:01
при таком селективном наследовании неясной становится операция приведения потомка к  предку. поскольку потомок унаследовал только часть свойств предка, приведение потомка к предку - становится теоретически невозможным.
селективное наследование просто противоречит самому понятию наследования.
также портиворечит понятию инкапсуляции, поскольку потомок не имеет права! решать, что он может унаследовать от предка. если он вытащит у предка только часть атрибутов и функций, не в смысле их видимости/невидимости, а в смысле присуттсвия в экземпляре нового класса - то в общем случае может оказаться, что для исполнения оставшихся предковых методов, у потомка не хватает атрибутов.
короче раз предок сказал, что ему нужны такие-вот атрибуты, и такие-вот функции для реализации его как целостного класса, потомок не имеет права это оспаривать.
выбросьте из головы эти заморочки с селективным наследованием.
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: Juliya от 26 Июня 2008, 17:51:36
Всем привет!

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

НАСЛЕДОВАНИЕ:
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 никогда не будет новых аттрибутов только некоторые из его аттрибутов.

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


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



Здравствуйте, :)
Такого наследования быть не может. Срузу возникает вопрос, если это все ж таки "наследование", то как оно  согласовано с принципом Барбары Лисков, так называемым "принципом подстановочности".
  Принцип Барбары Лисков (принцип подстановочности):
система обеспечивает принцип наследования в том случае, если выполняется требование:
в любом месте, где допустимо использование объекта, принадлежащего классу – предку, должно быть точно также допустимо использование объекта, принадлежащего любому классу – наследнику.
 
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: Денис Иванов от 14 Июля 2008, 22:30:37
То, о чем говорит автор называется отрицательной изменчивостью.
Читаем Д.Коплиена (http://www.books.ru/shop/books/236692 (http://www.books.ru/shop/books/236692)) и не надо ничего придумывать.

Образец проектирования bridge один из вариантов решения проблемы.
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: Galogen от 17 Июля 2008, 12:46:06
Образец проектирования bridge один из вариантов решения проблемы.
Поскольку цели форума в том числе образовательные, Denis, не мог ли бы Вы описать шаблон, привести примеры его применения.
Можно устроить FAQ по шаблонам проектирования и их применению
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: Денис Иванов от 17 Июля 2008, 14:33:01
Пример.

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

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

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

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

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

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

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

Что делать?

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

Это и есть bridge
Название: Re: Новый термин (почти тоже что и Наследование)
Отправлено: NZavaloff от 29 Марта 2012, 08:32:29
А если от С1 такие будут наследники?