Создание классов Delphi

Класс - логическая абстракция, которая описывает некоторый объект. В оперативной памяти существует объект, созданный на основе данного класса (объект - это экземпляр класса).
Объект физически занимает место в ОП и производит действия над своими данными (полями), используя собственные методы - процедуры и функции.
Существуют статические, виртуальные и динамические, а также абстрактные методы. По умолчанию, все методы статические.
Рассмотрим класс TParallel. Содержит методы Init, Volume, Show и поля  Fa, Fb, Fc.
Метод Init - процедура, Которая будет иницалишировать значения полей. Проинициализировать объект означает проинициализировать поля и свойства объекта, то есть присвоить им начальные значения. Если этого не сделать, то эти поля будут содержать "мусорные" значения.
Метод Volume - функция, которая рассчитывает и возвращает объем параллепипеда.
Метод Show - процедура,  выводит на экран объем и значение полей. Описание классов производится в секции интерфейс. Начинается со слова type и заканчивается end.
Опишем класс TParallel.
type //начало описания класса
TParallel = class
public
Fa: word;
Fb: word;
Fc: word;
procedure Init(a, b, c : word);
function Volume: word;
procedure Show;
end;
var Form1: TForm1, Par1: TParallel;
implementation
{$R *.dfm}
procedure TParallel.Init(a,b,c: word);
begin
Fa:=a;
Fb:=b;
Fc:=c;
end;
procedure TParallel.Show;
begin
ShowMessage('Объем равен' + IntToStr(Volumde) + #13 +
+ 'Ширина - Поле Fa' + IntToStr(Fa) + #13 +
+ 'Длина - Поле Fb' + IntToStr(Fb) + #13 +
+ 'Высота-Поле Fс' + IntToStr(Fс));
end;
procedure TParallel.Volume: word;
begin
result:=Fa*Fb*Fc;
end;
view raw TParallel.pas hosted with ❤ by GitHub
Для реализации методов необходимо установить курсор на имя одного из методов и нажать комбинацию клавиш Shift+Ctrl+C.
Разместим на форме две кнопки:
Button1 - создает объект TParalllel
Button2 - проверяет, существует ли объект в памяти.
procedure TForm.Button1.Click(Sender: TObject);
begin
Par1:=TParallel.Create;
Par1.Init(1,2,3);
Par1.Show;
end;
procedure TForm1.Button2.Clock(Sender: TObject);
begin
if (Par1=nill) then Form1.Caption:= 'Обьекта нет в памяти'
else Form1.Caption:= 'Обьекта cуществует в памяти'
end;
view raw TParallel.pas hosted with ❤ by GitHub
С помощью специального метода конструктора Create необходимо создать объект в оперативной памяти. Пока мы только объявили переменную Par1. Она ни на что не указывает. Это означает, что пока объект не создан, ссылка Par1 указывает на область памяти с адресом 0.
Операционная система Windows запрещает расположение любого объекта по такому адресу. У нулевого адреса есть псевдоним nil.
В обработчике Button1.Click записываем создание объекта.
В обработчике Button2.Click проверяем существование объекта.
Обратная процедура созданию -   это деструктор, который имеет имя Destroy или Free.
В методе Free проверяется значение переменой указателя,  если оно не равно nil, то вызывается метод Destroy.
Par1.Destroy или Par1.Free. Каждый раз при выполнении команды TParellel.Create динамическая память под объект выделяется заново, а предыдущие объекты, на которые до этого указывал Par1, остаются в памяти и занимают ее. Поэтому память, выделенная для старого объекта безвозвратно утеряна, то есть пропадает информация о значении адреса и эта потерянная память не может быть использована не ОС, не самой программой.
Добавим в компонент Memo адрес объекта, содержащийся в переменной Par1: Memo1.Lines. Add('адрес' + IntToStr(integer(Par1))).
Понятие использования избыточной памяти программой называется утечкой памяти. В современных средах программирования предусмотрен сборщик мусора - это специальная программа, отслеживающая все переменные, ссылающиеся на динамически размещённые объекты. Это означает, что,  как только сборщик мусора находит отсутствует переменной указателя, то в дальнейшем на него нельзя будет сослаться и он автоматически  удаляется из памяти.

Комментарии

Популярные сообщения