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

UptoLike

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

59
Все они должны быть замещены в классах-потомках, поэтому добавля-
ем к их открытым интерфейсам объявления:
function IsEqual(n: Number): Boolean; override;
procedure Add (n: Number); override;
procedure Subtract (n: Number); override;
procedure MultiplyBy(n: Number); override;
procedure DivideBy (n: Number); override;
procedure Assign (n: Number); override;
function AsString: String; override;
Очевидно, также, что у нас должна быть возможность определять
и изменять значение, представляемое объектом . Классу Whole для этого
достаточно двух методов :
function GetValue: Integer; virtual; // определение значения
procedure SetValue(val: Integer); virtual; // изменение значения
Что касается класса RGBColor, то здесь возможны два варианта. С
одной стороны , цвет это вектор длины 3, поэтому, как и в задачах 2.1
3.1, для чтения-записи компонент можно применять лишь два метода,
передавая им в качестве параметра номер компоненты. С другой стор о-
ны , все цветовые компоненты имеют свои названия и пользователю бы-
ло бы удобнее оперировать именно ими, а не числовыми индексами.
Поэтому мы добавим к классу RGBColor три пары методов , по одной для
каждой компоненты:
procedure SetRed (value: Real); virtual; //
procedure SetGreen(value: Real); virtual; // изменение значений
procedure SetBlue (value: Real); virtual; //
function GetRed: Real; virtual; //
function GetGreen: Real; virtual; // определение значений
function GetBlue: Real; virtual; //
Поскольку теперь мы разрабатываем не один класс, а иерархию,
все введенные методы объявляем виртуальными на случай возможного
наследования от наших классов .
3. Для хранения целого числа добавим к классу Whole одно поле
соот вет с т вующего типа:
value: Integer;
Класс RGBColor снова допускает два варианта: свое поле для ка-
ждой цветовой компоненты или массив из трех вещественных чисел .
Здесь уже необходимо задуматься не об удобстве пользователя (ему поля
все равно недоступны ), а о простоте реализации. Все арифметические
операции выполняются над цветами как над векторами по одним и тем
же правилам для всех компонент. С ледовательно, имеет смысл испол ь -
Вс е они д ол жны бы т ь з ам ещ ены в кл ас с ах-потом ках, поэтом у д обав л я-
ем к их от кры т ы м инт ерфейс ам объяв л ения:
function       IsEqual(n: Number): Boolean;         override;
procedure      Add       (n: Number);               override;
procedure      Subtract (n: Number);                override;
procedure      MultiplyBy(n: Number);               override;
procedure      DivideBy (n: Number);                override;
procedure      Assign    (n: Number);               override;
function       AsString: String;                    override;
         О чев ид но, т акже, чтоу нас д ол жна бы т ь в оз м ожнос т ь опред ел ят ь
и из м енят ь з начение, пред с т ав л яем ое объектом . Кл ас с у Whole д л я этого
д ос т аточнод в ух м етод ов :
function GetValue: Integer;       virtual; // определение значения
procedure SetValue(val: Integer); virtual; // изменение значения
         Ч токас ает с я кл ас с а RGBColor, тоз д ес ь в оз м ожны д в а в ариант а. С
од ной с тороны , ц в ет — этов ектор д л ины 3, поэтом у, как и в з ад ачах 2.1–
3.1, д л я чт ения-з апис и ком понент м ожно прим енят ь л ишь д в а м етод а,
перед ав ая им в качес т в е парам ет ра ном ер ком понент ы . С д ругой с торо-
ны , в с е ц в етов ы е ком понент ы им еют с в ои наз в ания и пол ь з ов ат ел ю бы -
л о бы уд обнее опериров ат ь им енно им и, а не чис л ов ы м и инд екс ам и.
Поэтом у м ы д обав им к кл ас с у RGBColor т ри пары м етод ов , поод ной д л я
кажд ой ком понент ы :
procedure   SetRed (value: Real); virtual; //
procedure   SetGreen(value: Real); virtual; // изменение значений
procedure   SetBlue (value: Real); virtual; //
function    GetRed:   Real;        virtual; //
function    GetGreen: Real;        virtual; // определение значений
function    GetBlue: Real;         virtual; //
          Пос кол ь ку т еперь м ы раз рабат ы в аем не од ин кл ас с , а иерархию,
в с е в в ед енны е м етод ы объяв л яем в ирт уал ь ны м и на с л учай в оз м ожного
нас л ед ов ания от наших кл ас с ов .
         3. Дл я хранения ц ел огочис л а д обав им к кл ас с у Whole од нопол е
с оот в ет с т в ующ егот ипа:
value: Integer;
        Кл ас с RGBColor с нов а д опус кает д в а в ариант а: с в ое пол е д л я ка-
жд ой ц в етов ой ком понент ы ил и м ас с ив из т рех в ещ ес т в енны х чис ел .
Зд ес ь уже необход им оз ад ум ат ь с я не об уд обс т в е пол ь з ов ат ел я (ем у пол я
в с е рав но нед ос т упны ), а о прос тот е реал из ац ии. Вс е арифм ет ичес кие
операц ии в ы пол няют с я над ц в ет ам и как над в екторам и поод ним и т ем
же прав ил ам д л я в с ех ком понент. С л ед ов ат ел ь но, им еет с м ы с л ис пол ь -


                                           59