- •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,