Множества

Модули

Одним из слабых мест механизма подпрограмм в стандартном Паскале является их встроенность в тело программы и невозможность по этой причине раздельной компиляции и отладки. В известной мере этот недостаток устраняется дополнительными возможностями в Турбо-Паскале по заданию подпрограммы через внешнее описание External, когда подпрограмма разработана вне среды Турбо-Паскаль на другом языке (обычно, на языке ассемблера) и ее необходимо подключить к программе на Паскале. Новые возможности по раздельной разработке больших программ и развитию принципов структурного программирования открылись с введением в язык Турбо-Паскаль понятия модуля.
Модуль представляет собой совокупность различных компонентов раздела описаний (констант, типов, переменных, подпрограмм), предназначенную для использования другими модулями и программами. Сам по себе модуль не является выполняемой программой. Однако, он хранится и компилируется отдельно.
Модуль имеет свой заголовок и два основных раздела: интерфейс и реализация (исполняемая часть). Кроме того, модуль может содержать раздел инициализации, предназначенный для установки начальных значений переменных модуля перед его использованием, который не является обязательным. Общая структура модуля может быть представлена следующим образом:

unit < имя модуля > interface {интерфейс} < описание видимых объектов > implementation {реализация} < описание скрытых объектов > [ begin < операторы инициализации объектов модуля > ] end.

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

unit Typedat; interface {описание глобальных типов} type MasI = array [1..100] of integer; MasR = array [1..100] of real; MatrI = array [1..10, 1..10] of integer; MatrR = array [1..10, 1..10] of real; DayNom = 1..31; YearNom = 1900..2000; implementation end.

В этом случае часть реализации отсутствует.
В модуле могут использоваться процедуры и функции, причем в интерфейсной части модуля указываются только заголовки процедур и функций со списками формальных параметров, видимые для других программ, а их полное описание (заголовок и тело) будет содержаться в исполняемом разделе. Последовательность описаний подпрограмм в разделе Implementation должна быть такой же, как при их объявлении в разделе Interface. Кроме того, в разделе реализации можно описывать локальные для данного модуля подпрограммы.
В качестве типового примера рассмотрим модуль, вычисляющий сумму, разность и произведение двух вещественных числе, например:

unit Arifm; {модуль запоминается в файле с именем Arifm.pas} interface procedure Summa (A, B: real; var Z: real); procedure Rasnost(A, B: real; var Z: real); procedure Proizv (A, B: real; var Z: real); implementation procedure Summa(A, B: real; var Z: real); begin Z := A + B; writeln('Сумма = ', Z); end; procedure Rasnost(A, B: real; var Z: real); begin Z := A - B; writeln('Разность =', Z); end; procedure Proizv(A, B: real; var Z: real); begin Z := A * B; writeln('Произведение = ', Z); end; end.

В данном модуле раздел инициализации отсутствует.
Каким же образом можно использовать модули? Прежде всего отметим, что модуль компилируется точно так же, как и подпрограммы. Поскольку модуль не является выполняемой программой, то в результате его компиляции образуется файл с расширением .tpu. Имя файла совпадает с именем модуля.
Определения, присутствующие в модуле, могут быть использованы либо в основной программе, либо в другом модуле. Для этого предназначено специальное предложение:

Uses < список используемых модулей >;

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

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

Все остальные модули становятся доступными после указания соответствующих имен в предложении Uses;

- DOS - содержит средства доступа к операционной системеMS DOS;
- CRT - обеспечивает все возможности доступа к экрану дисплея в текстовом режиме; кроме того, включены средства чтения информации с клавиатуры и управления звуком;
- PRINTER - упрощает вывод текстов на матричный принтер через переменную Lst, связанную с логическим устройством Prn;
- OVERLAY - строит оверлейные программы, обеспечивая эффективную организацию больших программ с перекрытиями;
- GRAPH - управляет графическим режимом работы дисплея;
- TURBO3, GRAPH3 - обеспечивают совместимость системы Турбо-Паскаль с версией 3.0.