- •Объектно-ориентированный анализ
- •Объектно-ориентированное программирование.
- •Объектно-ориентированное проектирование.
- •Основные понятия объектно-ориентированного проектирования.
- •Классы и объекты в Object Pascal.
- •Важнейшие принципы объектно-ориентированного программирования.
- •Составляющие класса.
- •Объекты
- •Создание и уничтожение объектов.
- •Наследование конструкторов и деструкторов.
- •Свойства и инкапсуляция.
- •Статические методы.
- •Полиморфизм. Виртуальные и динамические методы.
- •Абстрактные методы.
- •Перекрытие виртуальных и динамических методов.
- •Как устроен объект изнутри
- •Перезагрузка методов.
- •Задача с использованием полиморфизма
- •Области видимости.
- •Создание класса комплексных чисел.
- •Создание класса векторов
- •Объект-список
- •Модуль по работе со списками
- •Основная программа по работе с объектами-списками
- •Система программирования Delphi
- •Терминология Delphi.
- •Первые шаги визуального программирования в среде Delphi.
- •Иерархия компонентов.
- •Собственники компонентов
- •Элементы управления.
- •Компоненты (tComponent)
- •Оконные не оконные
- •Родительские и дочерние компоненты.
- •Объектно-событийное программирование. События
- •Реакции на события
- •Программирование реакции на событие
- •Особенности реализации событий
- •Делегирование событий
- •Виды событий
- •Диалоги. Работа с файлами. Открытие и закрытие файлов с использованием стандартных диалоговых окон.
- •TOpenDialog и tSaveDialog – диалоги открытия и сохранения файлов (страница dialogs )
- •Компонент класса tform
- •Создание и использование форм
- •Шаблоны форм
- •Программы со многими формами
- •Модульный принцип построения программ.
- •Программные файлы. Основные типы файлов проекта. Простейшее приложение.
- •Структура головного файла проекта.
Абстрактные методы.
В классе метод может быть объявлен абстрактным с помощью директивы 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 у объекта, а затем, в случае неудачи, у всех классов – предков в порядке иерархии, пока не найдет нужную точку входа.
Итак, динамические методы вызываются медленнее виртуальных, но позволяют экономить память компьютера.