Основы объектно-ориентированного программирования: Методические указания к выполнению лабораторной работы по дисциплине «Информатика», страница 4

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

Для описания класса используется следующая конструкция:

имя_класса = class

поле_1;

поле_2;

метод_1;

метод_2;

end;

Имя класса принято начинать с буквы «T». Стоит также заметить, что название класса должно быть осмысленным и понятным для любого человека, к примеру, классу, содержащему свойства и поведенческие характеристики  хамелеонов, логично присвоить имя THameleon. То же самое относится к полям и методам класса: поле содержащие значение скорости передвижения можно назвать speed, а метод для изменения значения этого поля – setSpeed.

Теперь, для примера, опишем класс THameleon, содержащий поле Color и метод ReColor. В среде Delphi описание класса располагается в разделе описания пользовательских типов, который предваряется ключевым словом type.

type

THameleon = class

Color: TColor;

procedure ReColor;

end;

При создании объекта используется следующая конструкция:

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

К примеру, чтобы создать объект класса THameleon, необходимо набрать следующий код:

myHameleon_Tuzik: THameleon;

После создание объекта нам может потребоваться выполнить некоторые действия, например, задать начальные значения полей. Совокупность таких действий называется инициализацией объекта. Для инициализации объекта существуют специальные методы называемые конструкторами. У каждого класса может быть несколько конструкторов. Это предусмотрено для тех случаев, когда, к примеру, для разных объектов необходимо заполнить начальными значениями различные наборы полей. Для освобождения памяти после работы с объектом используется специальный метод называемый деструктором.  Имя конструктора пишется после ключевого слова constructor, а имя деструктора после ключевого слова destructor:

constructor имя_конструктора;

destructor имя_деструктора;

Общепринято называть конструктор create, а деструктор destroy. Добавим в созданный нами класс конструктор и  деструктор:

type

THameleon = class

Color: TColor;

constructor create;

destructor destroy;

procedure Recolor;

end;

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

var

myHameleon_Tuzik: THameleon;

begin

//выполнение инициализации объекта

myHameleon_Tuzik := THameleon.create;

   //освобождение памяти

myHameleon_Tuzik.destroy;

end;

Прямой вызов деструкторов обычно не используется. Вместо него используется метод Free, который, перед тем как вызвать деструктор, проверяет, существует ли уничтожаемый объект. Поэтому для более корректной работы нашего приложения мы должны заменить строкуmyHameleon_Tuzik.destroy, наmyHameleon_Tuzik.free.

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

Если у нас возникла необходимость создать класс лишь немного отличающийся от описанного ранее THameleon, то существует возможность не переписывать код заново. Достаточно воспользоваться принципом наследования и добавить необходимые нам поля и методы.

type

TMountainHameleon = class (THameleon)

Sreda_obitaniya: string ;

function GetSreda: string;

end;

В данном случае THameleon является классом-предком, а       TMountainHameleon  –  классом потомком. При этом класс потомок может использовать поля и методы класса-предка. Стоить заметить, что в Object Pascal все объекты являются наследниками класса TObject, поэтому запись THameleon = class, является эквивалентной записиTHameleon = class (TObject). Любознательный читатель может убедиться в этом, найдя описание класса TObject в файле System.pas.

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