ВУЗ:
Составители:
Рубрика:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 18
- 19
- 20
- 21
- 22
- …
- следующая ›
- последняя »