Создание классов Delphi
Класс - логическая абстракция, которая описывает некоторый объект. В оперативной памяти существует объект, созданный на основе данного класса (объект - это экземпляр класса).
Объект физически занимает место в ОП и производит действия над своими данными (полями), используя собственные методы - процедуры и функции.
Существуют статические, виртуальные и динамические, а также абстрактные методы. По умолчанию, все методы статические.
Рассмотрим класс TParallel. Содержит методы Init, Volume, Show и поля Fa, Fb, Fc.
Метод Init - процедура, Которая будет иницалишировать значения полей. Проинициализировать объект означает проинициализировать поля и свойства объекта, то есть присвоить им начальные значения. Если этого не сделать, то эти поля будут содержать "мусорные" значения.
Метод Volume - функция, которая рассчитывает и возвращает объем параллепипеда.
Метод Show - процедура, выводит на экран объем и значение полей. Описание классов производится в секции интерфейс. Начинается со слова type и заканчивается end.
Опишем класс TParallel.
Для реализации методов необходимо установить курсор на имя одного из методов и нажать комбинацию клавиш Shift+Ctrl+C.
Разместим на форме две кнопки:
Button1 - создает объект TParalllel
Button2 - проверяет, существует ли объект в памяти.
С помощью специального метода конструктора 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))).
Понятие использования избыточной памяти программой называется утечкой памяти. В современных средах программирования предусмотрен сборщик мусора - это специальная программа, отслеживающая все переменные, ссылающиеся на динамически размещённые объекты. Это означает, что, как только сборщик мусора находит отсутствует переменной указателя, то в дальнейшем на него нельзя будет сослаться и он автоматически удаляется из памяти.
Объект физически занимает место в ОП и производит действия над своими данными (полями), используя собственные методы - процедуры и функции.
Существуют статические, виртуальные и динамические, а также абстрактные методы. По умолчанию, все методы статические.
Рассмотрим класс TParallel. Содержит методы Init, Volume, Show и поля Fa, Fb, Fc.
Метод Init - процедура, Которая будет иницалишировать значения полей. Проинициализировать объект означает проинициализировать поля и свойства объекта, то есть присвоить им начальные значения. Если этого не сделать, то эти поля будут содержать "мусорные" значения.
Метод Volume - функция, которая рассчитывает и возвращает объем параллепипеда.
Метод Show - процедура, выводит на экран объем и значение полей. Описание классов производится в секции интерфейс. Начинается со слова type и заканчивается end.
Опишем класс TParallel.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
Разместим на форме две кнопки:
Button1 - создает объект TParalllel
Button2 - проверяет, существует ли объект в памяти.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; |
Операционная система 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))).
Понятие использования избыточной памяти программой называется утечкой памяти. В современных средах программирования предусмотрен сборщик мусора - это специальная программа, отслеживающая все переменные, ссылающиеся на динамически размещённые объекты. Это означает, что, как только сборщик мусора находит отсутствует переменной указателя, то в дальнейшем на него нельзя будет сослаться и он автоматически удаляется из памяти.
Комментарии
Отправить комментарий