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

UptoLike

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

49
ром классе C
k
он объявлен как виртуальный, а во всех классах C
i
, k
<
i
£
l,
(l
£
n) как замещающий. Тогда при вызове метода X применяется ди-
намическое связывание, лишь если формальный тип используемой объ -
ектной переменной принадлежит цепочке C
k
C
k
+
1
¼
C
l
.
Итак, для корректной работы нашего обобщенного алгоритма не-
обходимо дополнить интерфейс ы классов Rational и PAryFraction соот -
ветствующими директивами:
Rational = class
...
function Plus(r:Rational): Rational; virtual;
function Minus(r:Rational): Rational; virtual;
function Dot(r:Rational): Rational; virtual;
function Slash(r:Rational): Rational; virtual;
procedure Add(r:Rational); virtual;
procedure Subtract(r:Rational); virtual;
procedure MultiplyBy(r:Rational); virtual;
procedure DivideBy(r:Rational); virtual;
end;
PAryFraction = class(Rational)
...
function Plus(r:Rational): Rational; override;
function Minus(r:Rational): Rational; override;
function Dot(r:Rational): Rational; override;
function Slash(r:Rational): Rational; override;
procedure Add(r:Rational); override;
procedure Subtract(r:Rational); override;
procedure MultiplyBy(r:Rational); override;
procedure DivideBy(r:Rational); override;
end;
Теперь вызов той же самой демонстрационной программы из при-
м ера 3.4 приводит к желаемому результату: все элементы матрицы m3
оказываются объектами класса PAryFraction.
Заметим , что для включения механизма динамического связыва-
ния мы должны вносить изменения во все классы иерархии наследов а -
ния, содержащие интересующий нас метод . Поскол ьку эти классы могут
разрабатываться совершенно разными людьми, подобная модификация
не всегда осуществима. Почему же тогда все методы не объяв ляются
виртуальными автоматически?
Проблема заключается в снижении быстродействия при испол ь -
зовании алгоритма динамического связывания. Каждый вызов виртуал ь-
   ром кл ас с е Ck он объяв л ен как в иртуал ь ны й, а в ов с ехкл ас с ахCi, k < i £ l,
   (l £ n) — как з ам ещающий. Тогд а при в ы з ов е м етод а X прим еняет с я д и-
   нам ичес кое с в яз ы в ание, л иш ь ес л и форм ал ь ны й т ип ис пол ь з уем ой объ-
   ект ной перем енной принад л ежит цепочке Ck – Ck + 1 – ¼ – Cl.
           И т ак, д л я коррект ной работ ы наш егообобщенногоал горит м а не-
обход им о д опол нит ь инт ерфейс ы кл ас с ов Rational и PAryFraction с оот -
в ет с т в ующим и д ирект ив ам и:

Rational = class
...
  function Plus(r:Rational): Rational;                 virtual;
  function Minus(r:Rational): Rational;                virtual;
  function Dot(r:Rational): Rational;                  virtual;
  function Slash(r:Rational): Rational;                virtual;
  procedure Add(r:Rational);                           virtual;
  procedure Subtract(r:Rational);                      virtual;
  procedure MultiplyBy(r:Rational);                    virtual;
  procedure DivideBy(r:Rational);                      virtual;
end;

PAryFraction = class(Rational)
...
  function Plus(r:Rational): Rational;                 override;
  function Minus(r:Rational): Rational;                override;
  function Dot(r:Rational): Rational;                  override;
  function Slash(r:Rational): Rational;                override;
  procedure Add(r:Rational);                           override;
  procedure Subtract(r:Rational);                      override;
  procedure MultiplyBy(r:Rational);                    override;
  procedure DivideBy(r:Rational);                      override;
end;


        Т еперь в ы з ов той же с ам ой д ем онс т рационной програм м ы из при-
м ера 3.4 прив од ит к жел аем ом у рез ул ьт ату: в с е эл ем ент ы м ат рицы m3
оказ ы в ают с я объект ам и кл ас с а PAryFraction.
            Зам ет им , что д л я в кл ючения м еханиз м а д инам ичес кого с в яз ы в а-
   ния м ы д ол жны в нос ит ь из м енения в о в с е кл ас с ы иерархии нас л ед ов а-
   ния, с од ержащие инт ерес ующий нас м етод . Пос кол ь ку эт и кл ас с ы м огут
   раз рабат ы в ат ь с я с ов ерш енно раз ны м и л юд ь м и, под обная м од ификация
   не в с егд а ос ущес т в им а. Почем у же тогд а в с е м етод ы не объяв л яют с я
   в иртуал ь ны м и ав том ат ичес ки?
            Пробл ем а з акл ючает с я в с нижении бы с т род ейс т в ия при ис пол ь -
   з ов ании ал горит м а д инам ичес когос в яз ы в ания. Кажд ы й в ы з ов в ирт уал ь -


                                            49