- •Информационная модель предметной области
- •Моделирование задач на эвм
- •Преобразование информации при решении задачи на эвм
- •Понятие о данных
- •Абстрактные структуры данных
- •Классификация структур данных
- •14101954
- •Абстракция
- •Лекция 6. Види та методи абстракції в програмуванні. Абстракция через параметризацию
- •Абстракция через спецификацию
- •Виды абстракций
- •Лекция 7. Процедурна абстракція. Специфікація процедурної абстракції. Процедурная абстракция
- •Спецификации
- •Спецификации процедурных абстракций
- •Реализация процедур
- •Более обобщенные процедуры
- •Создание процедурных абстракций
- •Заключение
- •Лекция 8. Абстракція даних Абстракции данных
- •Спецификации для абстракций данных
- •Реализация на языке clu
- •Замечания по поводу операций up и down
- •Использование абстракций данных
- •Лекция 9. Реалізація абстракції даних. Функція абстракції. Функція інваріант подання.
- •Функция абстракции
- •Инвариант представления
- •Сохранение инварианта представления
- •Изменяемые представления
- •Параметризованные абстракции данных
- •Будем искать решение нашей задачи в виде цикла, имеющего следующий вид:
Лекция 9. Реалізація абстракції даних. Функція абстракції. Функція інваріант подання.
В этом разделе мы рассмотрим два информационных блока функцию абстракции и инвариант представления, которые особенно полезны для понимания реализации абстракции данных. Эти информационные блоки должны включаться в реализацию как комментарии. Кроме того, мы поговорим о корректности реализаций и изменяемых представлений.
Функция абстракции
Любая реализация абстракции данных должна определять, как представляются объекты, принадлежащие к этому типу. Выбирая представление, тот, кто занимается реализацией, учитывает связь между объектами представления и абстрактными объектами. Предполагается, что определенные объекты представления будут соответствовать определенным абстрактным объектам. Например, на рис. 4,5наборыintsetпредставляются массивами, элементы которых соответствуют элементам набора.
Эта взаимосвязь может быть определена функцией, которая называется функцией абстракции.Эта функция отображает объекты представления в абстрактные объекты:
А: repА
Здесь Аобозначает набор абстрактных объектов. Для каждого объекта представленияr, А(r) является абстрактным объектом аA,который представляет r.
Рис. 1. Пример функции абстракции.
Функция абстракции —это важнейшая информация о реализации. Она определяет конкретное представление, т. е. то, каким образом объекты представления реализуют абстрактные объекты. Эта функция должна быть обязательно представлена в комментариях реализации. Описывая функцию реализации, мы иногда сталкиваемся с проблемой, связанной с тем, что, если спецификация типа неформальная, область изменения функции абстракции не может быть точно определена. Сейчас мы будем преодолевать эту Проблему с помощью неформального описания «типичного» абстрактного объекта. Когда (в гл. 10)мы будем обсуждать формальные спецификации, то увидим, что они дают нам возможность довольно точно определять области изменения для функций абстракций.
Для определения функции абстракции прежде всего определяем типичный элемент абстрактного типа. Это дает нам возможность говорить об абстрактных объектах. Затем можем определить функцию абстракции в терминах этого типичного объекта. Например, для наборов intsetмы можем дать следующее описание:
%Типичный наборintsetесть: {х1, ...хп}
Здесь для описания наборов intsetиспользуем понятие математического набора, точно так же, как делали это в спецификацииintset. Затем пишем
%Функция абстракции есть
% А (г) = \r [ill low (r) < i < high (r)},
где \xlp(x)} есть набор всех таких х, что р (х) имеет значениеtrue.
В качестве другого примера рассмотрим полиномы. Мы решаем представлять полином массивом, в котором i-йэлемент содержит i-йкоэффициент, если этот коэффициент не относится к нулевым коэффициентам справа или слева от значащих членов полинома. Это представление описываем следующим образом.
%Типичный полином есть:c0+ c1x+c2x2+ …
%Функция абстракции для коэффициентаc1есть
%с1 =r[i ],еслиlow(r) <=i<=high (г)
% = 0в противном случае
Эта функция абстракции определена только для массивов с неотрицательной нижней границей. Функции абстракции часто имеют заданные области определения, как, например, в рассматриваемом случае (об этом мы будем говорить в следующем разделе).
Функция абстракции, в частности, удобна тем, что устраняет двусмысленности в интерпретации представления. Например, предположим, что с помощью массивов мы реализуем стеки. Мы можем выбирать, каким образом увеличивать массив, когда в стек добавляется новый элемент. Этот наш выбор будет отражен в функции абстракции. Если мы решаем увеличивать старший индекс массива и по этому индексу записывать элемент, то функция абстракции будет следующая:
%Типичный стек—это последовательность [е1, ...,еn], где
%еn —элемент со старшим индексом
%Функция абстракции есть
% А (г) = [r [low (r)], ..., r [high (r)]]
Если мы решаем уменьшать младший индекс и по этому индексу записывать элемент, то
% А (r) = [r [high (r)], ..., r [low (r) 1]
Заметим, что реализации стеков, о которых мы только что говорили, используют одно и то же представление, которое интерпретируется, однако, по-разному.