Kest
DELPHI содержит сложную иерархию классов, которые можно использовать в программе, создавая объекты этих классов или формируя-классы потомки. В начале этой иерархии стоят классы, называемые абстрактными классами. Для них нельзя создать полноценные работающие объекты, но они являются родоначальниками целых семейств классов, для которых такие объекты уже могут быть созданы. Исходя из свойства наследования, в абстрактных классах помещены характеристики, присущие всем классам их семейств.
Структура некоторых абстрактных классов, находящихся в начале иерархии классов, приведена на рисунке.10
Класс TObject является предком всех других классов, используемых в DELPHI. Он включает в себя характеристики, свойственные всем используемым классам. Некоторые методы класса TObject могут использоваться без создания соответствующих объектов с учетом того, что реального объекта такого класса может и не быть. Эти методы позволяют получить общие характеристики класса - адрес таблицы, содержащей характеристики класса, имя класса, имя предка класса, характеристики методов и т. д. Примеры некоторых методов класса TObject:
• ClassName - функция класса (типа ShortString) формирует строку, содержащую имя класса, данное ему при создании;
• ClassParent - функция, определяющая класс непосредственного предка данного класса;
• ClassType - функция возвращает класс конкретного объекта;
• InstanceSize - функция (типа Longint) возвращает размер класса или объекта в байтах;
• FieldAddress(Name) - функция типа Pointer возвращает адрес поля объекта с именем Name типа ShortString.
Класс TPersistent (Постоянный) является потомком класса TObject и предком всех классов, объекты которых могут быть помещены в память и взяты из памяти. Основными потомками класса TPersistent являются классы TComponent (Компонента) - предок всех компонент проекта; TStrings (Строки) - предок всех списков строк; TCollection (Коллекция) - коллекция (список) элементов; TGraphicObject (Графический объект), TCanvas (Канва - основа для рисования), TGraphic (Графический элемент), TPicture (Изображение) - классы, образующие так называемый графический инструментарий DELPHI.
Класс TControl является родоначальником всех элементов управления, с помощью которых выводится информация на экран и с помощью которых можно вводить информацию в программу, используя клавиатуру и мышь. Его потомок класс TWinControl служит для создания окон Windows. Класс TGraphicControl отличается от класса TWinControl отсутствием у объектов его семейства оконной функции, в связи с чем такие элементы либо служат для вывода на экран информации, либо являются чисто декоративными.
Методы базового класса Tobject, как отмечалось выше, позволяют легко получать информацию о характеристиках созданного класса и его потомках.
В Object Pascal можно задавать указатель на класс, называемый метаклассом. Для этого в объявлении записываются ключевые слова class of, после чего указывается имя класса, ссылка на который формируется:
type
<имя типа>=class of <базовый класс>;
Примером может быть следующее описание:
type
TControlClass= class of TControl;
Этот тип является стандартным в DELPHI и именно так он определяется в модуле Controls. Введя такой тип данных, далее можно задавать переменные этого типа, например:
var ControlClass: TControlClass;
Значениями такой переменной могут быть классы, входящие в семейство исходного класса TControl: сам класс TControl, класс TForm, класс TButton и т. д. Таким образом, метакласс может быть указателем на любой класс, входящий в семейство исходного класса.Введение метаклассов удобно для создания универсальных подпрограмм, которые могут работать с объектами из целого семейства классов, причем заранее неизвестно, какой из этих объектов будет использоваться. В ряде случаев это существенно упрощает создаваемую программу.
Сноски:
10 Всю объектную базу DELPHI можно просмотреть в окне Browse Objects командой системы программирования View/Browser после компиляции проекта.