Как пример нежелательного закрепления рассмотрим компонент
first_child: like Current
Но на практике это накладывает слишком много ограничений. Класс дерева может иметь потомков, представляющих разные виды деревьев (их узлов):
Это может быть нежелательным при построении более гибких структур, например бинарного узла с унарным потомком. Для этого компонент нужно описать без закрепления:
first_child: TREE [G]
Это решение не связано с какими-то ограничениями, и для создания деревьев с узлами одного типа вы, оставив класс
first_child: like Current
что гарантирует неизменность типов всех узлов дерева.
Статический механизм
Устранить последнее неясности в понимании закрепленного объявления поможет следующее замечание: это чисто статический механизм, не предполагающий никаких изменений объектов в период выполнения. Все ограничения могут быть проверены в период компиляции.
Закрепленное объявление можно считать синтаксическим приемом, позволяющим переложить переопределения на компилятор. Кроме того, оно является важнейшим инструментом достижения компромисса между повторным использованием и контролем типов.
Наследование и скрытие информации
Последний вопрос, оставшийся пока без ответа, как наследование взаимодействует с принципом Скрытия информации.
В отношениях между классом и его клиентами скрытие информации определяет разработчик класса. Именно он определяет политику в отношении каждого компонента класса: экспортируя его всем клиентам, разрешая выборочный экспорт, или делая компонент закрытым.
Кое-что о политике
Что происходит со статусом экспорта при передаче компонента потомку? Наследование и скрытие информации - ортогональные механизмы. Наследование определяет отношение между классом и его потомками, экспорт - между классом и его клиентами. Класс
[x].
[x].
[x].
[x].
Правило гласит: по умолчанию
class B inherit
A
export {NONE} f end
-- Скрыть f (возможно, экспортируемый в классе A)
...
или
class B inherit
A
export {ANY} f end
-- Экспортировать f (возможно, скрытый в классе A)
...
или
class B inherit
A
export {X, Y, Z} f end
-- Сделать f доступным определенным классам
...
Применение
Характерным примером является создание нескольких вариантов одной абстракции.
Представим себе
Рис. 16.12. Разные облики одной абстракции
Эта схема в обсуждении методологии наследования (см. лекцию 6 курса "Основы объектно-ориентированного проектирования") носит название наследования функциональных возможностей (facility inheritance).
Понятие облика (view) является классическим в области баз данных, где необходимо дифференцировать пользователей, работающих с данными, предоставляя им разные права.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии