- •Объектно-ориентированная парадигма программирования.
- •Объектно-ориентированный анализ
- •Объектно-ориентированное программирование.
- •Объектно-ориентированное проектирование.
- •Классы и объекты в Object Pascal.
- •Важнейшие принципы объектно-ориентированного программирования.
- •Составляющие класса.
- •Var a:Тcomp;
- •Var X:tStudent;
- •Объекты
- •Создание и уничтожение объектов.
- •IntField:Integer;
- •Var MyObject:tMyClass;
- •Var a,b:Тcomp;
- •Свойства и инкапсуляция.
- •X:integer;
- •Var a:tInt;
- •X:integer;
- •Создание класса комплексных чисел.
- •Interface
- •Implementation
Объекты
В 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;