ВУЗ:
Составители:
Рубрика:
25
Задача 2.3 вполне естественным образом продолжает рассматри-
ваемую серию. Снова требуется создать класс для представления вект о-
ров фиксированной длины с рациональными компонентами. Однако те-
перь компоненты эти должны в свою очередь быть объектами класса.
Как и ранее, для представления рациональных чисел необходимо
использовать уже существующий класс Rational, определение которого
находится в отдельном модуле UnitRational. Для решения задачи доста-
точно знать, что класс Rational унаследован от некоего абстрактного
класса Number и имеет следующий открытый интерфейс :
function Plus (n: Number): Number; // вычисление суммы
function Minus (n: Number): Number; // вычисление разности
function Dot (n: Number): Number; // вычисление произведения
function Slash (n: Number): Number; // вычисление частного
function IsEqual(n: Number): Boolean; // сравнение на равенство
procedure Add (n: Number); // прибавление
procedure Subtract (n: Number); // вычитание
procedure MultiplyBy(n: Number); // домножение
procedure DivideBy (n: Number); // деление
procedure Assign (n: Number); // присваивание
function AsString: String; // преобразование в строку
constructor Create; // конструктор по умолчанию
constructor CreateEqualTo(n: Number); // создание копии
procedure SetNum(value: Integer); // изменяет числитель
procedure SetDen(value: Integer); // изменяет знаменатель
function GetNum: Integer; // возвращает числитель
function GetDen: Integer; // возвращает знаменатель
Реализация данного класса гарантирует целостность объекта и воз-
буждение исключения в случае, когда корректное выполнение операции
невозможно (например, при делении на ноль). Конструктор Create с озда-
ет объект, представляющий нулевое число, CreateEqualTo — копию з а-
данного объекта. Более подробные сведения о классе Rational приводятся
в приложении 3. Описание класса Number содержится в приложении 2.
Решение задачи снова будем осуществлять путем последователь-
ных исправлений написанного ранее кода. Причин, по которым прихо-
дится эти исправления производить, две. Во-первых, объекты в отл ичие
от записей являются указателями, что создает ряд дополнительных про-
блем , таких, например, как явное размещение в памяти и уд а ление из
нее. Во-вторых, внутренняя реализация объекта полностью скрыта от
нас , и если раньше мы могли выбирать, использовать ли готовые под -
Задача 2.3 в пол не ес т ес т в енны м образ ом прод ол жает рас с м ат ри- в аем ую с ерию. С нов а т ребует с я с оз д ат ь кл ас с д л я пред с т ав л ения в екто- ров фикс иров анной д л ины с рац ионал ь ны м и ком понент ам и. О д накот е- перь ком понент ы эт и д ол жны в с в ою очеред ь бы т ь объект ам и кл ас с а. Как и ранее, д л я пред с т ав л ения рац ионал ь ны х чис ел необход им о ис пол ь з ов ат ь уже с ущ ес т в ующ ий кл ас с Rational, опред ел ение которого наход ит с я в отд ел ь ном м од ул е UnitRational. Дл я решения з ад ачи д ос т а- точно з нат ь , что кл ас с Rational унас л ед ов ан от некоего абс т ракт ного кл ас с а Number и им еет с л ед ующ ий от кры т ы й инт ерфейс : function Plus (n: Number): Number; // вычисление суммы function Minus (n: Number): Number; // вычисление разности function Dot (n: Number): Number; // вычисление произведения function Slash (n: Number): Number; // вычисление частного function IsEqual(n: Number): Boolean; // сравнение на равенство procedure Add (n: Number); // прибавление procedure Subtract (n: Number); // вычитание procedure MultiplyBy(n: Number); // домножение procedure DivideBy (n: Number); // деление procedure Assign (n: Number); // присваивание function AsString: String; // преобразование в строку constructor Create; // конструктор по умолчанию constructor CreateEqualTo(n: Number); // создание копии procedure SetNum(value: Integer); // изменяет числитель procedure SetDen(value: Integer); // изменяет знаменатель function GetNum: Integer; // возвращает числитель function GetDen: Integer; // возвращает знаменатель Реал из ац ия д анногокл ас с а гарант ирует ц ел ос тнос ть объект а и в оз - бужд ение ис кл ючения в с л учае, когд а коррект ное в ы пол нение операц ии нев оз м ожно(наприм ер, при д ел ении на нол ь ). Конс т руктор Create с оз д а- ет объект, пред с т ав л яющ ий нул ев ое чис л о, CreateEqualTo — копию з а- д анногообъект а. Бол ее под робны е с в ед ения окл ас с е Rational прив од ят с я в прил ожении 3. О пис ание кл ас с а Number с од ержит с я в прил ожении 2. Реш ение з ад ачи с нов а буд ем ос ущ ес т в л ят ь пут ем пос л ед ов ат ел ь - ны х ис прав л ений напис анного ранее код а. Причин, по которы м прихо- д ит с я эт и ис прав л ения произ в од ит ь , д в е. Во-перв ы х, объект ы в отл ичие от з апис ей яв л яют с я указ ат ел ям и, чтос оз д ает ряд д опол нит ел ь ны х про- бл ем , т аких, наприм ер, как яв ное раз м ещ ение в пам ят и и уд ал ение из нее. Во-в торы х, в нут ренняя реал из ац ия объект а пол нос т ь ю с кры т а от нас , и ес л и рань ше м ы м огл и в ы бират ь , ис пол ь з ов ат ь л и готов ы е под - 25
Страницы
- « первая
- ‹ предыдущая
- …
- 23
- 24
- 25
- 26
- 27
- …
- следующая ›
- последняя »