Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
090303 ТП Модули_спц.doc
Скачиваний:
8
Добавлен:
01.04.2025
Размер:
128 Кб
Скачать

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

Модуль состоит из следующих частей:

  • заголовок модуля;

  • интерфейс модуля;

  • исполнительная часть модуля;

  • секция инициализации.

Все разделы модуля, за исключением секции инициализации, являются обязательными. Обязательна также указанная последовательность разделов, что очевидно на синтаксической диаграмме (см. рис.1)

Рис. 1 Синтаксическая диаграмма структуры модуля

3.1. Заголовок модуля

Заголовок модуля состоит из ключевого слова Unit и идентификатора. Идентификатор модуля должен быть уникальным. Пример заголовка:

Unit MyMod;

Модуль должен быть помещен в файл, имя которого совпадает с именем модуля, а его расширение должно быть .РАS.

3.2 Интерфейс модуля

Через интерфейс осуществляется взаимодействие основной программы с модулем (модуля с модулем). В интерфейсе указываются константы, типы, переменные, процедуры и функции, которые могут быть использованы основной программой (модулем) при вызове этого модуля.

Интерфейс начинается словом interface и может содержать следующие разделы:

предложение uses (используемые модули);

раздел объявления констант;

раздел объявления типов;

раздел объявления переменных;

раздел объявления процедур и функций: только их полные заголовки!!

Завершается интерфейсная часть началом исполнительной части.

Предложение uses интерфейсной части модуля точно такое же, как у главной программы, а модули, перечисленные здесь, могут использоваться во всех частях модуля, а не только в интер­фейсной части.

Если один модуль обращается к интерфейсной части другого, который в своей интерфейсной части обращается к третьему модулю и т. д., наконец, последний модуль использует первый модуль (так называемое циклическое использование модулей), то такая ситуация недопустима из-за того, что компилятор в этом случае не сможет установить необходимые связи .

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

В разделе объявления процедур и функций указываются лишь заголовки подпрограмм (за исключением тех подпрограмм, которые используют директиву in1inе, которая здесь допустима). Сами подпрограммы приводятся в исполнительной части модуля.

Например:

Interface

Const n=10;

Type t_m = array [1..n] of integer;

Procedure Zap_mas (var A: t_m; r:byte);

Function Sum (D : t_m): longint;

Все заявленные в этой части идентификаторы части - тип данных t_m, константа n, и имена процедуры и функции Zap_mas и Sum - доступны для использования как в самой интерфейсной так и в остальных частях модуля. Они также могут использоваться во всех других модулях и в головной программе, если имя этого модуля содержится в предложение uses этих модулей.

3.3 Исполнительная часть модуля

Исполнительная часть включает все подпрограммы модуля. Она может также включать локальные метки, константы, типы и переменные, недоступные для других программных единиц (естественно, и для интерфейса самого модуля). Начинается исполнительная часть ключевым словом imp1еmеntаtion, а завершается либо началом секции инициализации, если она есть, либо словом еnd. (с точкой).

Исполнительная часть - "внутренняя кухня" модуля, где протекают процессы, о которых не надо "знать" другим программным единицам. Она может содержать следующие разделы:

  • предложение uses (используемые модули);

  • раздел объявления меток;

  • раздел объявления констант;

  • раздел объявления типов;

  • раздел объявления переменных;

  • раздел процедур и функций

В предложении uses исполнительной части перечисляются модули, параметры которых могут употребляться в модуле всюду за исключением интерфейсной части (чаще всего так и бывает).

В исполнительной части допускается циклическое применение модулей, поэтому по мере возможности именно здесь следует объявлять модули.

Если какой-то модуль объявлен в интерфейсной части, то в исполнительной части его объявлять не следует. В предложение uses исполнительной части такое же, как и в интерфейсной части.

Все разделы исполнительной части, кроме предложения uses, могут идти в любой последовательности; можно создавать несколько, однотипных разделов.

При описании процедур и функций в исполнительной части допустимо записывать их сокращенные заголовки, как в случае директивы forward. Если же здесь записываются полные заголовки, они должны быть полностью идентичны заголовкам в интерфейсной части.

Например:

Interface

Const n=10;

Type t_m = array [1..n] of integer;

Procedure Zap_mas (var A: t_m; r:byte);

Function Sum (D : t_m): longint;

imp1еmеntаtion

uses Crt;

Procedure Zap_mas;

Var

. . .

begin

. . .

end;

Function Sum;

Var

. . .

begin

. . .

end;

В примере показано, что собственно процедуры / функции определяются в интерфейсной части. При этом их заголовок должен либо полностью повторять заявленный в интерфейсной части, либо, как в примере, содержать только имя процедуры / функции.