Объектно-ориентированное программирование Несколько
лет назад книгу по Delphi 2 или 3 надо было начинать с азов объектно-ориентированного
программирования (ООП). Многие только переходили к Delphi из DOS, многие использовали
Borland Pascal for Windows и работали с Windows API напрямую. Объекты еще были
в диковинку, и полное разъяснение новых принципов было просто обязательно.
Объект
и класс Классом в Object Pascal называется структура языка, которая может
иметь в своем составе переменные, функции и процедуры. Переменные в зависимости
от предназначения именуются полями или свойствами
Поля,
свойства и методы Поля класса являются переменными, объявленными внутри класса.
Они предназначены для хранения данных во время работы экземпляра класса (объекта).
События Программистам, давно работающим в
Windows, наверное, не нужно пояснять смысл термина "событие". Сама эта
среда и написанные для нее программы управляются событиями, возникающими в результате
воздействий пользователя, аппаратуры компьютера или других программ.
Инкапсуляция
В предыдущих разделах мы ввели ряд новых понятий, которыми будем пользоваться
в дальнейшем. Теперь поговорим о принципах, составляющих суть объектно-ориентированного
программирования. Таких принципов три — инкапсуляция, наследование и полиморфизм.
Наследование Вторым "столпом" ООП
является наследование. Этот простой принцип означает, что если вы хотите создать
новый класс, лишь немного отличающийся от старого, то совершенно нет необходимости
в переписывании заново уже существующих полей и методов.
Полиморфизм Рассмотрим внимательно следующий пример. Пусть у нас имеются некое
обобщенное поле для хранения данных — класс TFieid и три его потомка — для хранения
строк, целых и вещественных чисел
Методы Из
предыдущего материала читатели узнали, что функционирование объектов обеспечивается
различными типами методов, которые различаются особенностями реализации механизма
наследования.
Перегрузка методов Эту категорию
методов нельзя назвать антагонистом двух предыдущих: и статические, и виртуальные,
и динамические методы могут быть перегружаемыми. Перегрузка методов нужна, чтобы
произвести одинаковые или похожие действия с разнотипными данными.
Области
видимости При описании нового класса важен разумный компромисс. С одной стороны,
требуется скрыть от других методы и поля, представляющие собой внутреннее устройство
класса (для этого и придуманы свойства).
Объект
изнутри Теперь, когда мы разобрались с основными определениями и механизмами
ООП, настало время более подробно изучить, что представляет собой объект и как
он работает.
Библиотека визуальных компонентов VCL и ее базовые классы
Все классы библиотеки визуальных компонентов
произошли от группы базовых классов, которые лежат в основе иерархии VCL. Самый
общий предок компонентов — это класс TObject, инкапсулирующий простейший объект.
Как известно (см. гл. 1), каждый объект наследует свойства и методы родительского
класса. К объекту можно добавить новые свойства и методы, но нельзя удалить унаследованные.
Объект-наследник в свою очередь может стать родительским для нового класса, который
унаследует возможности всех своих предков.
Иерархия
базовых классов В основе всего многообразия классов и компонентов, используемых
в Delphi, лежат всего лишь пять базовых классов. Они обеспечивают выполнение основных
функций любого объекта — будь это стандартный компонент VCL или специализированный
объект, выполняющий некоторые операции в приложении.
Класс
TObject является родоначальником всей иерархии использующихся в Delphi классов
VCL. Он реализует функции, которые обязательно будет выполнять любой объект, который
может быть создан в среде разработки.
Класс
TPersistent Этот важнейший метод осуществляет копирование содержимого одного
объекта (source) в другой (self, т. е. в объект, вызвавший метод Assign). При
этом объект-получатель остается самим собой, чего нельзя достигнуть, используя
простое присваивание переменных объектного типа
Класс
TCompomnt является предком всех компонентов VCL. Он используется в качестве
основы для создания невизуальных компонентов и реализует основные механизмы, которые
обеспечивают функционирование любого компонента. В нем появляются первые свойства,
которые отображаются в Инспекторе объектов.
Базовые
классы элементов управления Вслед за классом TComponent в иерархии базовых
классов располагается группа из трех классов, которые обеспечивают создание различных
визуальных компонентов. Визуальные компоненты — это разнообразные стандартные
для Windows и специальные (созданные разработчиками Inprise) элементы управления.
Класс TControl является базовым для
всех визуальных компонентов и инкапсулирует механизмы отображения компонента на
экране.
Группа свойств Visual.
Местоположение и размер элемента управления Для определения местоположения и размеров
визуального компонента введены два опубликованных свойства для задания координат
левого верхнего угла
Выравнивание элемента
управления При значении alNone выравнивание отсутствует. При следующих четырех
значениях выравнивание осуществляется по соответствующей стороне. Значение alclient
приводит к тому, что элемент управления изменяет свои размеры до размеров рабочей
области владельца.
Внешний вид элемента
управления Набор свойств и методов класса TwinControl обеспечивает функционирование
механизма перетаскивания (Drag-and-Drop) и механизма присоединения (Drag-and-Dock).
Связь с родительским элементом управления
Механизм связывания визуального компонента с родительским компонентом (владельцем)
позволяет автоматически задавать для нового элемента управления некоторые свойства,
отвечающие за его внешний вид
Класс
TWinControl обеспечивает создание и использование оконных элементов управления
(см. выше). Напомним, что оконный элемент управления имеет системный дескриптор
окна hwnd. Однако оконными элементами являются не только формы и диалоги, но и
большинство стандартных элементов управления.
Класс
TCustomControl предназначен для создания на его основе нестандартных оконных
элементов управления. Процесс визуализации в нем упрощен за счет использования
специального класса TCanvas, инкапсулирующего канву
Класс
TGraphicControl предназначен для создания на его основе визуальных компонентов,
не получающих фокус в процессе выполнения приложения.