Исполняемая часть (Раздел реализации)
Исполняемая часть начинается зарезервированным словом Implementation. Раздел Implementation модуля предназначен для описания внутренних, т.е. локальных для модуля объектов, доступных к использованию только внутри данного Unit, компонент. Внешние модули не могут видеть типы, переменные, константы, функции и процедуры, размещенные в разделе реализации.
Затем может следовать предложение uses, где указываются имена модулей, которые используются подпрограммами данной исполнительной части (если это нужно). Если какой-то модуль уже указан в интерфейсе модуля, то в исполнительной части его повторять не следует.
Исполняемая часть содержит описания подпрограмм, объявленных в интерфейсной части модуля. Описанию подпрограммы в исполняемой части должен предшествовать заголовок, в котором можно не писать список формальных параметров (и тип результата для функции), так как они уже описаны в интерфейсной части. Но если заголовок подпрограммы приводится в исполняемой части в полном виде, т.е. со списком формальных параметров и объявлением типа результата, то он должен совпадать с заголовком, объявленным в интерфейсной части, например:
Unit Cmplx;
Interface
type
complex = record
re,im : real
end;
Function AddC(x,y: Complex): Complex;
Function MulC(x,y: Complex): Complex;
Implementation
Function AddC(x,y: Complex): Complex;
Begin
end;
Function MulC; //Вариант описания подпрограммы без
//повторения списка параметров
Begin
end;
end.
Повторение заголовка в исполняемой части должно быть полным и точным. Если бы мы использовали заголовок
Function AddC(x, z: Complex): Complex;
Begin
......
end;
компилятор немедленно известил бы нас о несовпадении заголовка с объявлением функции в интерфейсной части (второй параметр должен иметь имя у).
Инициирующая и завершающая части
Инициирующий и завершающий блоки чаще всего отсутствуют вместе с начинающими их словами initialization и finalization. Эти блоки располагаются в нижней части модуля, непосредственно примыкая к последнему оператору end.
В инициирующей части размещаются операторы, которые исполняются до передачи управления основной программе и обычно используются для подготовки ее работы. Например, в них могут инициироваться переменные, открываться нужные файлы и т.д. В завершающей части указываются операторы, выполняющиеся после завершения работы основной программы (в них освобождаются выделенные программе ресурсы, закрываются файлы и т.д.). Если несколько модулей содержат инициирующие части, то эти части выполняются последовательно друг за другом в порядке перечисления модулей в предложении Uses главной программы. Если несколько модулей содержат завершающие части, то эти части выполняются последовательно друг за другом в порядке, обратном перечислению модулей в предложении Uses главной программы.
Пример.
Создайте модуль комплексной арифметики Cmplx (такая арифметика ни в Turbo Pascal, ни в Object Pascal не предусмотрена), содержащий функции: сложение, вычитание, умножение (например AddC, SubC, MulC)
Unit Cmplx;
{---------------------}
Interface
type complex = record
re, im: real
end;
Function AddC(x,y: Complex): Complex;
Function SubC(x,y: Complex): Complex;
Function MulC(x,y: Complex): Complex;
{---------------------}
Implementation
{---------------------}
Function AddC(x, у: Complex): Complex; //Сложение комп. чисел
{В Object Pascal для подпрограмм-функций автоматически определяется локальная переменная Result для результата}
begin
Result.re:= x.re + y.re;
Result.im:= x.im + y.im
end; //AddC
Function SubC(x,y: Complex): Complex; //Вычитание комп. чисел
begin
Result.re:= x.re - y.re;
Result.im:= x.im - y.im
end; //SubC
Function MulC(x,y: Complex): Complex; //Умножение комп. чисел
begin
Result.re:= x.re * y.re - x.im * y.im;
Result.im:= x.re * y.im + x.im * y.re
end; //MulC
end.
Чтобы создать такой модуль, следует сначала с помощью опции File\New вызвать каталог репозитория и на странице New выбрать команду Unit для включения в программу пустого модуля без связанного с ним окна. Текст модуля следует сохранить в файле cmplx.pas: имя файла должно совпадать с именем модуля – только в этом случае Delphi сможет автоматически найти модуль и следить за его обновлением. Для сохранения модуля необходимо выполнить команду File\Save as и сохранить его в ту самую папку(!), где будет сохранена основная программа.
После создания модуля его имя нужно упомянуть в предложении Uses того модуля или программы, в котором будут использоваться созданные нами подпрограммы, типы и т. д. (в нашем модуле -это тип Complex, подпрограммы AddC, SubC, MulC).
Пример программы использующей модуль
program UsUnit;
{$APPTYPE CONSOLE}
uses Cmplx, SysUtils;
var x,y,z:complex;
procedure output(Oper: char);
Begin
case Oper of
'+': z := AddC(x,y);
'-': z := SubC(x,y);
'*': z := MulC(x,y);
end;
writeln('Rezult', oper, '=', z.re, '+i', z.im);
readln;
end;
begin
{TODO -oUser -cConsole Main : Insert code here}
x.re:=0.1;
x.im:=0.2;
y.re:=0.3;
y.im:=0.4;
output('+');
output('-');
output('*');
end.
Очень важным в программе является предложение uses Cmplx. Именно это делает доступными главной программе функции и тип complex. Эту ссылку можно также вставить командой File\UseUnit и в появившемся окне выбрать имя модуля Cmplx.