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

UptoLike

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

33
temp.Destroy;
end;
end;
Исправления для метода Minus аналогичны .
К сожалению, приведенное решение характеризуется крайней из -
быточностью выполняемых действий. Вместо того, чтобы один раз соз-
дать объект класса Rational и вычислить значения его полей, мы разме-
щаем в памяти два объекта, поля первого (создаваемого конструктором
RVector.Create) инициализируем числами 0 и 1, поля второго вычис ля-
ем , после чего методом Assign производим копирование вычис ленных
значений в первый объект и уд аляем второй .
Несколько более эффективная реализация основана на использо-
вании вместо метода Plus класса Rational метода Add.
Пример 2.3.6. Третья реализация метода Plus.
function RVector.Plus(v: RVector): RVector;
var i: Integer;
begin
result:=RVector.Create;
for i:=1 to Dim do begin
result.comp[i].Assign(self.comp[i]);
result.comp[i].Add(v.comp[i]);
end;
end;
Сначала методом Rational.Assign мы копируем значение объекта
self.comp[i] в уже созданный объект result.comp[i], а затем прибавляем к
последнему v.comp[i]. Того же эффекта можно добиться, используя вме-
сто методов класса Rational одноименные методы класса RVector.
Пример 2.3.7. Четвертая реализация метода Plus.
function RVector.Plus(v: RVector): RVector;
var i: Integer;
begin
result:=RVector.Create;
result.Assign(self);
result.Add(v);
end;
Отличие данной реализации лишь в порядке выполнения дейс твий: все
     temp.Destroy;
  end;
end;


        И с прав л ения д л я м етод а Minus анал огичны .
        К с ожал ению, прив ед енное решение характ ериз ует с я крайней из -
бы точнос т ь ю в ы пол няем ы х д ейс т в ий. Вм ес тотого, чтобы од ин раз с оз -
д ат ь объект кл ас с а Rational и в ы чис л ит ь з начения егопол ей, м ы раз м е-
щ аем в пам ят и д в а объект а, пол я перв ого(с оз д ав аем огоконс т руктором
RVector.Create) иниц иал из ируем чис л ам и 0 и 1, пол я в торого в ы чис л я-
ем , пос л е чего м етод ом Assign произ в од им копиров ание в ы чис л енны х
з начений в перв ы й объект и уд ал яем в торой.
        Н ес кол ь ко бол ее эффект ив ная реал из ац ия ос нов ана на ис пол ь з о-
в ании в м ес том етод а Plus кл ас с а Rational м етод а Add.

Пример2.3.6. Трет ь я реал из ац ия м етод а Plus.

function RVector.Plus(v: RVector): RVector;
var i: Integer;
begin
  result:=RVector.Create;
  for i:=1 to Dim do begin
     result.comp[i].Assign(self.comp[i]);
     result.comp[i].Add(v.comp[i]);
  end;
end;


        С начал а м етод ом Rational.Assign м ы копируем з начение объект а
self.comp[i] в уже с оз д анны й объект result.comp[i], а з ат ем прибав л яем к
пос л ед нем у v.comp[i]. Тогоже эффект а м ожнод обит ь с я, ис пол ь з уя в м е-
с том етод ов кл ас с а Rational од ноим енны е м етод ы кл ас с а RVector.

Пример2.3.7. Ч ет в ерт ая реал из ац ия м етод а Plus.

function RVector.Plus(v: RVector): RVector;
var i: Integer;
begin
  result:=RVector.Create;
  result.Assign(self);
  result.Add(v);
end;


О тл ичие д анной реал из ац ии л ишь в поряд ке в ы пол нения д ейс т в ий: в с е


                                        33