Для описания класса зарезервировано слово object. Тип object — это структура данных, которая содержит поля и методы. Описание объектного типа выглядит следующим образом:
Туре <имя класса>= object
<поле>;
....
<поле>;
<метод>;
....
<метод>;
End;
Поле содержит имя и тип данных. Методы — это процедуры или функции, объявленные внутри декларации объектного типа, в том числе и особые процедуры, создающие и уничтожающие объекты (конструкторы и деструкторы). Объявление метода внутри описания объектного типа состоит только из заголовка (как в разделе interface в модуле).
Тела методов описываются после объявления класса. Причем в заголовке метода можно не повторять список параметров, но перед именем метода необходимо указать имя класса через точку.
Procedure <имя класса>.<имя метода>;
<локальные ресурсы процедуры>
Begin
<тело процедуры>
End;
Function <имя класса>.<имя метода>;
<локальные ресурсы функции>
Begin
<тело функции>
End;
Описание объектного типа, и выражает такое свойство, как инкапсуляция.
Инкапсуляция – это механизм, который объединяет данные и методы, манипулирующие этими данными, в один объект.
Например, разработать класс для реализации объекта Прямоугольник, который должен хранить длину и ширину фигуры и уметь вычислять площадь данной фигуры.
Type TFigure= object
length, width: real; {поля: длина и ширина}
Function Square: real; {метод определения площади}
End;
Function TFigure.Square; {тело метода определения площади}
Begin
Square:=length*width;
End;
Поскольку поля и методы описаны в одном классе, все поля класса доступны методам класса без дополнительного указания.
Объявление объекта. Описав класс, можно объявить любое количество объектов этого класса. Например:
Var a: TFigure; {объект а класса TFigure}
b: array[1..10] of TFigure;{массив объектов типа TFigure}
c: ^TFigure; {указатель на объект класса TFigure}
Время жизни и видимость зависят от вида и места их описания и подчиняются общим правилам Паскаля.
В зависимости от способа выделения памяти под объект-переменную различают статические объекты, под которые память выделяется в процессе компиляции программы, и динамические, под которые память выделяется в процессе выполнения программы.
На UML – унифицированном языке моделирования – класс отображается в виде прямоугольника, разделенного на три части. В первой содержится имя класса, во второй – атрибуты, в третьей – методы:
Обращение к полям и методам объекта. Обращение к полям и методам объекта выполняется так же, как к полям записей - с использованием точечной нотации или оператора with:
<имя объекта>.<имя поля>
или
<имя объекта>.<имя метода>;
Инициализация полей объекта. Поля объекта должны инициализироваться. Инициализация полей объекта может осуществляться тремя способами:
· прямым занесением в поле, например:
Var
A: TFigure; {объявляем объект-переменную}
Begin
A.length:=10;
A.width:=15;
End.
· с использованием типизированных констант - синтаксис описания совпадает с синтаксисом типизированных констант типа «запись»:
Const
A:TFigure =(length:10; width:15); {объявляем константу}
· посредством специального метода - очень часто в качестве такого метода используют специальную инициализирующую процедуру, которую рекомендуется называть Init. Например:
Program obj1;
Type TFigure= object
length, width: real; {поля: длина и ширина}
Function Square: real; {метод определения площади}
Procedure Init(L,W:real); {инициализурующий метод}
End;
Function TFigure.Square; {тело метода определения площади}
Begin
Square:=length*width;
End;
Procedure Tfigure.Init; {инициализурующий метод}
Begin
Length:=L; width:= W;
End;
Var
A: TFigure; {объявляем объект-переменную}
Begin
A.Init(3.2, 6.5);
writeln('Площадь=',a.square:5:2);
readln;
End.
Библиотеки классов. Существует возможность создания библиотек классов. Библиотечные классы описывают в интерфейсной части модуля (Interface), а тела методов – в разделе реализации (Implementation).
{Создаем модуль}
Unit Figure;
Interface
Type TFigure=object
length, width: real;
Function Square: real;
Procedure Init(l,w:real);
End;
Implemantation
Function TFigure.Square;
Begin
Square:=length*width;
End;
Procedure Tfigure.Init;
Begin
Length:= l; width:= w;
End;
End.
{Создаем программу}
Program obj2;
uses Figure;
Var
A: TFigure;
Begin
writeln('Введите длину и ширину:');
Readln (a.length,a.width);
writeln('Площадь=',a.square:5:2);
readln;
End.
Ограничение доступа к полям и методам. Для ограничения доступа к полям и методам класса в пределах модуля, описание класса делят на секции:
· public – секция, содержащая описание общедоступных полей и методов (по умолчанию);
· private –секция, содержащая описание внутренных или скрытых полей и методов класса.