Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

AlgStr / Библиотека / ЛЕКЦИИ / PZ00 / Дзыгин Дима

.doc
Скачиваний:
32
Добавлен:
23.03.2015
Размер:
26.62 Кб
Скачать

21. Абстракция через итерацию и ее спецификация.

Итератор - абстракция, скрывающая подробности перебора элементов какой-то структуры данных.

Итератор осуществляет перебор компонентов множественного набора данных, удобным и эффективным способом и при этом не нарушает абстракцию через спецификацию, то есть позволяет не вдаваться в представление типа. Он позволяет решить проблемы экономии памяти и времени.

Смысл абстракции через итерацию – итератор позволяет отделить проблему перебора элементов от реализации этого перебора.

Тип данных может иметь несколько итераторов.

В некоторых языках программирования итератор является встроенной языковой конструкцией. В языке CLU итератор взаимодействует с циклом for и используется в следующих конструкциях:

for each <для элемента i, возвращаемого итератором А>

do <<выполнить над i некоторое действие D>>

Спецификация итератора имеет вид:

Iname = iter (<список входных параметров>)

gields (<список результатов, выдаваемых итератором>)

signals (<результаты, возвращаемые по исключительной ситуации>)

requires (<задаются требования входным параметрам>)

modifiers (<список входных параметров, которые могут быть изменены при работе

итератора >)

effects (<описывается общий эффект применения итератора>)

end Iname

Очень важным является понятие генератора.

Генератор – это способ моделирования итератора.

Генератор реализуется как объект, который содержит четыре основных метода (Create, Done, Iter, Destroy)

Они реализуют элементы цикла, позволяющего производить итерирование (в скобках указано имя метода, которых выполняет данную операцию).

1) Подготовка цикла ( Create )

2) Условие продолжения цикла ( Done )

3) Тело цикла ( Iter )

4) Модификатор цикла ( Iter )

5) Завершение работы генератора (Destroy )

К примеру, на языке Паскаль генератор типа данных ATD может описываться так

Generator_ATD = Object

Private

<Поля, необходимые для реализации генератора>

Public

Procedure Create(A : ATD);

Procedure Iter(Var Rezult : ATD_Elem);

Function Done : Boolean;

Procedure Destroy;

End;

Соседние файлы в папке PZ00