Разработка классов на языке Object Pascal. Соколов Е.В. - 17 стр.

UptoLike

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

17
Пример 2.1.3. Размещение класса IVector внутри модуля.
unit UnitIVector;
interface
const Dim = 5;
type IVector = class
private
comp: array[1..Dim] of Integer;
public
function Plus (v: IVector): IVector;
function Minus (v: IVector): IVector;
function ScalarProduct(v: IVector): Integer;
function IsEqual (v: IVector): Boolean;
procedure Add (v: IVector);
procedure Subtract(v: IVector);
procedure Assign (v: IVector);
function GetLength: Real;
function GetComp(i: Integer): Integer;
procedure SetComp(i: Integer; value: Integer);
function AsString: String;
end;
implementation
uses SysUtils;
// Здесь размещается реализация методов,
// приведенная в примерах 2.1.1 и 2.1.2.
end.
8. Как и реализация методов , демонстрационная программа мо-
жет быть легко получена из программы, демонстрирующей работу би б-
лиотеки в задаче 1.1. Для этого в последнюю необходимо внести сле-
дующие изменения:
а) если объект класса возвращается функцией в качестве значения,
то ответственность за его размещение в памяти несет данная функция, в
противном случае созданием объекта занимается сама программа;
б) все объекты, независимо от того, как они были созданы , удаляю т -
ся программой путем явного вызова деструкторов ;
в ) обращение к компонентам векторов возможно лишь посредством
вызова методов GetComp и SetComp, выражения вида v.comp[i] недопус -
тимы, так как поле comp является закрытым и определение класса нахо-
дится в отдельном модуле;
г) вызовы методов отличаются от вызовов подпрограмм библиотеки
синтаксически, но не содержательно: первый аргумент объект, для
Пример2.1.3. Раз м ещ ение кл ас с а IVector в нут ри м од ул я.

unit UnitIVector;
interface
const Dim = 5;
type IVector = class
private
  comp:     array[1..Dim] of Integer;
public
  function Plus          (v: IVector): IVector;
  function Minus         (v: IVector): IVector;
  function ScalarProduct(v: IVector): Integer;
  function IsEqual       (v: IVector): Boolean;
  procedure Add     (v: IVector);
  procedure Subtract(v: IVector);
  procedure Assign (v: IVector);
  function GetLength: Real;
  function GetComp(i: Integer): Integer;
  procedure SetComp(i: Integer; value: Integer);
  function AsString: String;
end;
implementation
uses SysUtils;
// Здесь размещается реализация методов,
// приведенная в примерах 2.1.1 и 2.1.2.
end.


          8. Как и реал из ац ия м етод ов , д ем онс т рац ионная програм м а м о-
жет бы т ь л егкопол учена из програм м ы , д ем онс т рирующ ей работ у биб-
л иот еки в з ад аче 1.1. Дл я этого в пос л ед нюю необход им о в нес т и с л е-
д ующ ие из м енения:
     а) ес л и объект кл ас с а в оз в ращ ает с я функц ией в качес т в е з начения,
тоот в ет с т в еннос т ь з а егораз м ещ ение в пам ят и нес ет д анная функц ия, в
прот ив ном с л учае с оз д анием объект а з аним ает с я с ам а програм м а;
     б) в с е объект ы , нез ав ис им оот того, как они бы л и с оз д аны , уд ал яют -
с я програм м ой пут ем яв ногов ы з ов а д ес т рукторов ;
     в ) обращ ение к ком понент ам в екторов в оз м ожнол ишь пос ред с т в ом
в ы з ов а м етод ов GetComp и SetComp, в ы ражения в ид а v.comp[i] нед опус -
т им ы , т ак как пол е comp яв л яет с я з акры т ы м и опред ел ение кл ас с а нахо-
д ит с я в отд ел ь ном м од ул е;
     г) в ы з ов ы м етод ов отл ичают с я от в ы з ов ов под програм м библ иот еки
с инт акс ичес ки, но не с од ержат ел ь но: перв ы й аргум ент — объект, д л я


                                         17