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

UptoLike

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

58
4. И ЕРАРХИИ КЛАССОВ
Чтобы проиллюстрировать возможности класса DynamicVector,
од ного лишь класса Rational недостаточно. Поэтому следующей на-
шей целью будет разработка еще нескольких классов , производных от
Number.
Задача 4 .1. Требуется построить два наследника класса Number,
раз местив их в отдельных модулях. Объекты первого класса должны
представлять целые числа, второго цвета в формате RGB. Каждый
цвет задается тройкой вещественных чисел из отрезка [0, 1], опред е-
ляющих красную (red), зеленую (green) и синюю (blue) его составляю-
щие. Арифметические операции над цветами осуществляются с нас ы -
щением : если значение какой - либо цветовой компоненты оказывается
меньше 0, оно заменяется на 0, если больше 1 на 1. Список операций,
которы е должны быть реализованы для каждого класса, определ яется
классом Number.
Схема решения данной задачи в целом та же, что и предыдущих.
Но если раньше открытый интерфейс класса разрабатывался «с нуля» ,
исходя из набора операций, которыми должен обладать этот класс, то
теперь он в значительной степени определяется открытым интерфейсом
клас са-пред ка.
Решение. 1. Новые классы назовем Whole и RGBColor.
2. Согласно условию нам необходимо реализовать лишь те опера-
ции, объявления которых уже содержит класс Number. Это одновремен-
но облегчает и усложняет задачу. С одной стороны , не нужно думать над
тем , как объявить тот или иной метод это уже сделано в клас се-пред -
ке. С другой унаследованное объявление может быть не совсем т а-
ким , каким мы сделали бы его, разрабатывая класс с нуля. Из-за этого
реализация данного метода может оказаться несколько сложнее.
Строя конкретный класс, мы обязаны реализовать все абстракт-
ные методы базового. Класс Number содержит 7 таких методов :
function IsEqual(n: Number): Boolean; virtual; abstract;
procedure Add (n: Number); virtual; abstract;
procedure Subtract (n: Number); virtual; abstract;
procedure MultiplyBy(n: Number); virtual; abstract;
procedure DivideBy (n: Number); virtual; abstract;
procedure Assign (n: Number); virtual; abstract;
function AsString: String; virtual; abstract;
                            4. И Е РА РХ И И К Л А ССО В

      Ч т обы проил л юс т риров ат ь в оз м ожнос т и кл ас с а DynamicVector,
од ного л ишь кл ас с а Rational нед ос т ат очно. Поэт ом у с л ед ующ ей на-
шей ц ел ь ю буд ет раз работ ка ещ е нес кол ь ких кл ас с ов , произ в од ны х от
Number.

         Задача 4.1. Требует с я пос т роит ь д в а нас л ед ника кл ас с а Number,
раз м ес т ив их в отд ел ь ны х м од ул ях. О бъект ы перв ого кл ас с а д ол жны
пред с т ав л ят ь ц ел ы е чис л а, в торого — ц в ет а в форм ат е RGB. Кажд ы й
ц в ет з ад ает с я т ройкой в ещ ес т в енны х чис ел из от рез ка [0, 1], опред е-
л яющ их крас ную (red), з ел еную (green) и с инюю (blue) его с ос т ав л яю-
щ ие. А рифм ет ичес кие операц ии над ц в ет ам и ос ущ ес т в л яют с я с нас ы -
щ ением : ес л и з начение какой-л ибо ц в етов ой ком понент ы оказ ы в ает с я
м ень ше 0, оноз ам еняет с я на 0, ес л и бол ь ше 1 — на 1. С пис ок операц ий,
которы е д ол жны бы т ь реал из ов аны д л я кажд ого кл ас с а, опред ел яет с я
кл ас с ом Number.

         Схема реш ения д анной з ад ачи в ц ел ом т а же, чтои пред ы д ущ их.
Н о ес л и рань ше от кры т ы й инт ерфейс кл ас с а раз рабат ы в ал с я «с нул я» ,
ис ход я из набора операц ий, которы м и д ол жен обл ад ат ь этот кл ас с , то
т еперь он в з начит ел ь ной с т епени опред ел яет с я от кры т ы м инт ерфейс ом
кл ас с а-пред ка.
       Реш ение. 1. Н ов ы е кл ас с ы наз ов ем Whole и RGBColor.
         2. С огл ас ноус л ов ию нам необход им ореал из ов ат ь л ишь т е опера-
ц ии, объяв л ения которы х уже с од ержит кл ас с Number. Э тоод нов рем ен-
нообл егчает и ус л ожняет з ад ачу. С од ной с тороны , не нужнод ум ат ь над
т ем , как объяв ит ь тот ил и иной м етод — этоуже с д ел анов кл ас с е-пред -
ке. С д ругой — унас л ед ов анное объяв л ение м ожет бы т ь не с ов с ем т а-
ким , каким м ы с д ел ал и бы его, раз рабат ы в ая кл ас с с нул я. И з -з а этого
реал из ац ия д анногом етод а м ожет оказ ат ь с я нес кол ь кос л ожнее.
         С т роя кон кре тн ый кл ас с , м ы обяз аны реал из ов ат ь в с е абс т ракт -
ны е м етод ы баз ов ого. Кл ас с Number с од ержит 7 т аких м етод ов :
function       IsEqual(n: Number): Boolean;        virtual;   abstract;
procedure      Add       (n: Number);              virtual;   abstract;
procedure      Subtract (n: Number);               virtual;   abstract;
procedure      MultiplyBy(n: Number);              virtual;   abstract;
procedure      DivideBy (n: Number);               virtual;   abstract;
procedure      Assign    (n: Number);              virtual;   abstract;
function       AsString: String;                   virtual;   abstract;



                                          58