ВУЗ:
Составители:
Рубрика:
108
 {переместить центр окружности       } 
                                               { в координаты NewX, NewY              } 
end; 
Метод "Показать"  в  классах "Окружность"  и "Точка"  называется 
одинаково – 
Show,  но  реализуется  в  каждом  классе  по-своему.  В 
классе "Окружность" метод 
Show рисует окружность, в классе "Точ-
ка" – точку (аналогично и для метода "Спрятать" – 
Hide). 
Код метода 
MoveTo для класса "Окружность" (Circle.MoveTo): 
   Hide; 
   x := NewX; 
   y := NewY; 
   Show; 
полностью совпадает с кодом метода MoveTo класса "Точка". Зачем 
же писать одно и то же  дважды?! Может быть, лучше в классе "Ок-
ружность"  наследовать  этот  метод  из  класса "Точка"?  Будет  ли  в 
этом  случае  вызов  объектом  класса "Окружность"  метода 
MoveTo 
(
наследуемого из класса "Точка") приводить к перемещению окруж-
ности,  а  не  точки?  Будет,  если  мы  используем  такое  свойство  объ-
ектно-ориентированной разработки, как 
полиморфизм. 
В  языке Pascal полиморфизм
  реализуется  с  помощью  виртуаль-
ных методов
. Для использования полиморфизма необходимо выпол-
нить следующие действия: 
  для  инициализации  объекта  класса  использовать  специальную 
процедуру 
Конструктор (constructor).  
При  вызове  конструктора  создается 
Таблица  виртуальных  мето-
дов
 (VMT), одна для конкретного класса. Эта таблица содержит ука-
затели на код реализации методов данного класса. Когда в программе 
вызывается 
виртуальный  метод,  то  осуществляется  обращение  к 
Таблице  виртуальных  методов  того  класса,  объект  которого  в  дан-
ный  момент  является  активным.  Затем  по  указателю  таблицы  нахо-
дится  соответствующий  код  реализации  вызванного  метода  и  ему 
передается управление; 
  одноименные  в  разных  классах  методы (в  нашем  случае  это 
Show и Hide) описать как виртуальные (virtual).  
                             {переместить центр окружности      }
                             { в координаты NewX, NewY          }
  end;
   Метод "Показать" в классах "Окружность" и "Точка" называется
одинаково – Show, но реализуется в каждом классе по-своему. В
классе "Окружность" метод Show рисует окружность, в классе "Точ-
ка" – точку (аналогично и для метода "Спрятать" – Hide).
   Код метода MoveTo для класса "Окружность" (Circle.MoveTo):
    Hide;
    x := NewX;
    y := NewY;
    Show;
полностью совпадает с кодом метода MoveTo класса "Точка". Зачем
же писать одно и то же дважды?! Может быть, лучше в классе "Ок-
ружность" наследовать этот метод из класса "Точка"? Будет ли в
этом случае вызов объектом класса "Окружность" метода MoveTo
(наследуемого из класса "Точка") приводить к перемещению окруж-
ности, а не точки? Будет, если мы используем такое свойство объ-
ектно-ориентированной разработки, как полиморфизм.
   В языке Pascal полиморфизм реализуется с помощью виртуаль-
ных методов. Для использования полиморфизма необходимо выпол-
нить следующие действия:
    для инициализации объекта класса использовать специальную
процедуру Конструктор (constructor).
   При вызове конструктора создается Таблица виртуальных мето-
дов (VMT), одна для конкретного класса. Эта таблица содержит ука-
затели на код реализации методов данного класса. Когда в программе
вызывается виртуальный метод, то осуществляется обращение к
Таблице виртуальных методов того класса, объект которого в дан-
ный момент является активным. Затем по указателю таблицы нахо-
дится соответствующий код реализации вызванного метода и ему
передается управление;
    одноименные в разных классах методы (в нашем случае это
Show и Hide) описать как виртуальные (virtual).
                               108
Страницы
- « первая
 - ‹ предыдущая
 - …
 - 107
 - 108
 - 109
 - 110
 - 111
 - …
 - следующая ›
 - последняя »
 
