Главная » Delphi » Использование объектов Delphi

0

Как уже говорилось, объекты (называемые также  экземплярами класса) представля ют собой  сущности, которые могут содержать данные  и код. Объекты Delphi предос тавляют программисту все основные возможности объектно ориентированного про граммирования, такие как наследование, инкапсуляция и полиморфизм.

Объявление и создание экземпляра

Безусловно, перед  тем  как  использовать объект, его  следует  объявить. В Object Pascal это  делается с помощью ключевого слова  class. Объявления объектов поме щаются в раздел объявления типов (type) модуля или программы:

type

TFooObject = class;

После  объявления типа  объекта можно  выполнить объявление переменных этого типа (называемых также экземплярами (instance)) в разделе var:var

FooObject: TFooObject;

В Object Pascal  экземпляр объекта создается с помощью вызова  одного  из  конст рукторов (constructor) этого  объекта. Конструктор отвечает за создание экземпляра объекта, а также  за выделение памяти и необходимую инициализацию полей.  Он  не только  создает  объект, но и приводит его в состояние, необходимое для его дальней шего использования. Каждый  объект содержит по крайней мере  один конструктор Create(), который может  иметь  различное количество параметров разного типа — в зависимости от типа  объекта. В этой  главе рассматривается только  простейший кон структор Create() (без параметров).

В отличие от языка C++, конструкторы в Object Pascal не вызываются автоматиче

ски. Создание каждого объекта с помощью вызова его конструктора входит в обязан

ности  программиста. Синтаксис вызова  конструктора следующий:

FooObject := TFooObject.Create;

Обратите внимание на уникальную  особенность вызова  конструктора —  он вызыва ется с помощью ссылки на тип, а не на экземпляр типа (в отличие от других методов, ко торые вызываются с помощью ссылки на экземпляр). На первый взгляд это может пока заться нелепостью, однако в этом есть глубокий смысл — ведь экземпляр объекта FooOb- ject в  момент  вызова   конструктора  еще  не  создан.   Но   код  конструктора  класса TFooObject статичен и находится в памяти. Он относится к типу, а не его экземпляру, поэтому такой вызов вполне корректен.

Вызов конструктора для создания экземпляра объекта часто называют созданием эк

земпляра (instantiation).

НА ЗАМЕТКУ

При создании экземпляра объекта с помощью конструктора компилятор гарантирует, что все поля экземпляра будут инициализированы. Все числовые поля будут обнуле- ны, указатели примут значение nil, а строки будут пусты.

Уничтожение

По  окончании использования экземпляра объекта следует  освободить выделен ную для него  память  с помощью метода  Free(). Этот  метод  сначала  проверяет, не равен  ли экземпляр объекта значению Nil, и затем вызывает деструктор (destructor) объекта — метод  Destroy(). Понятно, что действие деструктора обратно действию конструктора, т.е. он освобождает всю выделенную память  и выполняет другие дей ствия  по освобождению захваченных конструктором объекта ресурсов. Синтаксис вызова  метода Free() прост:

FooObject.Free;

Обратите внимание, что,  в отличие от  вызова  конструктора, вызов  деструктора выполняется с помощью ссылки  на экземпляр, а не на тип.  Кроме  этого, запомните еще   один   совет —   никогда   не  используйте  непосредственный  вызов   метода   De- stroy(). Более  безопасно и корректно вызывать метод Free().

CОВЕТ

В языке C++ деструктор экземпляра статически созданного объекта вызывается авто- матически, когда этот экземпляр покидает область видимости. В случае динамического создания экземпляра (с помощью оператора new) объект необходимо уничтожить са- мостоятельно, использовав оператор delete. То же правило действует и в Object Pascal, но с одной поправкой: в нем все экземпляры объекта — динамические, и про- граммист должен удалить их сам. Возьмите себе за правило уничтожать и освобож- дать все, что было создано вами в программе. Исключением из этого правила являют- ся объекты, принадлежащие другим объектам. Этот тип объектов уничтожается авто- матически. Еще одним исключением являются объекты с управляемым временем жизни, имеющие собственный счетчик ссылок (например производные от классов TIn- terfacedObject или TComObject), которые автоматически удаляются после ликви- дации последней ссылки на них.

Могут возникнуть вопросы: откуда берутся  все эти конструкторы и деструкторы; не ужели необходимо всегда описывать их — даже для самого  маленького объекта?  Конеч но,  нет.  Дело  в том,  что  все  классы  Object Pascal  неявно наследуют  функциональные возможности базового класса TObject, причем, независимо от того,  указано ли это на следование явно или нет. Рассмотрим следующее объявление класса:

Type TFoo = Class;

Это полностью эквивалентно следующему объявлению класса:

Type TFoo = Class(TObject);

Методы

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

Создание метода — процесс из двух этапов. Сначала  следует описать метод  в объяв лении  типа,  а затем  создать  код его реализации. Вот пример описания и определения метода:

type

TBoogieNights = class

Dance: Boolean;

procedure DoTheHustle;

end;

procedure TBoogieNights.DoTheHustle;

begin

Dance := True;

end;

Отметим, что при  определении тела метода  необходимо использовать его полное имя с указанием объекта. Вторая важная  деталь: метод способен непосредственно об ратиться к любому полю объекта.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии