Абстрактные методы.
В классе метод может быть объявлен абстрактным с помощью директивы abstract.
Абстрактными называются методы, которые определены в классе, но не содержат никаких действий, никогда не вызываются и обязательно должны быть переопределены в потомках класса. Абстрактными могут быть виртуальные и динамические методы.
В рассмотренном выше ПРИМЕРЕ 1 можно рассмотреть, для чего нужно использование абстрактных методов. Классы, содержащие абстрактные методы, называются абстрактными. Такие классы инкапсулируют общие свойства своих неабстрактных потомков, но объекты абстрактных классов никогда не создаются и не используются. Их абстрактные методы не описываются. Для эксплуатации абстрактных классов в библиотеку классов Delphi включаются классы – потомки, в которых перекрываются абстрактные методы родителя. Таким способом абстрактные классы и абстрактные методы инкапсулируют доступ к методам потомков.
В ПРИМЕРЕ 1 класс TField не используется сам по себе, его абстрактный метод GetData не описывается (не имеет кода). Основное предназначение класса TField – быть родоначальником иерархии конкретных классов-потомков и дать возможность абстрагироваться от частности. Для описания абстрактных методов служит директива abstract, которая записывается после директивы virtual или dynamic.
Таблицы виртуальных и динамических методов – VMT и DMT.
Рассмотрим снова ПРИМЕР 1. Ясно, что у компилятора нет возможности определить класс объекта, фактически переданного в процедуру Show. Нужен механизм для определения класса объекта фактически переданного в процедуру Show, который позволяет определить это прямо во время выполнения программы. Это называется поздним связыванием. В качестве такого механизма служат таблицы VMT и DMT.
Когда компилятор встречает обращение к виртуальному методу, он подставляет вместо прямого вызова по конкретному адресу код, который обращается к VMT и извлекает оттуда нужный адрес. Таблица VMT есть у каждого класса. В ней хранятся адреса всех виртуальных методов класса: и унаследованных от предков, и перекрытых в данном классе.
Отсюда достоинства и недостатки виртуальных методов. Они вызываются сравнительно быстро, однако, для хранения указателей на них в таблице VMT требуется большой объем памяти.
Разница между DMT и VMT механизмами состоит в том, что таблица DMT содержит адреса только тех методов, которые объявлены и перекрыты как dynamic в данном классе. В то время как VMT содержит адреса виртуальных методов не только данного класса, но и всех его предков, независимо от того, унаследованы ли они от предков или перекрыты в данном классе.
Значит бьльшая по размеру таблица VMT обеспечит более быстрый поиск. В то время как при обращении к динамическому методу программа сначала рассмотрит DMT у объекта, а затем, в случае неудачи, у всех классов – предков в порядке иерархии, пока не найдет нужную точку входа.
Итак, динамические методы вызываются медленнее виртуальных, но позволяют экономить память компьютера.
- Объектно-ориентированный анализ
- Объектно-ориентированное программирование.
- Объектно-ориентированное проектирование.
- Основные понятия объектно-ориентированного проектирования.
- Классы и объекты в Object Pascal.
- Важнейшие принципы объектно-ориентированного программирования.
- Составляющие класса.
- Объекты
- Создание и уничтожение объектов.
- Наследование конструкторов и деструкторов.
- Свойства и инкапсуляция.
- Статические методы.
- Полиморфизм. Виртуальные и динамические методы.
- Абстрактные методы.
- Перекрытие виртуальных и динамических методов.
- Как устроен объект изнутри
- Перезагрузка методов.
- Задача с использованием полиморфизма
- Области видимости.
- Создание класса комплексных чисел.
- Создание класса векторов
- Объект-список
- Модуль по работе со списками
- Основная программа по работе с объектами-списками
- Система программирования Delphi
- Терминология Delphi.
- Первые шаги визуального программирования в среде Delphi.
- Иерархия компонентов.
- Собственники компонентов
- Элементы управления.
- Компоненты (tComponent)
- Оконные не оконные
- Родительские и дочерние компоненты.
- Объектно-событийное программирование. События
- Реакции на события
- Программирование реакции на событие
- Особенности реализации событий
- Делегирование событий
- Виды событий
- Диалоги. Работа с файлами. Открытие и закрытие файлов с использованием стандартных диалоговых окон.
- TOpenDialog и tSaveDialog – диалоги открытия и сохранения файлов (страница dialogs )
- Компонент класса tform
- Создание и использование форм
- Шаблоны форм
- Программы со многими формами
- Модульный принцип построения программ.
- Программные файлы. Основные типы файлов проекта. Простейшее приложение.
- Структура головного файла проекта.