Структура модулей

UNIT <имя>; {заголовок модуля}

INTERFACE {Интерфейсная часть}

{uses <список_вспомогательных_модулей>;}

{Объявления глобальных (доступных)

¨ типов,

¨ констант,

¨ переменных;}

{Заголовки доступных процедур и/или функций}

IMPLEMENTATION {Исполняемая часть/ реализации}

{uses <список_вспомогательных_модулей>;}

{ Объявления локальных

¨ типов,

¨ констант,

¨ переменных;}

{Описания процедур и/или функций, описанных в интерфейсной части;}

{Объявления_и_описания_внутренних (локальных)_процедур и/или функций }

[ BEGIN

{ Инициирующая часть}]

END.

Таким образом, модуль состоит из заголовка и трех частей, любая из которых может быть пустой:

¨ Интерфейсная часть (INTERFACE)

¨ Исполняемая часть ( IMPLEMENTATION)

¨ Инициирующая часть (между BEGINEND.)

Все блоки, составляющие разделы являются не обязательными и могут отсутствовать. Пример обязательных слов, входящих в модуль продемонстрирован на примере пустого модуля.

UNIT Pustoi;

INTERFACE

IMPLEMENTATION

END.

1. Имя модуля.

Имя модуля должно соответствовать имени файла, хранящего исходный текст модуля, а после компиляции на диск – имени файла с расширением.TPU.

UNIT GLOBAL

 
 


GLOBAL.PAS GLOBAL.TPU

Следует помнить, что имя файла на диске ограничивается 8-ю символами.

2. INTERFACE {Интерфейсная часть}

Здесь содержатся объявления всех глобальных (библиотечных) объектов, которые должны быть доступны основной программе или другим модулям.

Unit Globals;

INTERFACE

Const

Len=100;

Type

Tvector=array[1..len] of integer;

Function MAX(n:len; var mas:tvector):integer;

IMPLEMENTATION

…………………

END.

Если в основной программе написать uses globals, то константа Len, тип TVector, функция MAX будут доступны в основной программе.

3. IMPLEMENTATION {Исполняемая часть}

Содержит тела процедур и функций, объявленных в интерфейсной части. Ранее объявленные процедуры и функции должны быть описаны в той же последовательности, в какой появляются заголовки в интерфейсной части.

Тела подпрограмм могут иметь сокращенный заголовок (без указания параметров).

В этой части могут быть объявлены локальные для модуля объекты: вспомогательные

¨ типы,

¨ константы,

¨ переменные,

которые используются в инициирующей части. А также описаны п/п, используемые в инициирующей части.

4. Инициирующая часть (между BEGIN и END.)

Завершает модуль. Может отсутствовать, тогда просто END. В противном случае ставится BEGIN и далее программируются действия, которые должны быть произведены перед выполнением основной программы: открытие нужных файлов, инициация переменных и т.д.

Unit FileText;

INTERFACE

Procedure Write_(s:string);

IMPLEMENTATION

Var

F:text;

Const

Name='output.txt';

Procedure Write_;

begin

Writeln(f,s);

end;

BEGIN

Assign(f,name);

Rewrite(f)

END.

Если сразу несколько модулей содержат секции инициализации, то порядок выполнения этих секций будет следующим:

  • Если модуль А подключает модуль В (не важно, в какой именно секции), то секция инициализации модуля В будет выполнена раньше, чем секция инициализации, содержащаяся в модуле А.
  • Если два модуля В и С подключаются на одном уровне (считаются равноправными), то их секции инициализации будут выполнены в том порядке, в каком имена этих модулей указаны в разделе uses.

Запрещается явное или косвенное обращение модуля к самому себе (в интерфейсной части).

Unit C; Unit A; Unit B;

INTERFACE INTERFACE INTERFACE

Uses c; Uses b; Uses a;

---- ---- ----

END. END. END.

В отличие от секции внешних связей, секции реализации из различных модулей могут использовать друг друга рекурсивно. Иными словами, совершенно законной будет запись, например, такого вида:

unit mod_1;

interface

...

implementation

uses mod_2;

...

unit mod_2;

interface

...

implementation

uses mod_1;

...


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: