Основы программирования. Динамические массивы. Списки. Ассоциативные массивы. Деревья. Хеш-таблицы - 22 стр.

UptoLike

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

24
указатель на текущий элемент вперед, поэтому действие Next осуществляется
фактически и по ветке then и по ветке else условного оператора.
Методы, целиком реализованные с помощью вызова других методов, имеют
особый статус. Поскольку такие методы не осуществляют доступа к приватным
полям класса, то они могут быть реализованы с помощью внешних подпрограмм.
Например, метод Remove может быть реализован следующим образом:
procedure Remove(L: List; x: DataType);
begin
L.MoveFirst;
while not L.Eol do
if L.Current=x then
L.Delete
else L.Next;
end;
Считается, что такая реализация повышает защиту доступа, поскольку уменьшает
количество методов, имеющих доступ к приватной секции класса.
2.3 Реализация одного АТД на базе другого. Делегирование
Один АТД может быть реализован на базе другого АТД. Для этого в класс,
определяющий такой тип данных, помещают приватное поле-объект другого
класса, после чего вызовы всех методов переадресуются данному внутреннему
объекту. При этом внутренний объект может иметь другие имена методов.
Говорят, что объект делегирует выполнение операций своему внутреннему
подобъекту, а
делегированием называют переадресацию выполнения действий
другому объекту.
Так, приведенная ниже реализация стека делегирует выполнение всех опера-
ций внутреннему объекту класса «Список».
type
Stack = class
private
L: List;
public
constructor Create;
destructor Destroy;
procedure Push(i: integer);
function Pop: integer;
function Top: integer;
function IsEmpty: boolean;
end;
constructor Stack.Create;
begin