ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.05.2024

Просмотров: 82

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Составляющие класса.

Составляющими класса являются поля, методы, свойства.

Поля

Определение: Полями назывaются инкапсулированные в классе данные. Они аналогичны полям записи. Поля могут быть любого типа, в том числе и классы. Для обращения к полям используются составные имена вида:

<имя объекта>.< имя поля>

Поля класса доступны всем его методам. Поля и методы у разных объектов одного класса одни и те же.

Например:

type

Тcomp=class

re,im:real

end;

Var a:Тcomp;

begin … … …

a.re:= 6.5;

a.im:=-10.5;

… … …

end.

Тcomp – имя класса, содержащего два поля: re и im, a – объект класса Тcomp, ее значениями являются пары вещественных чисел – действительная и мнимые части.

В объектно-ориентированном программировании прямой доступ к полям объекта нежелателен. Чтение и обновление их содержимого должно производится вызовом соответствующих методов. При создании новых классов на базе ранее созданных класс-потомок наследует все поля класса-родителя. Удаление и переопределение полей родителя невозможно. Можно добавлять новые поля в классе-потомке.

Например: type

TPerson = class

fam: string

end;

TStudent = class (TPerson)

grup: integer

end;

Var X:tStudent;

Таким образом, объект х имеет два поля: поле fam, наследуемое от класса TPerson и свое поле grup.

Т.о. чем ниже в дереве иерархии располагается класс, тем больше данных получают в свое распоряжение его объекты. Отметим, что почти все классы имеют имена, начинающиеся с буквы T (от слова Type).

Методы

Метод – это процедура или функция, описанная в классе и предназначенная для операции над полями. Методы описываются как обычные процедуры и функции, но в описании класса записывается лишь заголовок процедуры или функции.


Полные описания методов делаются после того, как завершено описание класса. При этом заголовок метода будет иметь вид:

Procedurе < имя класса>.< имя метода> (<формальные параметры>);

Function <имя класса>.<имя метода> (<формальные параметры>):

< тип функции>;

Разрешено писать сокращенный заголовок метода. Имена полей класса и имена формальных параметров метода класса не должны совпадать.

При вызове метода класса записываются составные имена вида:

< имя объекта>.< имя метода>

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

Например:

Type ТСomp=class

re, im: real; {поля класса ТСomp }

procedure Add(z:Tcomp);

function Modul:real; {методы класса ТСomp }

………

end;

………{полные описания методов }

{затем в разделе var описываются объекты a, b}

Var a, b:ТComp;

Begin

………

a. Add(b);

{объект а вызывает метод Add с фактическим параметром b}

b. Modul;

{объект b вызывает метод Modul }

End.

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

Например:

type

ТСomp = class

re,im: real;

… … …

procedure set (x,y: real); {метод ввода значений x,y для полей}

… … …

end;

procedure ТСomp.set;

begin

re:=x;

im:=y;

end;

var a,b: ТСomp;

begin … … …

a.set (-5,10);

b.set (1.3,13.8);

… … …

end.


Объекты

В Delphi объект – динамическая структура. Переменная объект содержит не данные, а ссылку на данные объекта. Поэтому программист должен позаботиться о выделении памяти для этих данных, то есть переменные a,b являются указателями, содержащими адреса объектов. Любая переменная объектного типа есть указатель. Форма обращения к объектам в Object Pascal отличается от формы обращения к динамическим объектам языка Turbo Pascal. Для обращения к полям и методам объекта в Object Pascal не надо использовать «^».

Таким образом класс и объект данного класса описываются:

type

<имя класса> = class (<имя класса – родителя>)

{поля, методы, свойства}

End;

{описания методов класса}

var

<имя объекта>: <имя класса>;

Создание и уничтожение объектов.

В состав любого класса входят два специальных метода: конструктор и деструктор. Эти методы у класса TObject называются Create и Destroy, так же они называются и в большинстве его потомков.

Определение: Конструктор – специальный метод, который распределяет объект в динамической памяти и помещает адрес начальной ячейки памяти в переменную Self, которая автоматически объявляется в классе.

Определение: Деструктор– специальный метод, который удаляет объект из динамической памяти.

Обращение к конструктору должно предшествовать любому обращению к полям и методам объекта. Т.о. объект «появляется на свет» в результате вызова конструктора Create, который инициализирует объект.

Для вызова конструктора необходимо записать:

<имя объекта>:= <имя класса>.<имя конструктора>;

Нужно указать еще и фактические параметры, если есть формальные в описании конструктора.

Например:

MyObject:=TMyClass. Create;

Здесь появляется объект MyObject.

Внимание! Как же так, ведь объекта еще нет, а мы уже вызываем его метод. Обратим внимание на то, что вызывается метод TMyClass.Create, а не MyObject.Creatе.


Для освобождения памяти, занятой объектом, используется специальный метод – деструктор, который обычно имеет имя Destroy.

Доступ к деструктору осуществляется следующим способом:

<имя объекта>.< имя деструктора>;

Например: MyObject.destroy;

По своей форме конструкторы и деструкторы являются процедурами, но объявляются с помощью зарезервированных слов Constructor и Destructor.

Type TMyClass=class

IntField:Integer;

Constructor Create(а:integer);

Destructor Destroy;

end;

Любые поля объекта, а так же методы класса, оперирующие с его полями, могут вызываться только после создания объекта с помощью вызова конструктора:

Var MyObject:tMyClass;

begin MyObject.IntField:=0; {ошибка, объект пока не создан}

MyObject:=TMyClass.Creatе; {создается объект MyObject}

MyObject.IntField:=0;

. . . . .

MyObject. destroy; {уничтожение объекта}

end;

Обращение к деструктору объекта будет ошибочным, если объект не создан конструктором и если адрес объекта nil, поэтому для удаления объекта следует вызвать метод free, который сначала проверяет, не равен ли адрес объекта nil или затем вызывает метод destroy.

Например: MyObject.free; – уничтожение объекта.

Методы destroy, create есть и у общего предка всех классов TObject, поэтому если в классе-потомке не указан конструктор или деструктор, то он наследуется от класса-родителя.

Например:

type

Тcomp = class

re,im:real;

procedure input (x,y:real); { конструктор явно не указан}

. . . . . {он наследуется от класса TObject }

end;

. . . . .

procedure Тcomp.input;

begin re:=x;

im:=y;


end;