count: INTEGER is
-- Число элементов
deferred
end
index: INTEGER is
-- Положение курсора
deferred
end
item: G is
-- Элемент в позиции курсора
deferred
end
feature - Отчет о статусе
after: BOOLEAN is
-- Курсор за последним элементом?
deferred
end
before: BOOLEAN is
-- Курсор перед первым элементом?
deferred
end
feature - Сдвиг курсора
forth is
-- Передвинуть курсор на одну позицию вперед.
require
not after
deferred
ensure
index = old index + 1
end
... Другие компоненты ...
invariant
non_negative_count: count >= 0
offleft_by_at_most_one: index >= 0
offright_by_at_most_one: index <= count + 1
after_definition: after = (index = count + 1)
before_definition: before = (index = 0)
end
Здесь инвариант выражает соотношения между разными запросами. Первые два предложения утверждают, что курсор может выйти за границы множества элементов не более чем на одну позицию слева или справа.
Рис. 14.10. Позиции курсора
Два последних предложения инварианта можно также представить в виде постусловий: |
Утверждения о
Вот другой пример - наш старый друг стек. Нашей библиотеке потребуется общий класс
put (x: G) is
-- Поместить x на вершину.
require
not full
deferred
ensure
not_empty: not empty
pushed_is_top: item = x
one_more: count = old count + 1
end
Булевские функции
Только с помощью утверждений отложенные классы достигают своей полной силы. Как уже отмечалось (хотя детали появятся через две лекции), предусловия и постусловия применимы ко всем переопределениям процедуры. Это особенно важно в отложенном случае: в нем такие утверждения будут ограничивать все допустимые реализации. Таким образом, приведенная спецификация ограничивает все варианты
Благодаря использованию утверждений, можно сделать отложенные классы достаточно информативными и семантически богатыми, несмотря на отсутствие у них реализаций.
В конце этой лекции мы вновь обратимся к отложенным классам и исследуем глубже их роль в процессе ОО-анализа, проектирования и реализации.
Способы изменения объявлений
Возможность изменить объявление компонента - переопределить или дать его реализацию - обеспечивает гибкость и последовательное проведение разработки. Имеется еще два метода, усиливающих эти качества:
[x]. Возможность изменить объявление функции на атрибут.
[x]. Простой способ сослаться на первоначальную версию в теле нового определения.
Повторное объявление функции как атрибута
Повторные объявления позволяют активно применять один из центральных принципов модульности - принцип Унифицированного Доступа (Uniform Access).
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии