Знак плюс означает "эффективный" и им отмечается эффективизация компонента:
perimeter+ -- На уровне POLYGON на рис. 14.8
Чтобы указать, что класс эффективный, можно отметить его знаком
Можно присоединять одиночный плюс к компоненту для указания того, что он стал эффективным. Например, компонент
Наконец, два знака плюс отмечают переопределение:
perimeter++ -- На уровне RECTANGLE и SQUARE на рис.14.8
Что делать с отложенными классами?
Присутствие отложенных элементов в системе вызывает вопрос: "что случится, если компонент
Правило отсутствия экземпляров отложенных классов
Тип создания в процедуре создания не может быть отложенным.
Напомним, что тип создания - это тип
Поэтому вызов конструктора create f некорректен и будет отвергнут компилятором, если типом
Отметим однако, что даже, если тип сущности |
Может показаться, что это правило ограничивает полезность отложенных классов, делая их просто синтаксической уловкой для обмана системы статических типов. Это было бы верно, если бы не полиморфизм и динамическое связывание. Нельзя создать объект типа
f: FIGURE
...
f := "Некоторое выражение эффективного типа, такого как CIRCLE или POLYGON"
...
f.rotate (some_point, some_angle)
f.display
...
Такие примеры являются комбинацией и кульминацией уникальных средств абстракции ОО-метода таких, как классы, скрытие информации, единственный выбор, наследование, полиморфизм, динамическое связывание, отложенные классы (и, как будет видно дальше, утверждения). Вы манипулируете объектами, не зная точно их типов, задавая только минимум информации, необходимой для требуемых операций. Имея надежный штамп контролера типов, удостоверяющий согласованность вызовов этих операций с их объявлениями, можно рассчитывать на большую силу - динамическое связывание, которая позволяет применять корректную версию каждой операции, не зная точно, что это за версия.
Задание семантики отложенных компонентов и классов
Хотя у отложенного компонента нет реализации, а у отложенного класса либо нет реализации, либо он реализован частично, часто требуется задать их абстрактные семантические свойства. Для этой цели можно использовать утверждения.
Как и другие классы, отложенный класс может иметь инвариант, а у отложенного компонента может быть предусловие, постусловие или оба эти утверждения.
Рассмотрим пример линейных списков, описанных независимо от конкретной реализации. Как и для многих других структур такого рода, удобно связать с каждым списком курсор, указывающий на текущий активный элемент.
Рис. 14.9. Список с курсором
Этот класс является отложенным:
indexing
description: "Линейные списки"
deferred class
LIST [G]
feature -- Access
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии