Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Чистое наследование против расширения

Читайте также:
  1. III. 1. ПРОТИВОПОКАЗАНИЯ К ПРИМЕНЕНИЮ ВАКЦИН
  2. III. 4. 3. СОБЛЮДЕНИЕ ПРОТИВОПОКАЗАНИЙ НА ОСНОВАНИИ ИССЛЕДОВАНИЯ, а также ДОБРОВОЛЬНОСТИ ПРОВЕДЕНИЯ ПРИВИВОК.
  3. Internet против intranet
  4. Nbsp;   Противогаз промышленный фильтрующий модульный ППФМ-92
  5. Quot;Спиртовая энергетика" - за и против
  6. VII. Профилактические и противоэпидемические мероприятия при гепатите В
  7. XXI. Противоречивые жесты
  8. А если хочешь узнать что у тебя за команда, достаточно сыграть с сильным противником. Ты сразу удивишь все недостатки и недоработки, узнаешь, кто из игроков что стоит.
  9. А орфического. Как религия орфизм противостоял олимпийской религии и мистериям,
  10. А) Взаимно противоположные тенденции в психической жизни и диалектика их движения

Во время изучения наследования, всегда преподается наиболее понятный, чистый путь для создания диаграммы наследования, т.н. "чистое" наследование. При этом существуют только методы в интерфейсе базового класса, которые переопределяются в дочерних классах, как и показано на диаграмме:

Это так называемая чистая "is-a" связь, поскольку интерфейс класса определяет, что же это есть на самом деле. Наследование гарантирует, что любой дочерний класс будет иметь тот же интерфейс (т.е. не меньше его) как и у базового класса и ничего более. Если Вы последуете представленной диаграмме, то можете увидеть, что дочерние классы так же имеют интерфейс не больший, чем у базового.

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

Так и получается, базовый класс может принимать любые сообщения, которые Вы можете посылать дочернему, поскольку они оба имеют тот же самый интерфейс. Все, что вам нужно сделать это привести к базовому типу от дочернего класса и больше не смотреть, с каким именно типом объекта Вы имеете дело. Все обрабатывается средствами полиморфизма.

Когда Вы видите такой путь, то это означает, что используются чистые связи "is-a", при этом такой подход является единственным и любой другой дизайн сигнализирует о запутанном обдумывании и по определению кривому восприятию кода. Вот и попались Вы в ловушку. Как только Вы начали думать в этом направлении, развернитесь и откройте для себя расширение интерфейса (которое к несчастью подстрекается ключевым словом extends) являющегося лучшим решением частной проблемы. Такой подход называется "is-like-a" (это похоже на то) связью, поскольку дочерний класс похож на базовый класс, из-за того, что они имеют один и тот же фундаментальный интерфейс, но они имеют различные особенности, которые требуют дополнительных методов для своей реализации:

У такого удобного и разумного подхода (в зависимости от ситуации) имеется и небольшой недостаток. Расширенная часть интерфейса дочернего класса не доступна из базового класса, так что при приведении к базовому типу Вы не можете получить доступ к этим новым методам:

Если же Вы не приводите к базовому классу, об этом не стоит беспокоится, но зачастую вам необходимо получить точный тип объекта, так что Вы в последствии можете расширить методы этого типа. Следующая секция показывает, как это можно провернуть.




Дата добавления: 2015-09-11; просмотров: 20 | Поможем написать вашу работу | Нарушение авторских прав

Данные final | Предостережение о Final | Инициализация с наследованием | Упражнения | Забывание типа объекта | Выработка правильного поведения | Расширяемость | Абстрактные методы и классы | Порядок вызова конструкторов | Поведение полиморфных методов внутри конструкторов |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав