Раздел finalization не является обязательным, более того, он может присутствовать только в том случае, если в модуле присутствовала секция initialization. В секции размещаются операторы, которые выполняются непосредственно перед завершением программы.
2. ОБЪЕКТЫ И КЛАССЫ В ЯЗЫКЕ OBJECT PASCAL
В обычном языке Pascal существует тип-запись:
type
TmyRecord = record
MyField1: String;
MyField2: Integer;
end;
Тип-запись позволяет описывать структурированные переменные, содержащие несколько значений как одного, так и разных типов. В приведенном примере запись TmyRecord содержит поля MyField1 и MyField2, которые соответственно имеют типы String и Integer.
Тип-класс в Object Pascal по виду близок к записи, но отличается от записи возможностью наследования от других классов, а также возможностью описания методов класса. Классом в Object Pascal называется особый тип записи, который может иметь в своем составе поля, методы и свойства. Такой тип также будем называть объектным типом:
type
TMyObject = class(TObject)
MyField: Integer;
ProcedureMyMethod1 (X: Real; var Y: Real);
function MyMethod2: Integer;
end;
В примере описан класс TMyObject, который наследуется от класса Tobject. Понятие "наследования классов" и понятие "свойства" будут подробно рассмотрены далее. Пока можно определить понятие свойства как поле, которое доступно не напрямую, а через посылку сообщений особым методам.
Класс TMyObject имеет поле MyField и методы MyMethod1 и MyMethod2. Нужно заострить внимание на том, что классы могут быть описаны либо в секции интерфейса модуля Interface (под модулем здесь понимается файл с исходным кодом вида Unit), либо на верхнем уровне вложенности секции реализации Implementation. He допускается описание классов внутри процедур и других блоков кода.
В случае если класс включает в себя поле с типом другого класса, разрешено опережающее объявление класса как в следующем примере:
type
TFirstObject = class;
TSecondObject = class(TObject)
Fist: TFirstObject;
{…}
end;
TFirstObject = class(TObject)
{…}
end;
Код методов описывается ниже по тексту объявлений классов, например:
ProcedureTMyObject.MyMethod1(X: Real; var Y: Real);
begin
у:= 5.0 * sin(X);
end;
function TMyObject.MyMethod2: Integer;
begin
{…}
MyMethod2:= MyField + 3;
end;
Для того чтобы использовать новый тип в программе, нужно, как минимум, объявить переменную этого типа, которая называется или переменной объектного типа, или экземпляром класса, или объектом:
var
AMyObject: TMyObject;
Согласно обычному языку Borland Pascal, переменная AMyObject должна содержать в себе весь экземпляр объекта типа TMyObject (код и данные вместе) — статический объект. Но в Delphi все объекты динамические, поэтому, не вдаваясь в подробности, выполним оператор:
{действие по созданию экземпляра объекта}
AMyObject:= TMyObject.Create;
Теперь другие объекты программы могут посылать сообщения данному объекту. Посылка сообщений заключается в вызове методов нужного объекта, например:
var
К: Integer;
{…}
AMyObject.MyMethod1(2.3, Z);
К:= 6 + AMyObject.MyMethod2;
Методы— это процедуры и функции, описанные внутри класса. Как видно, посылка сообщений в Object Pascal близка к вызову процедур языка Pascal, но имени вызываемой процедуры или процедуры-функции предшествует имя конкретного объекта, например: AMyObject.
Опишем два объекта AMyObject, BMyObject одного класса TMyObject:
var
AMyObject,
BMyObject: TmyObject;
При проектировании программисты считают, что каждый объект (экземпляр класса) имеет свой внутренний код методов и индивидуальную память, где размещаются свои поля.
На самом деле методы у разных объектов одного класса общие. Другими словами, они реализуются общим кодом, расположенным только в одном месте памяти. Это экономит память. В приведенном примере вызов методов:
AMyObject.MyMethod1(2.3, Z);
BMyObject.MyMethod1(0.7, Q)
на самом деле приведет к исполнению одного и того же кода при моделируемой для программиста видимости принадлежности своего индивидуального кода разным объектам. Это сближает методы с процедурами и процедурами-функциями языка Pascal. Напомним, что указатель — это переменная, содержащая в памяти адрес (номер ячейки) другой переменной, процедуры или объекта. В состав класса входит указатель на специальную таблицу, где содержится вся информация, нужная для вызова методов. От обычных процедур и функций методы отличаются тем, что им при вызове передается (неявно) указатель на тот объект, который их вызвал. Внутри методов он доступен под зарезервированным именем Self.
Читать дальше