ВУЗ:
Составители:
Рубрика:
60
зовать циклы, а они применимы лишь к массивам . Таким образом , оста-
навливаемся на этом варианте:
comp: array[1..3] of Real;
4. Рассуждения, приведенные в этом пункте решения задачи 2.1,
вполне годятся и для обоих наших клас сов . Следовательно, замещать
унаследованные конструктор и деструктор не нужно.
5. Реализация методов весьма проста и легко может быть выпол -
нена по аналогии с классом Rational. Единственная сложность вызвана
тем , что параметры замещающих методов формально имеют тип Number,
а не Whole или RGBColor, как в случае разработки классов «с нуля» . По-
этому мы вынуждены производить дополнительную проверку типа. Е с -
ли объект действительно принадлежит классу Whole или RGBColor, для
доступа к его содержимому потребуется явное приведение типа с пом о-
щью оператора as, в противном случае придется возбудить исключение.
Как и ранее, несколько иное поведение имеет метод IsEqual. Если реал ь-
ные типы параметра и текущего объекта не совпад ают, результат этого
метода определен и равен false.
Следует заметить, что описанная система правил является наибо-
лее простой и далеко не единственной . Во-первых, любое целое число
можно рассматривать как рациональное . Во-вторых, произвольное в е -
щественное число из отрезка [0, 1] задает оттенок серого цвета, все ком -
поненты которого равны данному числу. Таким образом , результат той
или иной операции можно вычислить и тогда, когда текущий объект и
параметр метода принадлежат разным классам . При этом следует учесть,
что некоторые операции по сути своей коммутативны , так что выпол -
няющие их методы в различных классах должны быть согласованы м е-
жду собой . Реализация данной схемы не является сейчас необх одимой и
оставляется читателю в качестве упражнения.
Возвращаясь к перечислению особенностей методов , отмет им сле-
дующее.
1) Для целых чисел деление выполнимо, лишь если делимое крат-
но делителю. Как обычно, частичный характер этой операции можно
выразить с помощью проверки на возможность выполнения действия и
возбуждения ис ключения.
2) Арифметические операции над цветами отличаются от вектор-
ных только тем , что каждая компонента результата должна быть упако-
вана в отрезок [ 0, 1]. Для выполнения насыщения вектора удобно ис -
пользовать вспомогательный метод :
procedure Clamp;
з ов ат ь ц икл ы , а они прим еним ы л ишь к м ас с ив ам . Т аким образ ом , ос т а-
нав л ив аем с я на этом в ариант е:
comp: array[1..3] of Real;
4. Рас с ужд ения, прив ед енны е в этом пункт е решения з ад ачи 2.1,
в пол не год ят с я и д л я обоих наших кл ас с ов . С л ед ов ат ел ь но, з ам ещ ат ь
унас л ед ов анны е конс т руктор и д ес т руктор не нужно.
5. Реал из ац ия м етод ов в ес ь м а прос т а и л егком ожет бы т ь в ы пол -
нена по анал огии с кл ас с ом Rational. Е д инс т в енная с л ожнос т ь в ы з в ана
т ем , чтопарам ет ры з ам ещ ающ их м етод ов форм ал ь ноим еют т ип Number,
а не Whole ил и RGBColor, как в с л учае раз работ ки кл ас с ов «с нул я» . По-
этом у м ы в ы нужд ены произ в од ит ь д опол нит ел ь ную пров ерку т ипа. Е с -
л и объект д ейс т в ит ел ь нопринад л ежит кл ас с у Whole ил и RGBColor, д л я
д ос т упа к егос од ержим ом у пот ребует с я яв ное прив ед ение т ипа с пом о-
щ ь ю оператора as, в прот ив ном с л учае прид ет с я в оз буд ит ь ис кл ючение.
Как и ранее, нес кол ь коиное пов ед ение им еет м етод IsEqual. Е с л и реал ь -
ны е т ипы парам ет ра и т екущ его объект а не с ов пад ают, рез ул ьт ат этого
м етод а опред ел ен и рав ен false.
С л ед ует з ам ет ит ь , чтоопис анная с ис т ем а прав ил яв л яет с я наибо-
л ее прос той и д ал еко не ед инс т в енной. Во-перв ы х, л юбое ц ел ое чис л о
м ожно рас с м ат рив ат ь как рац ионал ь ное. Во-в торы х, произ в ол ь ное в е-
щ ес т в енное чис л оиз от рез ка [0, 1] з ад ает от т енок с ерогоц в ет а, в с е ком -
понент ы которого рав ны д анном у чис л у. Т аким образ ом , рез ул ьт ат той
ил и иной операц ии м ожно в ы чис л ит ь и тогд а, когд а т екущ ий объект и
парам ет р м етод а принад л ежат раз ны м кл ас с ам . При этом с л ед ует учес т ь ,
что некоторы е операц ии по с ут и с в оей ком м ут ат ив ны , т ак что в ы пол -
няющ ие их м етод ы в раз л ичны х кл ас с ах д ол жны бы т ь с огл ас ов аны м е-
жд у с обой. Реал из ац ия д анной с хем ы не яв л яет с я с ейчас необход им ой и
ос т ав л яет с я чит ат ел ю в качес т в е упражнения.
Воз в ращ аяс ь к перечис л ению ос обеннос тей м етод ов , отм ет им с л е-
д ующ ее.
1) Дл я ц ел ы х чис ел д ел ение в ы пол ним о, л ишь ес л и д ел им ое крат -
но д ел ит ел ю. Как обы чно, час т ичны й характ ер этой операц ии м ожно
в ы раз ит ь с пом ощ ь ю пров ерки на в оз м ожнос т ь в ы пол нения д ейс т в ия и
в оз бужд ения ис кл ючения.
2) А рифм ет ичес кие операц ии над ц в ет ам и отл ичают с я от в ектор-
ны х тол ь кот ем , чтокажд ая ком понент а рез ул ь т ат а д ол жна бы т ь упако-
в ана в от рез ок [0, 1]. Дл я в ы пол нения нас ы щ ения в ектора уд обно ис -
пол ь з ов ат ь в с пом огат ел ь ны й м етод :
procedure Clamp;
60
Страницы
- « первая
- ‹ предыдущая
- …
- 58
- 59
- 60
- 61
- 62
- …
- следующая ›
- последняя »
