OberonCore https://forum.oberoncore.ru/ |
|
Путаница со смыслом наследования https://forum.oberoncore.ru/viewtopic.php?f=8&t=2994 |
Страница 1 из 1 |
Автор: | Илья Ермаков [ Воскресенье, 14 Ноябрь, 2010 23:24 ] |
Заголовок сообщения: | Путаница со смыслом наследования |
Собственно, сабж известен - и проблемы наследования реализации тоже. Просто к теме. Г.С. Иванова "Технология программирования", учебник для ВУЗов (МГТУ-шный, не бесполезная, впрочем, книжка). http://narod.ru/disk/27474232000/%D0%9C ... .djvu.html Путаница в голове автора: "В природе существует ещё один вид иерархии - иерархия "простое-сложное" или иерархия развития (усложнения) систем в процессе эволюции. В этой иерархии любая функционирующая система является результатом развития более простой системы. Именно данный вид иерархии реализуется механизмом наследования ООП". Про иерархию родовидовую вообще ни слова. Зато введена какая-то путанная связь между эволюцией системы и наследованием; не говоря про то, что эволюционное развитие систем не имеет явно выраженной иерархической структуры... Понятно, что причиной путаницы - "мутный" механизм наследования реализации, совершенно забивший реальный смысл родовидовой иерархии (иерархии интерфейсов, а не внутреннего устройства). Этак можно, если поверить автору, унаследовать класс "Калина" от класса "копейка". |
Автор: | Валерий Лаптев [ Понедельник, 15 Ноябрь, 2010 10:25 ] |
Заголовок сообщения: | Re: Путаница со смыслом наследования |
Мне понравилось, как Тимоти Бадд написал о формах наследования: Цитата: Тимоти Бадд приводит интересную классификацию форм наследования. Форма наследования определяет — для чего, с какой целью используется наследование. Бадд считает, что порождение дочернего класса может быть выполнено по следующим причинам: - специализация. Класс-наследник является специализированной формой родительского класса — в наследнике просто переопределяются методы. Принцип подстановки выполняется. Очевидно, что такая форма наследования в С++ реализуется простым открытым наследованием. Примером является наследование часы -> будильник; - спецификация. Дочерний класс реализует поведение, описанное в родительском классе. Ясно, что в С++ эта форма реализуется простым открытым наследованием от абстрактного класса; - конструирование. Класс-наследник использует методы базового класса, но не является его подтипом (принцип подстановки не выполняется). В С++ такую форму можно реализовать простым закрытым наследованием; - расширение. В класс-потомок добавляют новые методы, расширяя поведение родительского класса; принцип подстановки в такой форме выполняется; - обобщение. Дочерний класс обобщает поведение базового класса. Обычно такое наследование используется в тех случаях, когда мы не можем изменить поведение базового класса (например, базовый класс является библиотечным классом); - ограничение. Класс-наследник ограничивает поведение родительского класса. Очевидно, что в С++ такой вид наследования реализуется простым закрытым наследованием (пример — TUniversalDeque -> TStack ); - варьирование. Базовый класс и класс-потомок являются вариациями на одну тему, однако связь «класс-подкласс» произвольна, например, «квадрат-прямоугольник» или «прямоугольник-квадрат». Эта форма фактически не отличается от «конструирования», так как класс-наследник, очевидно, «использует методы базового класса, но не является его подтипом»; - комбинирование. Дочерний класс наследует черты нескольких классов — это множественное наследование. Про С++ - это уже мои комментарии для студентов. |
Автор: | Илья Ермаков [ Понедельник, 15 Ноябрь, 2010 21:05 ] |
Заголовок сообщения: | Re: Путаница со смыслом наследования |
Все эти вещи прекрасно делаются композицией. Кому только в голову взбрело первый раз это наследование реализации )) Совершенно противоестественный приём, не имеющий аналогов в реальном мире. |
Автор: | Валерий Лаптев [ Понедельник, 15 Ноябрь, 2010 22:48 ] |
Заголовок сообщения: | Re: Путаница со смыслом наследования |
Да, меня тоже всегда интересовал этот вопрос. Вообще-то мне представляется, что мотивы появления механизма наследования примерно теже, что и мотивы появления конструкторов в С++. Как обычно: хотели как лучше... По крайней мере, у Страуструпа получилось именно так. Композиция решала практически все вопросы еще на уровне записей и модулей, даже без классов. Не интересовался, было ли в Симуле наследование. Но поскольку принцип подстановки озвучила Лисков, значит в CLU они наследование ввели. |
Автор: | Neplul [ Вторник, 16 Ноябрь, 2010 09:08 ] |
Заголовок сообщения: | Re: Путаница со смыслом наследования |
Что-то мне кажется, что принцип подстановки вначале был вначале связан с понятиями абстрактных типов данных и конкретизации в языке CLU, а уж потом оно каким-то боком было применено к ооп и наследованию. Опираясь на Дал У.И. "Симула 67.Универсальный язык программирования" могу сказать , что понятие класса ввели только в версии 67 года, следовательно и понятие наследование введено в версии 67 года. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |