Четверг, 26.04.2018, 12:43
Главная Регистрация RSS
Приветствую Вас, Гость
Меню сайта
Ссылки
Статистика
Реклама
01
 
Реклама
Поиск
Друзья сайта
Работа, база вакансий и резюме  Белый каталог сайтов - RabOnline.ru/dir Результаты антивирусного сканирования
Реклама
01

Страница: 1 2 3 4 5 6 7

Жизненный цикл экземпляров классов.

Жизненный цикл экземпляра класса начинается с его создания с помощью вызова конструктора и дополнительных методов, причем эти методы вызываются автоматически в такой последовательности:

  • Newinstance — выделение памяти, использует InstanceSize для определения размера памяти.
  • Initinstance — очистка выделенной памяти и настройка таблицы виртуальных методов.
  • Версия конструктора Create, определенная в классе, из которого он вызывается.
  • AfterConstruction — только в случае безошибочного выполнения предыдущих методов.

Далее объект становится полноправной частью программы и может использоваться для работы с его свойствами и методами, но только, если в конструкторе не произошла исключительная ситуация, не обработанная самим конструктором. Если исключение вышло за пределы конструктора (не обработано в нем), то будет автоматически вызван деструктор данного класса для освобождения памяти, выделенной под объект.

В случае отсутствия необходимости дальнейшего существования экземпляра класса, его следует разрушить с помощью вызова метода Free. Если объект является экземпляром класса-наследника TComponent, и был создан таким образом, что имеет владельца, то его разрушение не обязательно и будет вызвано автоматически при разрушении владельца. Автоматическое разрушение производится аналогично — вызовом метода Free.

После вызова метода Free автоматически вызываются следующие методы:

  • BeforeDestruction — только в случае безошибочного создания данного экземпляра конструктором.
  • Версия деструктора Destroy, определенная в классе, из которого он вызывается.
  • Cleanuplnstance — для очистки памяти.
  • Freelnstance — для освобождения памяти, использует InstanceSize для определения размера памяти.

Механизм интерфейсов в Delphi.

Интерфейсы в Delphi аналогичны классам, не имеющим свойств, и все методы которых абстрактны. Для идентификации интерфейса, его описание может включать в себя указание глобального уникального идентификатора — GUID. Описание интерфейса выглядит следующим образом:

Туре

<Название интерфейса> = Interface(<Название родительского интерфейса>);

[ '{хххххххх-хххх-хххх-хххх-хххххххххххх}' ]

<3аголовок  метода 1>;

…………………………

<3аголовок метода N>;

end;

Механизм интерфейсов позволяет частично осуществлять множественное наследование, то есть создание класса на основе одного родительского класса и нескольких интерфейсов. Для этого стандартное описание класса расширено, и в его заголовке после родительского класса указывается список реализуемых интерфейсов:

Туре

<Название класса> = class (<Родительский класс>,

<Интерфейс 1>, ..., <Интерфейс N>);

<Свойства>

<3аголовки методов, описанные в интерфейсах>

<3аголовки  собственных методов>

<3аголовки  переопределенных методов родительского класса>

end;

Если в заголовке класса указаны интерфейсы, которые он реализует, то все методы этих интерфейсов должны быть либо описаны полностью, либо указаны в интерфейсной части описания класса, как абстрактные.

Интерфейсы IInterface и IUnknown.

Интерфейсы, так же как и классы, поддерживают наследование, то есть класс, реализующий некоторый интерфейс, должен описать все методы, заявленные и в нем самом, и заявленные в его родительском интерфейсе. Если интерфейс описывается без указания родительского интерфейса, то его родителем считается интерфейс IInterface. В данном интерфейсе описаны методы _AddRef и _Release, поддерживающие работу со ссылками на экземпляры классов, реализующих интерфейсы, и, фактически, обеспечивающие счетчик использования экземпляров класса. При первом обращении к интерфейсу (создании объекта, реализующего данный интерфейс) счетчик устанавливается на 1, далее, при последующих обращениях, увеличивается методом _AddRef, а при разрушении уменьшается методом _Release. Еще одна важная функция базового интерфейса IInterface — определение информации о других интерфейсах, реализуемых классом. Для объектов, которые необходимо использовать для реализации в программе технологии СОМ, используется другой базовый интерфейс, полностью совпадающий с IInterface по методам — IUnknown.

Возможности класса TPersistent.

Класс TPersistent инкапсулирует методы для поддержки переносимости информации из одного объекта в другой (методы Assign и AssignTo), а также для сохраняемости значений свойств объектов в файлы форм. Под сохраняемостью свойств экземпляров именно этого класса понимается возможность сохранения свойств объектов, не заявленных в секции published, в файлы форм и другие потоки данных. Такая возможность может потребоваться при создании компонентов, свойства которых ссылаются на другие компоненты, созданные во время выполнения программы или ее визуальной разработки.

Понятие компонента в Delphi.

Компоненты являются наследниками класса TComponent, имеющего следующие возможности:

Интеграция с IDE Delphi, то есть возможность находиться в Палитре компонентов IDE и участвовать в процессе визуального проектирования;

  • Поддержка свойства принадлежности, то есть управления другими компонентами;
  • Поддержка сохраняемости и восстанавливаемости, реализованная в классе TPersistent;
  • Поддержка технологии СОМ, то есть возможности экспорта компонентов в компоненты ActiveX или импорта компонентов ActiveX в компоненты Delphi.

Компоненты могут быть визуальными, то есть имеющими представление на экране во время работы приложения, не визуальными — не имеющими такого представления, и диалоговыми — не имеющими визуального представления, но выводящими отдельные окна для взаимодействия с пользователем. Визуальные компоненты являются наследниками класса TControl, не визуальные наследуются напрямую от класса TComponent, а диалоговые компоненты имеют в качестве родительского класса TCommonDialog.

Правила именования компонентов и автоматическое именование их средой разработчика.

Компоненты присутствуют в программе в виде экземпляров классов на формах, а также в виде ссылок на лих из классов форм. Поэтому правила именования компонентов должны соответствовать правилам именования идентификаторов в программах Delphi. При создании компонентов путем добавления их на форму из Палитры компонентов, Среда разработчика автоматически назначает им имена, состоящие из названия класса, экземпляром которого компонент является (без префикса Т), и его порядкового номера на данной форме. Название экземпляра компонента содержится в его published-свойстве Name, доступном для чтения и записи, однако изменение этого свойства во время выполнения программы приведет к невозможности дальнейшего использования компонента.

Разница между свойством принадлежности компонентов и свойством визуальной принадлежности.

Свойство принадлежности Owner описано в классе TComponent и указывает на объект, который несет ответственность за разрушение данного компонента. Такой механизм снимает необходимость прямого разрушения компонентов, созданных программой во время работы. Свойство визуальной принадлежности Parent описано в базовом классе визуальных компонентов TControl, и указывает, в каком компоненте находится визуальное представление данного компонента. Свойство принадлежности заполняется в конструкторе класса TComponent с помощью переданного параметра, AOwner, тогда как свойство визуальной принадлежности заносится прямым указанием из того фрагмента программы, который создает визуальный компонент.

Взаимосвязи компонентов через механизм уведомлений.

Для поддержания ссылочной целостности в программе компоненты поддерживают механизм уведомлений, реализованный в классе TComponent, с помощью которого один объект может быть извещен (с помощью вызова его метода Notification) о разрушении или добавлении другого объекта. Для компонентов, устанавливающих в своем конструкторе свойство принадлежности, поддержка извещений устанавливается автоматически, такой механизм уведомлений называется обязательным. Существует также свободный механизм уведомлений, реализуемый с помощью того же метода Notification и еще двух методов для добавления в список заинтересованных компонентов или удаления их оттуда — FreeNotification и RemoveFreeNotification.

Визуальные компоненты-оболочки и легковесные компоненты.

Визуальные компоненты могут иметь визуальное представление на экране в виде обычного окна Windows, в которое выведено некоторое изображение. Такие компоненты называются компонентами-оболочками и наследуются от класса TWinControl. Отличительная черта таких компонентов — наличие свойства Handle, в котором содержится ссылка на окно, в которое выводится визуальное представление элемента управления. Компоненты такого рода используются, когда элемент управления должен находиться в фокусе и получать события с клавиатуры. В остальных случаях рекомендуется использование легковесных компонентов — наследников класса TGraphicControl, использующих для вывода своего изображения на экран оконные компоненты-оболочки. Вывод на экран обеспечивается через свойство Canvas типа TCanvas, инкапсулирующее в себя графические возможности операционной системы. Компонент, которому визуально принадлежит легковесный элемент управления, перенаправляет графический вывод легковесного компонента в свое окно.

Страница: 1 2 3 4 5 6 7