Объектно-ориентированное программирование


Объектно-ориентированное программирование - стр. 102


Если объект  корня иерархии имеет VMT, то VMT - связь будет первым словом части данных каждого объекта в иерархии. Tobject, корень иерархии OWL, имеет виртуальный метод, поэтому у всех OWL - объектов в этой позиции находится VMT - связь. Полезно узнать, где находится эта связь, и это необходимо сделать в первую очередь, если вы  хотите сохранить объект в потомке.

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

   

ОГРАНИЧЕНИЯ   ПОЛИМОРФИЗМА

 

В языке SmallTalk  от объекта к объекту можно отправить  запрос на реакцию на вызов любого метода. Объект просматривает список своих методов, проверяя их совпадение с вызванным методом, и если такое совпадение происходит, объект активизирует данный метод. Этот процесс намного медленнее, чем методика VMT или динамический диспетчер сообщений, но зато он многое прощает. В Турбо Паскале нельзя осуществить полиморфный вызов метода, который не определен в заданном объектном типе: компилятор не разрешает этого. Например, обычной практикой является создание связанного списка объектов, содержащего указатели на базовый объект. Этот список может реально содержать любой объект, являющийся потомком базового объекта. Если вы заполнили такой список указателями на различные оконные объекты, описанные в заголовке программы, то можете при желании вызвать любой метод, например, Draw, для каждого элемента. Перед вами стоит проблема - поскольку в базовом объекте нет элемента Draw. Одним из решений является приведение полиморфного объекта к типу первого потомка, в котором определен необходимый метод.


Начало  Назад  Вперед



Книжный магазин