Введение в объектно-ориентированное программирование на языке Object Pascal. Соколов Е.В. - 51 стр.

UptoLike

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

51
При умножении строки матрицы m1 на столбец матрицы m2 м етод Dot
создает n новых объектов класса Rational, из которых лишь один испол ь -
зуется как элемент результирующей матрицы . Остальные, после добавле-
ния содержащихся в них значений, должны быть удалены путем явного
вызова деструктора.
3.5. Абстрактные методы и классы
Отметим , что в подпрограммах из модуля UnitAlgorithms испол ь -
зуются лишь методы класса Rational, осуществляющие арифметические
операции. Это не случайно: для реализации основных алгоритмов л и -
нейной алгебры вполне достаточно, чтобы элементы матриц принад ле-
жали некоторому кольцу, т. е. абстрактному множеству с операциями
сложения, вычитания и умножения.
Учитывая данное замечание, постараемся несколько увеличить
область применения функций AddMatrix и MultiplyMatrix. Для этого нам
достаточно будет сделать две вещи: добавить в основу имеющейся ие-
рархии наследования новый класс, скажем Number, для представления
элементов произвольного кольца и модифицировать модуль UnitAlgo-
rithms таким образом, чтобы он использовал только объекты данного
класса.
Интерфейс класса Number особых вопросов не вызывает : для
реализ ации наших примеров достаточно будет включить в него все те же
восемь операторов , изменив типы их параметров и возвращаемых зна-
чений на Number. Наличие в классе, представляющем кольцо, методов
для осуществления дел ения выглядит несколько странным. Однако, как
показывает рассмотренный выше пример класса PAryFraction, частич-
ный характер этой операции всегда может быть выражен при помощи
исключений.
Проблемы возникают в связи с реализацией методов класса Num-
ber. С одной стороны , очевидно, что никаких содержательных действий
они выполнять не могут. С другой синтаксис известной нам к на-
стоящему моменту части языка требует, чтобы все методы класса были
как-то определены .
Самым простым выходом из этой ситуации является использов а -
ние «з аглушек» , т. е. подпрограмм, тело которых представляет собой
пустой блок begin end. Недостаток данного решения заключается в том ,
что программист, раз рабатывающий производный класс, может просто
забыть переоп ределить некоторые из них, заложив, тем самым, в про-
грамму потенциальные ошибки.
При ум ножении с т роки м ат рицы m1 на с тол бец м ат рицы m2 м етод Dot
с оз д ает n нов ы хобъектов кл ас с а Rational, из которы хл иш ь од ин ис пол ь -
з ует с я как эл ем ент рез ул ьт ирующей м ат рицы . Ос т ал ь ны е, пос л е д обав л е-
ния с од ержащихся в нихз начений, д ол жны бы ть уд ал ены пут ем яв ного
в ы з ов а д ес т руктора.

                     3.5. А б страктны е методы и классы

         От м ет им , что в под програм м ахиз м од ул я UnitAlgorithms ис пол ь -
з уют с я л иш ь м етод ы кл ас с а Rational, ос ущес т в л яющие арифм ет ичес кие
операции. Э то не с л учайно: д л я реал из ации ос нов ны хал горит м ов л и-
нейной ал гебры в пол не д ос т аточно, чтобы эл ем ент ы м ат риц принад л е-
жал и некотором у кол ь цу, т. е. абс т ракт ном у м ножес т в у с операциям и
с л ожения, в ы чит ания и ум ножения.
         Учит ы в ая д анное з ам ечание, пос т араем с я нес кол ь ко ув ел ичит ь
обл ас т ь прим енения функций AddMatrix и MultiplyMatrix. Дл я э того нам
д ос т аточнобуд ет с д ел ат ь д в е в ещи: д обав ит ь в ос нов у им еющейс я ие-
рархии нас л ед ов ания нов ы й кл ас с , с кажем Number, д л я пред с т ав л ения
эл ем ентов произ в ол ь ного кол ь ца и м од ифициров ат ь м од ул ь UnitAlgo-
rithms т аким образ ом , чтобы он ис пол ь з ов ал тол ь ко объект ы д анного
кл ас с а.
         И нт ерфейс кл ас с а Number ос обы х в опрос ов не в ы з ы в ает : д л я
реал из ации наш ихприм еров д ос т аточнобуд ет в кл ючит ь в негов с е т е же
в ос ем ь операторов , из м енив т ипы ихпарам ет ров и в оз в ращаем ы хз на-
чений на Number. Н ал ичие в кл ас с е, пред с т ав л яющем кол ь цо, м етод ов
д л я ос ущес т в л ения д ел ения в ы гл яд ит нес кол ь кос т ранны м . Од нако, как
показ ы в ает рас с м от ренны й в ы ш е прим ер кл ас с а PAryFraction, час т ич-
ны й характ ер э той операции в с егд а м ожет бы т ь в ы ражен при пом ощи
ис кл ючений.
         Пробл ем ы в оз никают в с в яз и с реал из ацией м етод ов кл ас с а Num-
ber. С од ной с тороны , очев ид но, чтоникакихс од ержат ел ь ны хд ейс т в ий
они в ы пол нят ь не м огут. С д ругой — с инт акс ис из в ес т ной нам к на-
с тоящем у м ом ент у час т и яз ы ка т ребует, чтобы в с е м ет од ы кл ас с а бы л и
как-тоопред ел ены .
         Сам ы м прос т ы м в ы ход ом из э той с ит уации яв л яет с я ис пол ь з ов а-
ние «з агл уш ек» , т. е. под програм м , т ел о которы х пред с т ав л яет с обой
пус той бл ок begin end. Н ед ос т аток д анногореш ения з акл ючает с я в том ,
что програм м ис т, раз рабат ы в ающий произ в од ны й кл ас с , м ожет прос то
з абы т ь переопред ел ит ь некоторы е из них, з ал ожив , т ем с ам ы м , в про-
грам м у пот енциал ь ны е ош ибки.

                                          51