Свойства объектов, понятие интерфейса класса


Свойства объектов:

Каждая переменная типа класса содержит не значение объекта, а лишь ссылку (указатель) на область памяти, в которой содержится объект, т.е. переменная типа класс — это просто ссылка на экземпляр. Таким образом, в OP все экземпляры или объекты могут быть только динамическими.

Для того чтобы использовать новый тип данных в программе, необходимо как минимум объявить переменную этого типа. За выделение памяти, т.е. за создание новых своих экземпляров-объектов отвечает класс с помощью метода, называемого конструктором. Поскольку, как известно, выделение памяти для динамических переменных происходит только во время выполнения программы, то фактически объекты вызываются к жизни во время исполнения. Статически во время трансляции программы выделяется память только под объектную ссылку, память для полей не выделяется.

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

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

Объявление класса, т.е. объявление типа данных, определяет состав полей данных экземпляров класса и набор допустимых операций над ними, и его синтаксис следующий:

Type <имя класса>=Сlass[(<имя родительского класса>)}
Определение класса> // Определение полей, свойств и методов
End;

Примечание:
• Классы могут быть объявлены либо в секции интерфейса модуля, либо на верхнем уровне вложенности секции реализации. Таким образом, не допускается описание класса внутри процедур и функций и других блоков кода. Они могут быть только глобальными типами.

• Возможно предварительное объявление класса, но без использования директивы Forward.

• Определение класса может быть разделено на несколько разделов с разной степенью видимости (доступности) их компонентов. Каждый раздел может начинаться с одного из ключевых слов-директив: Private, Protected, Public, Published (если компилировался с директивой $M+)

В OP у всех классов есть общий класс-прародитель TObject. При создании пользовательского класса непосредственно от TObject имя родительского класса можно не указывать. Базовый класс TObject включает до 25 (Delphi 5) различных методов: конструктор, деструктор, метод Free, 9 классовых методов и не имеет полей данных и свойств.

Интерфейс класса — это три основных группы компонентов объектов,
• данные объекта или атрибуты исходных данных, называемые чаще всего полями;
• методы объекта или операции над данными;
• свойства объекта — это высокоуровневые атрибуты данных, которые тесно связаны с соответствующими методами доступа к данным.

Объявление полей в каждом из четырех разделов объявления класса должно предшествовать объявлению методов и свойств.
два вида полей внутри экземпляра класса: поля прямого доступа и косвенного доступа:
• поле прямого доступа — это реальная часть данных, непосредственно встроенная в экземпляр класса. Примером может служить целое число или строка. Прямой доступ требует ресурса памяти для хранения каждого экземпляра класса, в точности равного объявленному размеру, поэтому значения этих полей могут храниться внутри каждого экземпляра класса.

Выделение памяти под строки Delphi делает динамически и автоматически:
• поле косвенного доступа — это ссылка на некоторый другой объект, обычно на экземпляр другого класса. Поле косвенного доступа требует сравнительно немного памяти для хранения ссылки, поскольку в этом поле хранится адрес — 4 байта.

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

• Объект может быть ассоциирован с другим объектом. В этом случае объекты «знают » друг о друге, могут вызывать методы друг друга и ссылаться, но они не отвечают за создание и уничтожение друг друга. Например, совокупность компонентов для работы с базами данных, организации DDE-связи и т.п.

Создание экземпляра класса. Для создания экземпляра необходимо объявить переменную в секции Var, а затем отвести ей память в куче соответствующим конструктором.

Обращение к полям экземпляра класса. Можно обращаться к полям данных следующим образом:
• используя точечную нотацию (или полное имя):

<имя объекта>.<имя поля>:=<значение>;

• используя оператор With, как при обращении к полям записи в Паскале:

With <имя объекта> Do Begin
<имя поля ]>:=<значение1>;
<имя поля 2>:=<значение2>;
. . .
End;


Комментарии запрещены.




Статистика