Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МОДУЛИ new.doc
Скачиваний:
8
Добавлен:
14.09.2019
Размер:
72.7 Кб
Скачать

Исполняемая часть (Раздел реализации)

Исполняемая часть начинается зарезервированным словом 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.

7