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

UptoLike

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

20
В результате описанных исправлений, мы получаем следующее
(как обы ч но, все модификации отмечены подчеркиванием ).
Пример 2.2.1. Открытый интерфейс класса RVector (в первом прибл и -
жении).
function Plus (v: RVector): RVector;
function Minus (v: RVector): RVector;
function ScalarProduct(v: RVector): Rational;
function IsEqual (v: RVector): Boolean;
procedure Add (v: RVector);
procedure Subtract(v: RVector);
procedure Assign (v: RVector);
function GetLength: Real;
function GetComp(i: Integer): Rational;
procedure SetComp(i: Integer; value: Rational);
function AsString: String;
3. Разумеется, изменения коснутся и внутренней реализации об ъ -
ектов класса RVector. Очевидно, что элементы массива comp теперь
должны иметь тип Rational.
4. Соображения, приведенные в решении предыдущей задачи и
обосновывающие отказ от переопределения унаслед ованного деструк-
тора, остаются справедливыми и для нового класса. В то же время ини-
циализация элементов массива comp теперь оказывается необходимой :
нельзя допустить, чтобы их знаменатели содержали нулевые значения.
Поэтому мы должны переопределить в классе RVector стандартный кон -
структор Create, добавив к открытому нитерфейсу класса строку
constructor Create;
5. Изменения, которые необходимо внести в код методов , связаны
с тем , что стандартные операторы и библиотечные функции языка Ob-
ject Pascal не могут быть применены к переменным пользовательского
типа Rational. Поэтому мы должны либо всюду вставить код , выпол -
няющий требуемые действия, например, заменить выражение
self.comp[i]:=self.comp[i]+v.comp[i];
на
self.comp[i].num:=self.comp[i].num*v.comp[i].den
+self.comp[i].den*v.comp[i].num;
self.comp[i].den:=self.comp[i].den*v.comp[i].den;
либо воспользоваться готовыми подпрограммами из модуля UnitRational.
Согласно общей идее сокрытия реализации второй вариант является бо-
       В рез ул ьт ат е опис анны х ис прав л ений, м ы пол учаем с л ед ующ ее
(как обы чно, в с е м од ификац ии от м ечены под черкив анием ).

Пример2.2.1. О т кры т ы й инт ерфейс кл ас с а RVector (в перв ом прибл и-
жении).

function    Plus         (v: RVector): RVector;
function    Minus        (v: RVector): RVector;
function    ScalarProduct(v: RVector): Rational;
function    IsEqual      (v: RVector): Boolean;
procedure   Add     (v: RVector);
procedure   Subtract(v: RVector);
procedure   Assign (v: RVector);
function    GetLength: Real;
function    GetComp(i: Integer): Rational;
procedure   SetComp(i: Integer; value: Rational);
function    AsString: String;


       3. Раз ум еет с я, из м енения кос нут с я и в нут ренней реал из ац ии объ-
ект ов кл ас с а RVector. О чев ид но, чт о эл ем ент ы м ас с ив а comp т еперь
д ол жны им ет ь т ип Rational.
         4. С оображения, прив ед енны е в решении пред ы д ущ ей з ад ачи и
обос нов ы в ающ ие от каз от переопред ел ения унас л ед ов анного д ес т рук-
тора, ос т ают с я с прав ед л ив ы м и и д л я нов огокл ас с а. В тоже в рем я ини-
ц иал из ац ия эл ем ентов м ас с ив а comp т еперь оказ ы в ает с я необход им ой:
нел ь з я д опус т ит ь , чтобы их з нам енат ел и с од ержал и нул ев ы е з начения.
Поэтом у м ы д ол жны переопред ел ит ь в кл ас с е RVector с т анд арт ны й кон-
с т руктор Create, д обав ив к от кры том у нит ерфейс у кл ас с а с т року
constructor Create;
         5. И з м енения, которы е необход им ов нес т и в код м етод ов , с в яз аны
с т ем , что с т анд арт ны е операторы и библ иот ечны е функц ии яз ы ка Ob-
ject Pascal не м огут бы т ь прим енены к перем енны м пол ь з ов ат ел ь с кого
т ипа Rational. Поэтом у м ы д ол жны л ибо в с юд у в с т ав ит ь код , в ы пол -
няющ ий т ребуем ы е д ейс т в ия, наприм ер, з ам енит ь в ы ражение
self.comp[i]:=self.comp[i]+v.comp[i];
на
self.comp[i].num:=self.comp[i].num*v.comp[i].den
                 +self.comp[i].den*v.comp[i].num;
self.comp[i].den:=self.comp[i].den*v.comp[i].den;
л ибов ос пол ь з ов ат ь с я готов ы м и под програм м ам и из м од ул я UnitRational.
С огл ас нообщ ей ид ее с окры т ия реал из ац ии в торой в ариант яв л яет с я бо-


                                          20