Динамические методы


В Паскале имеется дополнительный класс методов позднего связывания -динамические методы. Они являются подклассом виртуальных методов и от­личаются от них только способом вызова на этапе выполнения.

Объявление динамического метода аналогично виртуальному, за исключе­нием того, что оно должно включать индекс (номер) динамического метода, который указывается сразу за ключевым словом Virtual. Индекс динамиче­ского метода должен быть целочисленной константой в диапазоне от 1 до 65535 и представлять собой уникальное значение среди индексов других ди­намических методов данного объектного типа и его предков. Например:

Function GetSum: Real; Virtual 10; где - 10 - ИНДЕКС.

Переопределение динамического метода аналогично переопределению вир­туального. Оно должно включать слово Virtual, за которым следует тот же индекс, что и в переопределяемом динамическом методе предка.

Использование динамических методов целесообразно при создании длин­ной иерархии объектов с большим количеством виртуальных методов. Если не использовать динамические методы, для них создаются длинные таблицы виртуальных методов с указанием всех виртуальных методов-предков, хотя переопределяться может только часть из них. Это требует большого объема ОП.

При использовании динамических методов создается таблица динамиче­ских методов (ТДМ, DMT - Dynamic Method Table), альтернативная табли­це виртуальных методов. В ней указываются только те виртуальные методы, которые переопределяются. Это экономит ОП, но требуется время для поиска в DMT объектов-предков. Поэтому производительность DMT ниже, чем VMT, так как доступ к методу через VMT - простое извлечение адреса из таблицы, а доступ к методу через DMT может привести к более длительному поиску.

Выбор типа метода

Прежде чем разрабатывать программу с использованием ООП, надо разра­ботать иерархию типов. Определяя иерархию типов, надо собрать все общие атрибуты, в один тип-предок и позволить остальным типам иерархии наследо­вать все общие элементы этого типа.

При выборе типа метода, статического или виртуального, можно использо­вать следующее правило: если есть хотя бы малейшая вероятность того, что понадобится из метода предка вызов переопределенного метода потомка, це­лесообразно делать метод виртуальным.

Преимуществом использования виртуальных методов является то, что ти­пы объектов и методы можно определить в модуле и поставить пользователю модуль в виде TPU-файла. Для работы с объектами модуля надо знать содер­жимое только интерфейсной части модуля. Используя полиморфные объекты и виртуальные методы, пользователь TPU-файла может добавлять новые мето­ды к уже существующим.

Добавление новых функциональных характеристик в программу без моди­фикации ее исходного кода (текста) называют способностью к расширению. Это - результат наследования. Позднее связывание позволяет связать новые методы с существующими во время выполнения программы, требуя лишь не­большого увеличения ТВМ.

Не следует сомневаться в том, включать или не включать в объект метод, который может быть использован или не использован в конкретной програм­ме. Неиспользуемые методы не влияют ни на быстродействие программы, ни на размер ЕХЕ-файла: если они не используются, то они не включаются в него.

В общем случае рекомендуется делать методы виртуальными. Но они тре­буют ОП для ТВМ. Кроме того, каждый вызов виртуального метода проходит через ТВМ и требует для этого дополнительное время. Использование стати­ческих методов имеет смысл, если надо получить оптимальную эффектив­ность программы по скорости ее выполнения и использованию ОП. Статиче­ские методы вызываются непосредственно. Поэтому вызов статического мето­да более быстрый, чем вызов виртуального. Если в объекте нет виртуальных методов, в сегменте данных отсутствует ТВМ и программа будет работать бы­стрее. Однако в этом случае теряется вариант расширения возможностей на этапе выполнения программы, при позднем связывании.



Дата добавления: 2019-12-09; просмотров: 700;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.