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

UptoLike

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

16
function IVector.AsString: String;
var i: Integer;
begin
result:='(';
for i:=1 to Dim do begin
result:=result+IntToStr(self.comp[i]);
if i<Dim then result:=result+', ';
end;
result:=result+')';
end;
Методы GetComp и SetComp могут быть реализованы двумя раз -
личными способами: с контролем индексов и без . В первом случае при
каждом вызове метода значение параметра i проверяется на принадлеж-
ность отрезку [1, ..., Dim]. Если индекс не является допустимым, возбу ж -
дается исключение. Во втором случае никаких проверок корректности
индексов не производится. Этот вариант обеспечивает более высокую
скорость работы, но может привести к неявной модификации пам яти,
что является весьма трудно обнаруживаемой ошибкой .
Реализация с контролем индексов выглядит следующим образом .
Пример 2.1.2. Реализация методов GetComp и SetComp класса IVector.
function IVector.GetComp(i: Integer): Integer;
begin
if (i>=1) and (i<=Dim)
then result:=self.comp[i]
else raise Exception.Create('Index is out of bounds');
end;
procedure IVector.SetComp(i: Integer; value: Integer);
begin
if (i>=1) and (i<=Dim)
then self.comp[i]:=value
else raise Exception.Create('Index is out of bounds');
end;
7. Поскольку реализация класса не потребов ала введения каких-
либо вспомогательных методов , мы можем заняться созданием модуля.
Так как класс должен быть доступен за пределами данного мод у -
ля, его интерфейс следует расположить в разделе интерфейса. Реализ а-
ция класса всегда помещается в раздел реал изации. Константа Dim ис -
пол ь зуется в интерфейсе класса и потому должна быть определена выше
него. Таким образом , мы получаем
function IVector.AsString: String;
var i: Integer;
begin
  result:='(';
  for i:=1 to Dim do begin
     result:=result+IntToStr(self.comp[i]);
     if i=1) and (i<=Dim)
     then result:=self.comp[i]
     else raise Exception.Create('Index is out of bounds');
end;
procedure IVector.SetComp(i: Integer; value: Integer);
begin
  if (i>=1) and (i<=Dim)
     then self.comp[i]:=value
     else raise Exception.Create('Index is out of bounds');
end;


         7. Пос кол ь ку реал из ац ия кл ас с а не пот ребов ал а в в ед ения каких-
л ибов с пом огат ел ь ны х м етод ов , м ы м ожем з анят ь с я с оз д анием м од ул я.
         Т ак как кл ас с д ол жен бы т ь д ос т упен з а пред ел ам и д анногом од у-
л я, его инт ерфейс с л ед ует рас пол ожит ь в раз д ел е инт ерфейс а. Реал из а-
ц ия кл ас с а в с егд а пом ещ ает с я в раз д ел реал из ац ии. Конс т ант а Dim ис -
пол ь з ует с я в инт ерфейс е кл ас с а и потом у д ол жна бы т ь опред ел ена в ы ше
него. Т аким образ ом , м ы пол учаем


                                            16