
5.3 Абстрактний тип даних
Історія мов йде по шляху розвитку засобів абстракції. Спочатку з'явилися абстракції керуючих структур, що привело до структурного програмування. Пізніше було введене поняття абстрактного типу даних (АТД). Прикладом АТД може бути стек або черга.
Для точного визначення АТД існують різні математичні моделі. Основні моделі – алгебраїчна і λ-вирахування другого порядку. Використовується також конструктивна логіка, що визначає типи за допомогою формул, та інші моделі.
Алгебраїчна модель. АТД можна розглядати як об'єднання опису значень даного типу і функцій над цими значеннями.
Оскільки значення можна розглядати як нуль-арні функції (які не мають аргументів), можна вважати, що тип T цілком визначається своєю сигнатурою Σ.
Як правило, використовуються багатосортні (багатоосновні) алгебри.
Сигнатура ж представляє множину імен, що належать до даного типу функцій разом з їх профілями. У загальному випадку профіль подається у вигляді
f: s1 × … × sn → s,
де si – сорти (тобто типи аргументів).
Серед функцій виділяють виробники (producers) і аналізатори (observers, selectors). Виробники будують об'єкт типу T, аналізатори вибирають з об'єкта інформацію.
Приклад алгебраїчної специфікації булевого типу даних bool:
adt bool is
functions
true: bool
false: bool
and, or: bool × bool → bool
not: bool → bool
axioms
and (true, x) = x
and (false, x) = x
not (true) = false
not (false) = true
or (x, y) = not (and (not (x), not (y))) .
Інтерпретація
ставить у відповідність кожному терму
специфікації елемент відповідної
алгебри: or
відповідає “
”, and
– “
”, not
– “
”. Сама алгебра має вигляд
( {true, false), { , , } ).
Інший приклад – тип натурального числа nat:
adt nat is
functions
0: nat
S: nat → nat
mul: nat × nat → nat
plus: nat × nat → nat
axioms
plus (x, 0) = x
plus (x, Sy) = S (plus (x, y))
mul (x, 0) = 0
mul (x, Sy) = plus (mul (x, y), x)
Відповідна алгебра має вигляд
( {N}, { ++, +, * }).
Запитання і завдання до розділу 5
1 Назвати основні способи перетворення виразів у лямбда-вирахуванні.
2 Обчислити лямбда-вираз (λx.x+3) 2.
3 Обчислити лямбда-вираз (λx. (λy.x*y+3) 2) 3.
4 Спростити комбінаторний вираз SKKx.
5 Які основні підходи існують до задання типів?
6 У чому полягає підхід Каррі до задання типів?
7 За якими правилами проводиться створення підтипів?
8 Які математичні моделі існують для точного визначення абстрактного типу даних?
9 У чому полягає алгебраїчна модель абстрактного типу даних?