
- •1.Введение
- •1.1.Декомпозиция и абстракция
- •1.2.Абстракция
- •1.2.1.Абстракция через параметризацию
- •1.2.2.Абстракция через спецификацию
- •1.2.3.Виды абстракций
- •3.Процедурная абстракция
- •3.2.Спецификации
- •3.3.Спецификации процедурных абстракций
- •3.4.Реализация процедур
- •3.5.Более обобщенные процедуры
- •3.6.Создание процедурных абстракций
- •3.7.Заключение
- •4.Абстракции данных
- •4.1.Спецификации для абстракций данных
- •4.2.1.Реализация на языке clu
- •4.2.2.Замечания по поводу операцийupиdown
- •4.3.Использование абстракций данных
- •4.4.Реализация полиномов
- •4.5.Пояснения для понимания реализаций
- •4.5.1.Функция абстракции
- •4.5.2.Инвариант представления
- •4.6.3.Сохранение инварианта представления
- •4.5.4.Изменяемые представления
- •4.6.Параметризованные абстракции данных
- •4.7.Списки
- •4.8.Упорядоченные списки
4.8.Упорядоченные списки
В качестве последнего примера рассмотрим списки, в которых элементы отсортированы по доступу. Спецификация такого типа представлена на рис. 4.16.Упорядоченные списки —изменяемые и параметризуемы по типу, который должен быть полностью упорядочен его операциямиItиequal. Итак, упорядоченные спискиolistне содержат дублирующих друг друга элементов.
olist == data type [t: type] is create, addel, remel, isJn, empty, least
Requires t имеет операции
It,equal: proctype(t,t) returns(bool), которые определяют упорядочениеt
Описание
Упорядоченные списки olist —изменяемые списки элементов. Операции addel и remelмодифицируют списки. Каждый элемент упорядоченного списка отличается от остальных (как определяетсяt$equal). Операцияleastвозвращает наименьший элемент olist(как определяетсяt$lt). Операцииcreate ==proc ( )returns(olist[t])
effectsВозвращает новый, пустой список.
addel = proc (s: olist [t], х: t) requires ~ is.in (s, х) modifies s cHects Вставляет х в s. remel = proc (s: olist [t], х: t) requires isJn (s, х) modifies s effects Удаляет х из s. isJn = proc (s: olist [t], х:) returns (bool)
effectsВозвращает значениеtrue, еслиsсодержит элемент равный х (используется t$equal),в противном случае возвращает значениеfalse.
empty == proc (s: olist [t]) returns (bool)
effectsВозвращает значениеtrue, еслиsне содержит элементов, и значениеfalse —в противном случае.
least =proc(s:olist[t])returns(t)requires^empty(s).
effectsВозвращает элементeизs, такой, что в sне существует элемента, меньшего е (как определяется t$lt).
end olist
Рис. 4.16.Спецификация типа данных olist,