Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Использование виртуальных конструкторов и ссылок на класс. Контроль принадлежности объекта классу.Содержание книги
Поиск на нашем сайте Конструкторы и деструкторы Конструктор — это метод, который вызывается только один раз в момент создания экземпляра объекта соответствующего класса. Конструктор считается методом класса (class procedure), что позволяет вызывать его, указывая не только имя объекта, но и имя класса. Для конструктора выделено специальное ключевое слово constructor. constructor CreateMyObject(MySize: Integer); Конструкторов у объекта может быть сколько угодно, однако создаваться объект может с помощью только одного из них. ') ПОДСКАЗКА В базовом классе TObjecl имеется готовый конструктор Create, который и рекомендуется использовать, если нет необходимости в конструкторах с особыми возможностями. В любом случае в реали- зации собственного конструктора желательно вызывать базовый конструктор Creole с помощью директивы inherited. Деструктор — это метод, который вызывается только один раз в момент уничтоже- ния экземпляра объекта соответствующего класса. Класс TObject имеет стандартный деструктор Destroy, Разрешается создавать неограниченное число деструкторов с помощью ключевого слова destructor: destructor MyDestructor; ПОДСКАЗКА Рекомендуется создавать в классе только один деструктор, а в его реализации вызывать деструктор Destroy базового класса TObject с помощью директивы inherited. Тип ≪класс≫ В Паскале имеется возможность объявлять новый тип, являющийся ссылкой на класс: type имя-класса - class of тип-класса; Например: type TMetaClass = class of TObject; Классы и объекты 95 Переменная, описанная как var MetaClass: TMetaClass; может хранить в себе объект любого класса, унаследованного oTTObject. Это позволяет записывать в подобные переменные объекты произвольных классов во время выпол- нения программы, не зная конкретных типов этих объектов. Например, если имеется стандартная подпрограмма обработки объектов, тип которых будет известен только в процессе работы приложения, то в качестве типа соответствующего параметра надо ука- зать тип, представляющий собой ссылку на класс. Тогда в момент вызова подпрограммы можно задавать объект, имеющий произвольный тип, унаследованный от TObject procedure UseObject(Obj: TMetaClass); UseObjectl TButton); UseObject(TEdit); Классы TButton и TEdit — стандартные классы Delphi, описывающие компоненты ≪кнопка≫- и ≪текстовое поле≫. Проверка типа объекта Так как в Паскале допускается применять объекты, тип которых на этапе компи- ляции не известен, то в языке должны быть и средства, позволяющие выполнять проверки типов таких объектов. Специальная операция Is (ключевое слово) позволяет проверить, соответствует ли тип объекта конкретному типу Паскаля. объект is тип В качестве типа должен указываться один из классов. Obj is TButton Это выражение возвращает значение логического типа (True, если тип объекта Obj соответствует типу, указанному в правой части, — TButton). Приведение типа объекта Если объект описан как ссылка на класс, то часто требуется применять этот объект как относящийся к конкретному типу, чтобы иметь доступ к его определенным полям и методам. Выполнить приведение к конкретному типу можно, применив операцию as: объект as класс Например, если в переменную MetaClass записан объект с типом TEdit, то получить доступ к полю Text класса TEdit можно с помощью следующей конструкции: (MetaClass as TEdit).Text:= 'содержимое1; Ссылки на классы Язык Delphi позволяет рассматривать классы объектов как своего рода объекты, которыми можно манипулировать в программе. Такая возможность рождает новое понятие — класс класса; его принято обозначать термином метакласс. Для поддержки метаклассов введен специальный тип данных — ссылка на класс (class reference). Он описывается с помощью словосочетания class of, например:
Переменная типа TTextReaderClass объявляется в программе обычным образом:
Значениями переменной ClassRef могут быть класс TTextReader и все порожденные от него классы. Допустимы следующие операторы:
По аналогии с тем, как для всех классов существует общий предок TObject, у ссылок на классы существует базовый тип TClass, определенный, как:
Переменная типа TClass может ссылаться на любой класс. Практическая ценность ссылок на классы состоит в возможности создавать программные модули, работающие с любыми классами объектов, даже теми, которые еще не разработаны. Физический смысл и взаимосвязь таких понятий, как переменная-объект, экземпляр объекта в памяти, переменная-класс и экземпляр класса в памяти поясняет рисунок 3.4.
Виртуальные конструкторы Особые возможности ссылок на классы проявляется в сочетании с виртуальными конструкторами. Виртуальный конструктор объявляется с ключевым словом virtual. Вызов виртуального конструктора происходит по фактическому значению ссылки на класс, а не по ее формальному типу. Это позволяет создавать объекты, классы которых неизвестны на этапе компиляции. Механизм виртуальных конструкторов применяется в среде Delphi при восстановлении компонентов формы из файла. Восстановление компонента происходит следующим образом. Из файла считывается имя класса. По этому имени отыскивается ссылка на класс (метакласс). У метакласса вызывается виртуальный конструктор, который создает объект нужного класса.
На этом закончим изучение теории объектно-ориентированного программирования и в качестве практики рассмотрим несколько широко используемых инструментальных классов среды Delphi. Разберитесь с их назначением и работой. Это поможет глубже понять ООП и пригодится на будущее.
|
||||||||||||
|
Последнее изменение этой страницы: 2017-02-21; просмотров: 338; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.006 с.) |