Теория и практика объектно-ориентированного программирования. Ноткин А.М. - 7 стр.

UptoLike

Составители: 

8
Такой цикл мог бы быть выполнен для всего набора, например чтобы
напечатать все элементы набора. Или мог бы искать некоторый элемент,
который удовлетворяет определенному условию, и в этом случае такой
цикл может закончиться, как только будет найден требуемый элемент.
Мы будем рассматривать итераторы как специальные процедуры
группы, позволяющие выполнять некоторые
действия для всех объектов,
включенных в группу. Примером итератора является метод GroupShow.
Нам бы хотелось иметь такой итератор, который позволял бы выпол-
нять над всеми элементами группы действия заданные произвольной про-
цедурой или функцией пользователя. Такой итератор можно реализовать,
если эту процедуру (функцию) передавать ему через параметр процедур-
ного типа.
Type TProc=procedure(p:PObject);
Процедура-итератор может объявляться таким образом:
Procedure GroupIter(group:TGroup;proc:TProc);
Передаваемая итератору процедура (функция) должна быть отком-
пилирована с атрибутом far.
Procedure MyProc(p:PObject);far;
Итератор можно сделать более удобным, если передавать ему указа-
тель на процедуру:
Procedure GroupIter(group:TGroup;proc : pointer);
Процедурные типы. В стандартном Паскале процедуры и функции
рассматриваются только как части программы, которые можно выполнять
с помощью
вызова процедуры или функции. В Borland Pascal процедуры и
функции трактуются гораздо шире: здесь допускается интерпретация про-
цедур и функций, как объектов, которые можно присваивать переменным
и передавать в качестве параметров. Такие действия можно выполнять с
помощью процедурных типов.
В описании процедурного типа задаются параметры, а для функции
еще и результат функции.
Формат
описания процедурного типа:
procedure <список формальных параметров>
или
function <список формальных параметров>:тип результата
Характерно, что синтаксис записи процедурного типа в точности
совпадает с записью заголовка процедуры или функции, только опускается
идентификатор после ключевого слова procedure или function. Приведем
некоторые примеры описаний процедурного типа:
                                  8

      Такой цикл мог бы быть выполнен для всего набора, например чтобы
напечатать все элементы набора. Или мог бы искать некоторый элемент,
который удовлетворяет определенному условию, и в этом случае такой
цикл может закончиться, как только будет найден требуемый элемент.
      Мы будем рассматривать итераторы как специальные процедуры
группы, позволяющие выполнять некоторые действия для всех объектов,
включенных в группу. Примером итератора является метод GroupShow.
      Нам бы хотелось иметь такой итератор, который позволял бы выпол-
нять над всеми элементами группы действия заданные произвольной про-
цедурой или функцией пользователя. Такой итератор можно реализовать,
если эту процедуру (функцию) передавать ему через параметр процедур-
ного типа.
      Type TProc=procedure(p:PObject);
      Процедура-итератор может объявляться таким образом:
      Procedure GroupIter(group:TGroup;proc:TProc);
      Передаваемая итератору процедура (функция) должна быть отком-
пилирована с атрибутом far.
      Procedure MyProc(p:PObject);far;
      Итератор можно сделать более удобным, если передавать ему указа-
тель на процедуру:
      Procedure GroupIter(group:TGroup;proc : pointer);

     •Процедурные типы. В стандартном Паскале процедуры и функции
рассматриваются только как части программы, которые можно выполнять
с помощью вызова процедуры или функции. В Borland Pascal процедуры и
функции трактуются гораздо шире: здесь допускается интерпретация про-
цедур и функций, как объектов, которые можно присваивать переменным
и передавать в качестве параметров. Такие действия можно выполнять с
помощью процедурных типов.
     В описании процедурного типа задаются параметры, а для функции –
еще и результат функции.
     Формат описания процедурного типа:
     procedure <список формальных параметров>
     или
     function <список формальных параметров>:тип результата

     Характерно, что синтаксис записи процедурного типа в точности
совпадает с записью заголовка процедуры или функции, только опускается
идентификатор после ключевого слова procedure или function. Приведем
некоторые примеры описаний процедурного типа: