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

UptoLike

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

42
граммирование отличается от объектного , где тип каждой переменной
однозначно определен на этапе разработки.
Рис . 3.2.
Из сказанного выше становится понятно, почему объектная пере-
менная содержит не сам объект, а лишь ссылку на него. В противном слу-
чае ее размер определялся бы классом , указанным при объявлении, и раз -
местить в этой области памяти экземпляр произвольного клас са-потом ка,
не выполняя никаких преобразований, было бы скорее всего н евозможно.
3.3. Определение типа объекта во время выполнения
Вернемся теперь снова к нашему примеру.
Мы выяснили, что уточнить операторы в классе PAryFraction мож -
но, просто переопределив соответствующие методы без изменения их
объявлений. Опишем подробно, как они теперь должны выполнят ь ся.
Если передаваемый в качестве параметра r объект в действител ь -
ности принадлежит классу PAryFraction (или одному из его наследни-
ков ), нам прежде всего необходимо убедиться в том , что он и текущий
объект имеют одно основание. В случае деления следует проверить так-
же, является ли числитель r степенью поля base. Если и то, и другое
верно, операция выполнима и результат ее им еет тип PAryFraction, иначе
ситуация оказывается неоднозначной и единственный выход сгене-
рировать исключение.
Предположим теперь , что тип объекта r не принадлежит поддере-
ву, порождаемому в иерархии наследования классом PAryFraction. В
этом случае мы не располагаем никакой информацией об r за исключе-
нием той , которую дает класс Rational, поэтому и результатом вычисле-
ний оказывается объект класса Rational. Данная ситуация недопустима
для операторов с присвоением , поскольку они сохраняют полученное
число в текущем объекте, а представить произвольное рациональное
Ад р е с у е м ы й
объ е к т
поле num
поле den
поле base
Ссылка на объект
класса Rational
Объект кл ас с а
PAryFraction
грам м иров ание отл ичает с я от объе ктн ог о, гд е т ип кажд ой перем енной
од ноз начноопред ел ен на э т апе раз работ ки.
            Сс ы л ка на объект
             кл ас с а Rational




                                                                                             Ад рес уем ы й
                                                                                пол е num




                                              Объект кл ас с а




                                                                                                объект
                                                                 PAryFraction
                                                                                пол е den

                                                                                пол е base

                                         Рис . 3.2.
              И з с каз анногов ы ш е с т анов ит с я понятно, почем у объект ная пере-
   м енная с од ержит не с ам объект, а л иш ь с с ы л ку на него. В против ном с л у-
   чае ее раз м ер опред ел ял с я бы кл ас с ом , указ анны м при объяв л ении, и раз -
   м ес т ит ь в этой обл ас ти пам ят и экз ем пл яр произ в ол ь ногокл ас с а-потом ка,
   не в ы пол няя никакихпреобраз ов аний, бы л обы с корее в с егонев оз м ожно.

          3.3. О п ределение тип а о б ъекта во времявы п о лнения

        Вернем с я т еперь с нов а к наш ем у прим еру.
        М ы в ы яс нил и, чтоуточнит ь операторы в кл ас с е PAryFraction м ож-
но, прос то переопред ел ив с оот в ет с т в ующие м етод ы без из м енения их
объяв л ений. Опиш ем под робно, как они т еперь д ол жны в ы пол нят ь с я.
        Е с л и перед ав аем ы й в качес т в е парам ет ра r объект в д ейс т в ит ел ь -
нос т и принад л ежит кл ас с у PAryFraction (ил и од ном у из его нас л ед ни-
ков ), нам прежд е в с его необход им о убед ит ь с я в том , что он и т екущий
объект им еют од ноос нов ание. В с л учае д ел ения с л ед ует пров ерит ь т ак-
же, яв л яет с я л и чис л ит ел ь r с т епень ю пол я base. Е с л и и то, и д ругое
в ерно, операция в ы пол ним а и рез ул ьт ат ее им еет т ип PAryFraction, иначе
с ит уация оказ ы в ает с я неод ноз начной и ед инс т в енны й в ы ход — с гене-
риров ат ь ис кл ючение.
        Пред пол ожим т еперь , чтот ип объект а r не принад л ежит под д ере-
в у, порожд аем ом у в иерархии нас л ед ов ания кл ас с ом PAryFraction. В
э том с л учае м ы не рас пол агаем никакой информ ацией об r з а ис кл юче-
нием той, которую д ает кл ас с Rational, поэ том у и рез ул ьт атом в ы чис л е-
ний оказ ы в ает с я объект кл ас с а Rational. Данная с ит уация нед опус т им а
д л я операторов с прис в оением , пос кол ь ку они с охраняют пол ученное
чис л о в т екущем объект е, а пред с т ав ит ь произ в ол ь ное рационал ь ное


                                            42