[x]. имя типа, возможно с родовым параметром (раздел TYPES);
[x]. список функций с их сигнатурами (раздел FUNCTIONS);
[x]. аксиомы, выражающие свойства результатов функций (раздел AXIOMS);
[x]. ограничения применимости функций (раздел PRECONDITIONS).
При поверхностном применении АТД часто опускают две последние части. Во многом, это лишает данный подход привлекательности, поскольку предусловия и аксиомы выражают семантические свойства функций. Если их опустить и просто рассматривать стек как инкапсуляцию операций
Этот риск потери семантики переносится на программирование: программы, реализующие операции соответствующего АТД, в принципе могут выполнять нечто отличное от задуманного. Утверждения предотвращают этот риск, возвращая семантику классу.
Компоненты класса и АТД функции
Для понимания отношений между утверждениями и АТД необходимо, прежде всего, установить отношение между компонентами класса и их двойниками - АТД функциями. В свете прежних обсуждений функции подразделяются на три категории: создатели, запросы и команды. Возвращаясь назад, напомню, категория функции
f : A × B × ... X
зависит от того, где имя АТД, скажем
[x]. Если
[x]. Если
[x]. Если
Выражение аксиом
Из соответствия между АТД функциями и компонентами класса можно вывести соответствие между утверждениями класса и семантическими свойствами АТД.
[x]. Предусловие для специфицированной в АТД функции появляется как предусловие программы, соответствующей данной функции.
[x]. Аксиома, включающая команду, и, возможно, одну или более функций запросов, появится как постусловие соответствующей процедуры.
[x]. Аксиомы, включающие только запросы, появятся как постусловия соответствующих функций или как инвариант. Последнее обычно имеет место, если более чем одна функция включена в аксиому, или, по меньшей мере, один из запросов реализован в виде атрибута.
[x]. Аксиомы, включающие функцию создатель, появятся в постусловии соответствующей процедуры создания.
В этот момент следует вернуться назад и сравнить аксиомы АТД
Функция абстракции
Этот раздел требует от читателя определенной математической подготовки.
Полезно рассмотреть предшествующее обсуждение в терминах следующего рисунка, навеянного работой [Hoare 1972a], в которой описывается понятие '
Рис. 11.5. Преобразования между абстрактными и конкретными объектами
Здесь
Стрелка, помеченная
Реализация корректна, если (для всех функций
Свойство согласованности Класс-АТД
(cf;a) = (a;af)
где символ '
(Композицию
Свойство устанавливает, что для каждого конкретного объекта
