В итоге (внутриклассовая) синтаксическая перегрузка в ОО-среде создает немало проблем, не давая видимых преимуществ. (Тем же, кто использует Java, C++ или Ada 95, можно посоветовать полностью отказаться от перегрузки, прибегая к ней лишь при создании конструкторов, то есть тогда, когда язык не оставляет другого выбора.) Стараясь умело применять объектный подход, придерживайтесь простого правила: каждый компонент имеет имя, каждое имя означает только один компонент.
Ключевые концепции
[x]. Подход к конструированию ПО, подобный конструированию из кубиков, требует возможности объединения нескольких абстракций в одну. Это достигается благодаря множественному наследованию.
[x]. В самых простых и наиболее общих случаях множественного наследования два родителя представляют независимые абстракции.
[x]. Множественное наследование часто необходимо как для моделирования систем, так и для повседневной разработки ПО, в частности, создания повторно используемых библиотек.
[x]. Конфликты имен при множественном наследовании должны устраняться переименованием.
[x]. Переименование позволяет ввести в классе контекстно-адаптированную терминологию.
[x]. Компоненты следует отделять от их имен. Один и тот же компонент в разных классах может быть известен под разными именами. Класс определяет отображение имен в компоненты.
[x]. Дублируемое наследование - мощная техника - возникает как результат множественного наследования, при котором один класс становится потомком другого несколькими способами.
[x]. При дублируемом наследовании компонент общего предка становится одним компонентом, если он наследуется под одним именем, и несколькими независимыми компонентами в противном случае.
[x]. Конкурирующие версии общего предка при динамическом связывании должна устраняться предложением select.
[x]. Механизм репликации при дублируемом наследовании не должен дублировать компоненты, включающие родовые параметры.
[x]. В ОО-среде семантическая перегрузка, поддерживаемая динамическим связыванием, более полезна, чем синтаксическая перегрузка.
Библиографические замечания
Механизм переименования, а также правила дублируемого наследования были разработаны при написании этой книги. Механизм отмены определений предложен Михаэлем Швайцером (Michael Schweitzer), механизм выбора- Джоном Поттером (John Potter).
Пример с выпадающим меню взят из книги [M 1988c].
Упражнения
У15.1 Окна как деревья
Класс
У15.2 Является ли окно строкой?
Окно содержит ассоциированный с ним текст, представленный атрибутом
У15.3 Завершение строительства
Завершите проектирование класса
У15.4 Итераторы фигур
При обсуждении
У15.5 Связанные стеки
Основываясь на классах
У15.6 Кольцевые списки и цепи
Объясните, почему
У15.7 Деревья
Согласно одной из интерпретаций, дерево - это рекурсивная структура, представляющая собой список деревьев. Замените приведенное в этой лекции описание класса
class TREE [G] inherit
LIST [TREE [G]]
feature ...end
Расширьте это описание до полнофункционального класса. Сравните это расширение с тем, что было описано в тексте данной лекции.
У15.8 Каскадные или "шагающие" (walking) меню
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии