OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 17:12

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Путаница со смыслом наследования
СообщениеДобавлено: Воскресенье, 14 Ноябрь, 2010 23:24 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Собственно, сабж известен - и проблемы наследования реализации тоже.

Просто к теме.

Г.С. Иванова "Технология программирования", учебник для ВУЗов (МГТУ-шный, не бесполезная, впрочем, книжка).
http://narod.ru/disk/27474232000/%D0%9C ... .djvu.html

Путаница в голове автора:

"В природе существует ещё один вид иерархии - иерархия "простое-сложное" или иерархия развития (усложнения) систем в процессе эволюции. В этой иерархии любая функционирующая система является результатом развития более простой системы. Именно данный вид иерархии реализуется механизмом наследования ООП".

Про иерархию родовидовую вообще ни слова.
Зато введена какая-то путанная связь между эволюцией системы и наследованием; не говоря про то, что эволюционное развитие систем не имеет явно выраженной иерархической структуры...

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 15 Ноябрь, 2010 10:25 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Мне понравилось, как Тимоти Бадд написал о формах наследования:
Цитата:
Тимоти Бадд приводит интересную классификацию форм наследования. Форма наследования определяет — для чего, с какой целью используется наследование. Бадд считает, что порождение дочернего класса может быть выполнено по следующим причинам:
- специализация. Класс-наследник является специализированной формой родительского класса — в наследнике просто переопределяются методы. Принцип подстановки выполняется. Очевидно, что такая форма наследования в С++ реализуется простым открытым наследованием. Примером является наследование часы -> будильник;
- спецификация. Дочерний класс реализует поведение, описанное в родительском классе. Ясно, что в С++ эта форма реализуется простым открытым наследованием от абстрактного класса;
- конструирование. Класс-наследник использует методы базового класса, но не является его подтипом (принцип подстановки не выполняется). В С++ такую форму можно реализовать простым закрытым наследованием;
- расширение. В класс-потомок добавляют новые методы, расширяя поведение родительского класса; принцип подстановки в такой форме выполняется;
- обобщение. Дочерний класс обобщает поведение базового класса. Обычно такое наследование используется в тех случаях, когда мы не можем изменить поведение базового класса (например, базовый класс является библиотечным классом);
- ограничение. Класс-наследник ограничивает поведение родительского класса. Очевидно, что в С++ такой вид наследования реализуется простым закрытым наследованием (пример — TUniversalDeque -> TStack );
- варьирование. Базовый класс и класс-потомок являются вариациями на одну тему, однако связь «класс-подкласс» произвольна, например, «квадрат-прямоугольник» или «прямоугольник-квадрат». Эта форма фактически не отличается от «конструирования», так как класс-наследник, очевидно, «использует методы базового класса, но не является его подтипом»;
- комбинирование. Дочерний класс наследует черты нескольких классов — это множественное наследование.

Про С++ - это уже мои комментарии для студентов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 15 Ноябрь, 2010 21:05 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Все эти вещи прекрасно делаются композицией. Кому только в голову взбрело первый раз это наследование реализации ))
Совершенно противоестественный приём, не имеющий аналогов в реальном мире.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 15 Ноябрь, 2010 22:48 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Да, меня тоже всегда интересовал этот вопрос.
Вообще-то мне представляется, что мотивы появления механизма наследования примерно теже, что и мотивы появления конструкторов в С++.
Как обычно: хотели как лучше... По крайней мере, у Страуструпа получилось именно так. :)
Композиция решала практически все вопросы еще на уровне записей и модулей, даже без классов.
Не интересовался, было ли в Симуле наследование. Но поскольку принцип подстановки озвучила Лисков, значит в CLU они наследование ввели.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Ноябрь, 2010 09:08 

Зарегистрирован: Суббота, 09 Август, 2008 14:22
Сообщения: 71
Откуда: Украина, Херсон
Что-то мне кажется, что принцип подстановки вначале был вначале связан с понятиями абстрактных типов данных и конкретизации в языке CLU, а уж потом оно каким-то боком было применено к ооп и наследованию. Опираясь на Дал У.И. "Симула 67.Универсальный язык программирования" могу сказать , что понятие класса ввели только в версии 67 года, следовательно и понятие наследование введено в версии 67 года.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB