Создание и использование классов

> [HTML Version](creatingclasses.html)

Пусть у нас имеется три однотипных агрегата, каждый агрегат связан с переменной, которая отвечает за пуск/стоп агрегата, также он имеет имя и методы для остановки и пуска. Остановка и пуск агрегата должны сопровождаться выводом соответствующих сообщений. Для решения этих задач мы можем создать один отдельный класс, реализовать в нем методы пуск/стоп и использовать их. Ниже пример [глобального модуля](globalmodule.md) с комментариями:

Важно\! Обязательно освобождайте объект через FreeAndNil  после того, как работа с ним завершена, чтобы не получить утечку памяти. Например: FreeAndNil(Aggregate1);

````
interface  
   
type  
  TAggregate = class         // класс  
  private  
    FName: string;           // имя агрегата  
    FVariable: TM\_Variable;  // переменная агрегата  
  public  
    // это конструктор класса  
    constructor Create(const AName: string; AVar: TM\_Variable);  
   
    // эти методы отвечают за пуск / стоп агрегата  
    procedure Start;  
    procedure Stop;  
   
    // имя и переменная агрегата доступны извне только для чтения  
    property Name: string read FName;  
    property Variable: TM\_Variable read FVariable;  
  end;  
   
var  
  // объявляем сами агрегаты, допустим их всего три  
  Aggregate1: TAggregate;  
  Aggregate2: TAggregate;  
  Aggregate3: TAggregate;  
   
implementation  
   
constructor TAggregate.Create(const AName: string; AVar: TM\_Variable);  
begin  
  // в конструкторе агрегат получает имя и переменную  
  FName := AName;  
  FVariable := AVar;  
end;  
   
procedure TAggregate.Start;  
begin  
  FVariable.Value := 1;  // запускаем агрегат  
  AddMessage(Now, mkMessage, 'Агрегат "' + FName + '" запущен\!', True, False);  
end;  
   
procedure TAggregate.Stop;  
begin  
  FVariable.Value := 0;  // останавливаем агрегат  
  AddMessage(Now, mkMessage, 'Агрегат "' + FName + '" остановлен\!', True, False);  
end;  
   
// это секция инициализации, она выполняется один раз, при старте проекта  
initialization  
  // создаём агрегаты  
  Aggregate1 := TAggregate.Create('Транспортер', vrAggr1);  
  Aggregate2 := TAggregate.Create('Мешалка', vrAggr2);  
  Aggregate3 := TAggregate.Create('Насос', vrAggr3);  
   
// это секция финализации, она выполняется один раз, при остановке проекта  
finalization  
  // \!\!\! Обязательно очищаем созданные объекты\! Иначе получим утечку памяти\!  
  FreeAndNil(Aggregate1);  
  FreeAndNil(Aggregate2);  
  FreeAndNil(Aggregate3);  
   
end.

````


Агрегаты описаны и созданы, за создание отвечает конструктор Create, в котором агрегату назначается имя и переменная пуск / стоп. Теперь мы можем из любого скрипта управлять агрегатом, например запустить его:

````
begin  
  Aggregate1.Start;  
end.

````
