Читайте также:
|
|
<выполнить обработку>
<очередной элемент>:=<следующий элемент>
Все-цикл.
Поэтому обычно он состоит из трех частей:
· метод, позволяющий организовать обработку данных с начала (получение первого элемента структуры);
· метод, организующий переход к следующему элементу;
· метод, позволяющий проверить окончание данных.
Доступ к очередной порции данных при этом осуществляется через специальный указатель текущей порции данных (указатель на объект класса-элемента).
Пример
Контейнерный класс с итератором (класс «Список»).
Разработаем контейнерный класс «Список», реализующий линейный односвязный список из объектов класса «Элемент».
Класс «Элемент»:
Поле Указатель_наследующий
Конец описания.
Класс «Список» включает три метода, составляющих итератор: метод Определить_первый, который должен возвращать указатель на первый элемент, метод Определить_следующий, который должен возвращать указатель на следующий элемент, и метод Конец_списка, который должен возвращать «да», если список исчерпан.
Класс «Список»
Реализация
Поля Указатель_напервый, Указатель_натекущий
Интерфейс
метод Добавить_передпервым (аЭлемент)
Метод Удалить_последний
Метод Определить_первый
Метод Определить_следующий
Метод Конец_списка
Конец описания.
Тогда поэлементная обработка списка будет программироваться следующим образом:
Элемент:= Определить_первый
Цикл-пока не Конец_списка
Обработать элемент, переопределив его тип
Элемент:= Определить_следующий
Все-цикл
При использовании второго способа поэлементной обработки реализуемой структуры процедура обработки элемента передается в списке параметров. Такую процедуру можно определить, если известен тип обработки, например, процедура вывода значений информационных полей объекта. Процедура должна вызываться из метода для каждого элемента данных. В языках с жесткой типизацией данных тип процедуры должен описываться заранее, при этом часто невозможно предусмотреть, какие дополнительные параметры должны передаваться в процедуру. В таких случаях первый способ может оказаться предпочтительнее.
Пример
Контейнерный класс с процедурой обработки всех объектов (класс «Список»). В этом случае класс «Список» будет описываться следующим образом:
Класс «Список»
Реализация
Поля Указатель_напервый, Указатель_натекущий
Интерфейс
метод Добавить_перед_первым (аЭлемент)
Метод Удалить_последний
метод Выполнить_для_всех (аПроцедура_обработки)
Дата добавления: 2015-09-06; просмотров: 189 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Контейнерные классы | | | Исключения при разработке классов |