КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Особенности архитектуры программ
Информация о классе Области видимости Правила работы с областями видимости во многом аналогичны С++. В классе можно выделить 4 секции: · public – открытые эл-ты · prived – закрытые члены · published – св-ва которые должны быть видны в инспекторе объектов · protected – эл-ты могут изменяться в наследниках, но не доступны пользователю Информация о классе храниться в спец. структуре данных – RTTI. Эта структура хранит всю информацию о классе все экземпляры объекта класса используют одну RTTI. VMT – таблица виртуальных методов, DMT - динамических Указатель на класс + поля данных = экземпляр класса – объект. Информация хранящаяся в RTTI может использоваться как явно так и не явно. Лучшее использование RTTI неявное, для этого служат 2 оператора: is – проверят принадлежность экземпляра класса: O1 is TO1 – проверка, является ли O1 экземпляром TO1 или его наследником. Возвращает значение типа bool. as – оператор приведения типов: with O1 as TO1 do … – O1 рассматривается как объект типа TO1, но может быть объектом любого класса наследников TO1. В Delphi обработчики событий являются наследниками типа TObject (т.е. Sender: TObject). Явное использование RTTI возможно если в программе использовать структуру RTTI и используется специальный тип переменной – указатель на класс, который объявляется следующим образом. type TO1 = class … end; TO1 Class = class of TO1 Такой подход не рекомендуется использовать. Вместо прямого обращения к RTTI рекомендуется использовать спец. методы класса. Под методом класса понимают особую разновидность метода, который может вызываться из экземпляра класса. Эти методы предназначены для работы с RTTI. Объявляются эти методы в программе: type TO1 = class … class function GetName; Класс TObject содержит все практически методы: 1) Create – создание конструктора 2) ClassName – метод который возвращает значение строковой переменной – имя класса Пример применения указателей на класс: type TMyObject = class(TObject) … end; //указатель на родительский класс TMyObjClass = class of TObject; var //указатель на класс, получаем прямой доступ к RTTI AmyObjRef: TMyObjClass; begin AMyObjRef: TObject; writeln(AMyObject.ClassName); //TObject AMyObjRef:= TMyObject; writeln(AMyObject.ClassName); //TMyObject end; Как известно среда Windowsуправляется событием. Это накладывает отпечаток на среду программ. Среда традиционных ОС предполагает, что приложения имеют структуру управляемую данными, т.е. решение о передачи управления принимается на основе анализа внутренних данных и наз. структура программы управляемой данными. Среда Windows предполагает структуру управляемой событиями: 7.1 Обработчики сообщений Windows в Delphi Сообщение – информация о событии. Все визуальные компоненты среды Delphi имеют встроенные обработчики сообщений верхнего уровня, определённые в TObject. Обработчики сообщений – спец. методы представляющие собой набор динамических методов: type TMyControl = class(TWinControl) … procedure (var Message: TWMSize); message WM_SIZE; … end; Тип (TWMSize) и константа (WM_SIZE) определены в модуле MESSAGES. Визуальные компоненты – особые классы, имеющие визуальное представление в среде разработки (например TForm, TButton). Вместо явной обработки сообщений Windows вводятся в Delphi механизм событий. Рассмотрим пример, где показана обработка событий Delphi: Под событием понимается св-во процедурного типа. //Вводим процедурный тип type TMyEvent = procedure(Sender: TObject; …) of object; // это позволяет рассматривать этот процедурный тип // как процедурный тип метода объекта // Вводим иерархию 2-х классов T1stObject = class FOnMyEvent: TMyEvent; … property OnMyEvent: TMyEvent read FonMyEvent write FOnMyEvent; // OnMyEvent – св-во процедурного типа (событие) … end; // обработчик сообщений Windows procedure T1stObject.MyMessageHandler(var Message …); message WM_COMMAND; begin … if Assigned(FOnMyEvent) then FOnMyEvent, …); … inherited; // вызов унаследованного обработчика end; Процедура обработки сообщений вызвала некую процедуру через поле FOnMyEvent. Эта процедура является обработчиком событий Delphi. T2ndObject = class procedure SetValue1(Sender: TObject, …); procedure SetValue2(Sender: TObject, …); end; В этом класс событий Delphi. Адреса этих процедур могут присваиваться полю FOnMyEvent. … var Obj1: T1stObject; Obj2: T2stObject; … Obj1.OnMyEvent:= Obj2.SetValue1; Присвоение событию адрес метода – делегирование.
Дата добавления: 2014-01-07; Просмотров: 360; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |