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

UptoLike

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

24
3) Procedure DelDisp (Var p:PObject);
Удаляет элемент из группы и из памяти.
Итератор. Итераторы позволяют выполнять некоторые действия
для каждого элемента определенного набора данных.
For all элементов набора do действия
Такой цикл мог бы быть выполнен для всего набора, например, что-
бы напечатать все элементы набора. Или мог бы искать некоторый эле-
мент, который удовлетворяет
определенному условию, и в этом случае та-
кой цикл может закончиться, как только будет найден требуемый элемент.
Мы будем рассматривать итераторы как специальные методы класса-
группы, позволяющие выполнять некоторые действия для всех объектов,
включенных в группу. Примером итератора является метод Show.
Нам бы хотелось иметь такой итератор, который позволял бы
выпол-
нять над всеми элементами группы действия заданные не одним из мето-
дов объекта, а произвольной процедурой или функцией пользователя. Та-
кой итератор можно реализовать, если эту процедуру(функцию) переда-
вать ему через параметр процедурного типа.
Type TProc=procedure(p:PObject);
Метод-итератор может объявляться таким образом:
Procedure ForEach(action:TProc);
Передаваемая итератору процедура (функция) должна быть отком-
пилирована
с атрибутом far:
Procedure MyProc (p:PObject);far;
Метод-итератор можно сделать более удобным, если передавать ему
указатель на процедуру:
Procedure ForEach (action : pointer);
Динамическая идентификация типов. Определение типа объекта
во время выполнения программы. Необходимость в этом может возник-
нуть, когда необходимо определить, какой объект содержит полиморфная
переменная.
Например, группа содержит объекты различных классов и необхо-
димо выполнить некоторые действия только для объектов определенного
класса. Тогда в итераторе мы должны распознавать тип очередного объ-
екта.
В Borland Pascal для динамической идентификации типа использует-
ся функция TypeOf.
Function TypeOf(x):pointer;
Функция возвращает указатель на VMT объектного типа.
Х-идентификатор класса или экземпляра класса.
                                  24

     3) Procedure DelDisp (Var p:PObject);
     Удаляет элемент из группы и из памяти.

      •Итератор. Итераторы позволяют выполнять некоторые действия
для каждого элемента определенного набора данных.
      For all элементов набора do действия
      Такой цикл мог бы быть выполнен для всего набора, например, что-
бы напечатать все элементы набора. Или мог бы искать некоторый эле-
мент, который удовлетворяет определенному условию, и в этом случае та-
кой цикл может закончиться, как только будет найден требуемый элемент.
      Мы будем рассматривать итераторы как специальные методы класса-
группы, позволяющие выполнять некоторые действия для всех объектов,
включенных в группу. Примером итератора является метод Show.
      Нам бы хотелось иметь такой итератор, который позволял бы выпол-
нять над всеми элементами группы действия заданные не одним из мето-
дов объекта, а произвольной процедурой или функцией пользователя. Та-
кой итератор можно реализовать, если эту процедуру(функцию) переда-
вать ему через параметр процедурного типа.
      Type TProc=procedure(p:PObject);
      Метод-итератор может объявляться таким образом:
      Procedure ForEach(action:TProc);
      Передаваемая итератору процедура (функция) должна быть отком-
пилирована с атрибутом far:
      Procedure MyProc (p:PObject);far;
      Метод-итератор можно сделать более удобным, если передавать ему
указатель на процедуру:
      Procedure ForEach (action : pointer);
      •Динамическая идентификация типов. Определение типа объекта
во время выполнения программы. Необходимость в этом может возник-
нуть, когда необходимо определить, какой объект содержит полиморфная
переменная.
      Например, группа содержит объекты различных классов и необхо-
димо выполнить некоторые действия только для объектов определенного
класса. Тогда в итераторе мы должны распознавать тип очередного объ-
екта.
      В Borland Pascal для динамической идентификации типа использует-
ся функция TypeOf.
      Function TypeOf(x):pointer;
      Функция возвращает указатель на VMT объектного типа.
      Х-идентификатор класса или экземпляра класса.