Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000555.doc
Скачиваний:
31
Добавлен:
30.04.2022
Размер:
19.12 Mб
Скачать

2.12. Программные модули

2.12.1. Модули, формируемые пользователем

При построении большой по размерам программы целесообразно разделить ее на части с тем, чтобы работать с каждой частью отдельно. Для этого в Турбо-Паскале имеются программные модули.

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

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

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

USES имена модулей;

Имена модулей перечисляются через запятую.

USES должно следовать сразу за заголовком программы.

Структура модуля имеет вид:

UNIT имя модуля; (*заголовок*)

INTERFACE (*интерфейсный раздел*)

раздел указания используемых модулей; раздел описания констант;

раздел описания типов данных;

раздел описания переменных;

раздел задания имен процедур и функций; IMPLEMENTATION (*раздел реализации*)

раздел указания используемых модулей;

раздел описания меток;

раздел описания констант;

раздел описания типов данных;

раздел описания переменных;

раздел описания процедур и функций;

BEGIN (*раздел инициализации*)

операторы;

END.

Имя модуля используется в предложении USES при подключении модуля к программе.

В интерфейсном разделе перечисляется все, что должно быть видимым в модуле из программы, которая его использует. Константы, типы и переменные перечисляются в предложениях CONST, TYPE и VAR. Для процедур и функций даются только их заголовки.

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

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

Модуль следует хранить в одноименном файле с расширением PAS.

Ниже приведен пример модуля под названием Stack, который содержит средства работы со стеком вещественных чисел, построенным на основе связанного списка. Модуль не ссылается на другие модули и не имеет раздела инициализации.

UNIT Stack; INTERFACE

type

PList = ^TElement; TElement = record

{ описание элемента списка }

R: real;

Next: PList; end;

{ создает пустой список List}

procedure Nul (var List: PList);

{ добавляет к списку List число R }

procedure Push (var List: PList; R: real);

{ удаляет из списка Ust число R и возвращает его в программу}

function Pop (var List: PList): real; IMPLEMENTATION

procedure Nul (var List: PList); begin

List := nil;

end;

procedure Push (var List: PList; R: real); var P: PList;

begin

new(P);

P^.R := R;

P^.Next := List;

List := P; end;

function Pop (var List: PList): real; var P: PList;

begin

if List <> nil then

begin

Pop := List^.R; P:= List;

List := P^.Next; dispose (P);

end {if}; end;

END.

Вот программа, которая использует модуль Stack. Она создает пустой список, добавляет к нему три числа, потом одно удаляет и выводит на экран:

uses Stack;

var

L: PList; R: real; begin

Nul (L);

Push(L, 1.0);

Push (L, 2.0);

Push (L, 3.0);

R:=Pop (L);

writeln(R)

end.

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

Предположим, в программе в предложении USES есть имя модуля А, который ссылается на модуль В. Это не означает, что в программе доступны объекты из В. Если в этом есть необходимость, в программе следует перечислить имена обоих модулей в предложении USES.

Взаимные ссылки двух модулей возможны только из разделов реализации.