ВУЗ:
Составители:
Рубрика:
73
ПРИЛОЖЕНИЕ 2. К ЛАСС N UMBER
Приведенное определение класса Number довольно сильно отл и-
чается от используемого в третьей части пособия [*].
Во-первых, он содержит три новых абстрактных метода: IsEqual,
Assign и AsString. В производных классах их реализации должны в ы -
пол нять, соответственно, сравнение двух объектов на равенство, при-
сваивание одного объекта другому и преобразование объекта к строко-
вой форме.
Во-вторых, добавлено два конструктора: Create и CreateEqualTo
для создания и клонирования объектов . Оба они объявлены виртуал ь-
ными с тем , чтобы их можно было использовать совместно с классов ы -
ми ссылками для создания объектов , тип которых неизвестен во время
разработки. Дополнительно к классу Number введено и имя ClassNumber
для ссылочного типа class of Number.
Наконец , методы Plus, Minus, Dot, Slash и конструктор Create-
EqualTo реализованы универсальным образом с использованием других
методов того же класса. Таким образом , теперь они сами представляют
собой обобщенные алгоритмы.
В качестве примера опишем более подробно работу метода Plus.
Метод ClassType, унаследованный от TObject, возвращает ссыл-
ку на класс текущего объекта (назовем его SelfClass), который завед о-
мо является потомком Number. Поэтому приведение типа ClassNum-
ber(self.ClassType) безопасно и позволяет вызвать конструктор Create-
EqualTo именно из класса SelfClass. В результате создается копия теку-
щ его объекта, к которой с помощью метода Add прибавляется объект n.
Поскольку в классе Number данный метод объяв лен виртуал ьным,
вызывается процедура, замещающая его в классе SelfClass. Таким обр а -
зом , операция сложения выполняется по правилам , определенным в реа-
лизации класса текущего объекта.
Пример П . 2 .1. Код класса Number.
unit UnitNumber;
interface
type
Number = class
public
function Plus (n: Number): Number; virtual;
function Minus (n: Number): Number; virtual;
function Dot (n: Number): Number; virtual;
П РИ Л О Ж Е Н И Е 2. К Л А ССNUMBER Прив ед енное опред ел ение кл ас с а Number д ов ол ь но с ил ь но отл и- чает с я от ис пол ь з уем огов т рет ь ей час т и пос обия [*]. Во-перв ы х, он с од ержит т ри нов ы х абс т ракт ны х м ет од а: IsEqual, Assign и AsString. В произ в од ны х кл ас с ах их реал из ац ии д ол жны в ы - пол нят ь , с оот в ет с т в енно, с рав нение д в ух объект ов на рав енс т в о, при- с в аив ание од ногообъект а д ругом у и преобраз ов ание объект а к с т роко- в ой форм е. Во-в торы х, д обав л ено д в а конс т руктора: Create и CreateEqualTo д л я с оз д ания и кл ониров ания объектов . О ба они объяв л ены в ирт уал ь - ны м и с т ем , чтобы их м ожнобы л оис пол ь з ов ат ь с ов м ес т нос кл ас с ов ы - м и с с ы л кам и д л я с оз д ания объектов , т ип которы х неиз в ес т ен в о в рем я раз работ ки. Допол нит ел ь нок кл ас с у Number в в ед енои им я ClassNumber д л я с с ы л очногот ипа class of Number. Н аконец , м етод ы Plus, Minus, Dot, Slash и конс т рукт ор Create- EqualTo реал из ов аны унив ерс ал ь ны м образ ом с ис пол ь з ов анием д ругих м етод ов тогоже кл ас с а. Т аким образ ом , т еперь они с ам и пред с т ав л яют с обой обобщ енны е ал горит м ы . В качес т в е прим ера опишем бол ее под робноработ у м етод а Plus. М ет од ClassType , унас л ед ов анны й от TObject, в оз в ращ ает с с ы л - ку на кл ас с т екущ егообъект а (наз ов ем егоSelfClass), кот оры й з ав ед о- м о яв л яет с я пот ом ком Number. Поэт ом у прив ед ение т ипа ClassNum- ber(self.ClassType) без опас но и поз в ол яет в ы з в ат ь конс т рукт ор Create- EqualTo им енноиз кл ас с а SelfClass. В рез ул ь т ат е с оз д ает с я копия т еку- щ егообъект а, к которой с пом ощ ь ю м етод а Add прибав л яет с я объект n. Пос кол ь ку в кл ас с е Number д анны й м етод объяв л ен в ирт уал ь ны м , в ы з ы в ает с я проц ед ура, з ам ещ ающ ая егов кл ас с е SelfClass. Т аким обра- з ом , операц ия с л ожения в ы пол няет с я поправ ил ам , опред ел енны м в реа- л из ац ии кл ас с а т екущ егообъект а. ПримерП.2.1. Код кл ас с а Number. unit UnitNumber; interface type Number = class public function Plus (n: Number): Number; virtual; function Minus (n: Number): Number; virtual; function Dot (n: Number): Number; virtual; 73
Страницы
- « первая
- ‹ предыдущая
- …
- 71
- 72
- 73
- 74
- 75
- …
- следующая ›
- последняя »