Введение в объектно-ориентированное программирование на языке Object Pascal. Соколов Е.В. - 66 стр.

UptoLike

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

66
result.TypeNameIs:=TypeNameIs; //
result.Destroy:=Destroy; //
result.Plus:=Plus; //
result.Minus:=Minus; // процедурным указателям
result.Dot:=Dot; // присваиваются адреса
result.Slash:=Slash; // конкретных подпрограмм
result.Add:=Add; //
result.Subtract:=Subtract; //
result.MultiplyBy:=MultiplyBy; //
result.DivideBy:=DivideBy; //
result.Normalize:=Normalize; //
result.Reduce:=Reduce; //
result.num:=0; // числовые поля инициализируются
result.den:=1; // корректными значениями
end;
function CreateAs(n, m: Integer): PRational;
begin
if m<>0 then begin // знаменатель должен быть положителен
result:=UnitRational.Create; // вызов функции, определенной выше
result.num:=n;
result.den:=m;
end
else raise Exception.Create('Illegal value of denominator');
end;
Здесь уже адреса подпрограмм сопоставляются всем указателям ,
так что незамещенных абстрактных методов не остается. Кроме этого,
инициализировать приходится также и числовые поля. Как и ранее, для
удобства доба в ляется еще один конструктор CreateAs.
4.4. Динамическое связывание
Рассмотрим следующий код .
Пример 4.4. Процедурный вариант программы, демонстрирующей ра-
боту об об щенных алгоритмов .
program TestAlgorithm;
{$APPTYPE CONSOLE}
uses
UnitAlgorithms, // здесь находятся обобщенные алгоритмы
UnitNumber, // необходим для выполнения повышения типа
UnitRational; // необходим для создания реальных переменных
  result.TypeNameIs:=TypeNameIs; //
  result.Destroy:=Destroy;       //
  result.Plus:=Plus;             //
  result.Minus:=Minus;           // процедурным указателям
  result.Dot:=Dot;               // присваиваются адреса
  result.Slash:=Slash;           // конкретных подпрограмм
  result.Add:=Add;               //
  result.Subtract:=Subtract;     //
  result.MultiplyBy:=MultiplyBy; //
  result.DivideBy:=DivideBy;     //
  result.Normalize:=Normalize;   //
  result.Reduce:=Reduce;         //
  result.num:=0; // числовые поля инициализируются
  result.den:=1; // корректными значениями
end;

function CreateAs(n, m: Integer): PRational;
begin
  if m<>0 then begin // знаменатель должен быть положителен
     result:=UnitRational.Create; // вызов функции, определенной выше
     result.num:=n;
     result.den:=m;
  end
  else raise Exception.Create('Illegal value of denominator');
end;


         Зд ес ь уже ад рес а под програм м с опос т ав л яют с я в с ем указ ат ел ям ,
т ак что нез ам ещенны хабс т ракт ны хм етод ов не ос т ает с я. Кром е э того,
инициал из иров ат ь приход ит с я т акже и чис л ов ы е пол я. Как и ранее, д л я
уд обс т в а д обав л яет с я еще од ин конс т руктор — CreateAs.

                        4.4. Д инамическо е связы вание

       Рас с м от рим с л ед ующий код .

Пример 4.4. Процед урны й в ариант програм м ы , д ем онс т рирующей ра-
бот у обобщенны хал горит м ов .

program TestAlgorithm;
{$APPTYPE CONSOLE}
uses
  UnitAlgorithms, // здесь находятся обобщенные алгоритмы
  UnitNumber,     // необходим для выполнения повышения типа
  UnitRational;   // необходим для создания реальных переменных




                                           66