вариантом
class TREE [G] inherit
LIST [TREE [G]]
feature ...end
Расширьте это описание до полнофункционального класса. Сравните это расширение с тем, что было описано в тексте данной лекции.
У15.8 Каскадные или 'шагающие' (walking) меню
Оконные системы вводят понятие меню, реализуемое классом
Среди меню нередко встречаются каскадные, или шагающие меню (walking menu), где выбор элемента приводит к появлению подменю (submenu). На рисунке приведено шагающее меню среды Open Windows, созданной корпорацией Sun:
Рис. 15.25. Выпадающее меню
Предложите описание класса
У15.9 Плоский precursor (предшественник)
Что должна показывать плоская форма класса при встрече с инструкцией, использующей
У15.10 Дублируемое наследование и репликация
Напишите класс
Лекция 16. Техника наследования
Наследование - ключевая составляющая ОО-подхода к повторному использованию и расширяемости. В этой лекции нам предстоит исследовать новые возможности, разнородные, но демонстрирующие замечательные следствия красоты базисных идей.
Наследование и утверждения
Следствия красоты базисных идей:
[x]. Связь наследования с утверждениями и Проектированием по Контракту.
[x]. Глобальная структура наследования, где все классы согласованы.
[x]. Замороженные компоненты, для которых не применим принцип Открыт- Закрыт.
[x]. Ограниченная универсальность: как задавать требования на родовые параметры.
[x]. Попытка присваивания: как безопасно приводить к типу.
[x]. Как и когда изменять свойства типа при повторных объявлениях.
[x]. Закрепленные объявления, помогающие избежать лавины переобъявлений.
[x]. Непростые отношения между наследованием и скрытием информации.
Вопросам наследования будут посвящены еще две лекции: обзор проблем типизации представлен в лекции 17, а подробное обсуждение методологии наследования - в лекции 6 курса 'Основы объектно-ориентированного проектирования'.
Большинство разделов этой лекции строится по единому принципу: экзаменуются следствия идей предыдущих двух лекций, обнаруживаются проблемы, они подробно анализируются, предлагается обоснованное решение. Ключевым является шаг анализа - как только проблема становится ясной, зачастую решение ее находится сразу же.
Обладая изрядной мощью, наследование может быть и опасным. Не будь механизма утверждений, создатели классов могли бы весьма 'вероломно' пользоваться повторными объявлениями и динамическим связыванием для изменения семантики операций без возможности контроля со стороны клиента. Утверждения способны на большее: они дают нам боле глубокое понимание природы наследования. Не будет преувеличением сказать, что лишь понимание принципов Проектирования по Контракту позволяет в полной мере постичь сущность концепции наследования.
Вкратце мы уже очертили основные правила, управляющие взаимосвязью наследования и утверждений: все утверждения (предусловие и постусловия подпрограмм, инварианты классов), заданные в классах-родителях, остаются в силе и для их потомков. В этом разделе мы уточним эти правила и используем полученные результаты, чтобы дать новый взгляд на наследование как на субподряды (subcontracts).
Инварианты
С правилом об инвариантах класса мы встречались и прежде:
Правило родительских инвариантов
Инварианты всех родителей применимы и к самому классу.
