Pascal. Модуль (UNIT)

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

Турбо-Паскаль обеспечивает Вам доступ к большому числу встроенных констант, типов данных, переменных, процедур и функций. Некоторые из них специфичны для Турбо-Паскаля; другие специфичны для персонального компьютера РС фирмы IBM (и совместимых с ним компьютеров) или для операционной системы MS-DOS. Их количество велико, однако, в своей программе Вы редко используете их все сразу. Поэтому они разделены на связанные группы, называемые модулями. В этом случае Вы можете использовать только те модули, которые необходимы в программе.

Структура модуля

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

Структура модуля аналогична структуре программы, однако есть несколько существенных различий. Например, рассмотрим модуль:

unit <идентификатор>;
interface
uses <список модулей>; {Необязательный}
{открытые описания}
implementation
{закрытые описания процедуры и функции }
begin
{код инициализации }
end.

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

Модуль может использовать другие модули, для этого они определяются в предложении uses. Предложение uses, если имеет место, то следует сразу после ключевого слова interface. Отметим, что здесь выполняется общее правило использования предложения uses: если модуль, имя которого указано в предложении uses, использует другие модули, то имена этих модулей также должны быть указаны в предложении uses, причем до того, как они будут использованы.

Стандартные модули

Turbo

Файл TURBO.TPL содержит все стандартные пакеты, кроме Graph и пакетов совместимости (Graph3 и Turbo3): System, Overlay, Crt, Dos и Printer. Эти пакеты загружаются в память вместе с Турбо-Паскалем и всегда вам доступны. Обычно файл TURBO.TPL хранят в одном каталоге с TURBO.EXE (или TPC.EXE). Вы можете хранить его и в другом каталоге, если он описан как каталог Турбо-Паскаля. Для этого необходимо с помощью TINST.EXE установить этот каталог в файле TURBO.EXE.

System

Используемые пакеты: нет

System содержит все стандартные и встроенные процедуры и функции Турбо-Паскаля. Любая подпрограмма Турбо-Паскаля, не являющаяся частью стандартного Паскаля и не находящаяся ни в каком другом модуле, содержится в System. Этот модуль присоединяется ко всем программам.

Dos

Используемые пакеты: нет

DOS определяет многочисленные паскалевские процедуры и функции, которые эквивалентны наиболее часто используемым вызовам DOS, как например, GetТime, SetТime, DiskSize и так далее. Кроме того, он определяет две программы низкого уровня МsDos и Intr, которые позволяют активизировать любой вызов MS-DOS или системное прерывание. Registers представляет собой тип данных для параметра в МsDos и Intr. Кроме того, определяются некоторые другие константы и типы данных.

Overlay

Используемые пакеты: нет

Overlay - содержит инструменты для создания оверлейных программ. Программа OVERKAY - программа, которая загружается не вся , а по частям.

Crt

Используемые пакеты: нет

Crt обеспечивает набор специфичных для РС описаний констант, переменных и программ для операций ввода/вывода. Последние можно использовать для работы с экраном (задание окон, непосредственное управление курсором, цвет текста и фона). Кроме того, Вы можете осуществлять "необработанный" ввод с клавиатуры и управлять платой генерации звукового сигнала персонального компьютера. Этот модуль обеспечивает множество подпрограмм, которые были стандартными в версии 3.0.

Printer

Используемые пакеты: Crt

В модуле Printer дано описание переменной текстового файла Lst, которая связывается с драйвером устройства, позволяющим направлять стандартный для Паскаля вывод на печатающее устройство с помощью Write и Writeln. Например, включив Printer в свою программу, Вы можете сделать следующее:

Write(Lst,'Сумма ',A:4,' и ',B:4,' равна ');
C:=A + B;
Writeln(Lst,C:8);

Graph3

Используемые пакеты: Crt

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

Turbo3

Используемые пакеты: Crt

Этот модуль содержит две переменные и несколько процедур, которые больше не поддерживаются Турбо-Паскалем. Они включают встроенную файловую переменную Кbd, булеву переменную CBreak и первоначальные целочисленные версии MemAvail и MaxAvail (которые возвращают размер свободной памяти в параграфах, а не в байтах, как это делают настоящие версии).

Graph

Используемые пакеты: Crt

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

Этот модуль реализует независимый от устройства графический драйвер фирмы "Борланд", позволяющий поддерживать графические адаптеры типа СGА, ЕGА, Hercules, АТТ 400, МСGА, 3270 РС и VGА.

Написание собственных модулей

Допустим, Вы написали модуль IntLib, записали его в файл INTLIВ.PAS и оттранслировали на диск; получившийся в результате код находится в файле INTLIВ.ТРU. Для использования этого модуля в программе необходимо включить в нее оператор uses, указывающий компилятору, какой модуль используется. Ваша программа может выглядеть следующим образом:

program MyProg;
uses IntLib;

Отметим, что Турбо-Паскаль предполагает, что файл, в котором находится модуль, имеет такое же имя, что и сам модуль. Если имя Вашего модуля МyUtilities, то Турбо-Паскаль будет искать файл с именем МYUTILIТ.PAS.

Компиляция модуля

Модуль компилируется точно так же, как компилируется программа: он создается с помощью редактора, а затем вызывается команда Соmpile/Соmpile (Компилировать/ Компилировать) (или нажимаются клавиши Аlt-С). Однако, вместо файла с расширением .ЕХЕ Турбо-Паскаль создает файл с расширением .ТРU (Turbо Раscal Unit - модуль Турбо-Паскаля). После этого Вы можете оставить этот файл как есть или же вставить его в ТURВО.TPL с помощью TPUMOVER.ЕХЕ.

В любом случае имеет смысл переслать файлы с расширением *.ТРU (вместе с исходными файлами) в каталог модулей, который определен с помощью команды О/D/Unit directories (Каталоги модулей). В одном исходном файле может находиться только один модуль, поскольку компиляция прекращается, как только обнаружен завершающий оператор end.

Пример:

Напишем небольшой модуль. Назовем его IntLib и вставим в него две простые подпрограммы для целых чисел - процедуру и функцию:

unit IntLib;
interface
procedure ISwap(var I,J: integer);
function IMax(I,J: integer): integer;
implementation
procedure ISwap;
var
Temp: integer;
begin
Temp:=I;
I:=J;
J:=Temp
end; {конец процедуры ISwap }
function IMax;
begin
if I > J then IMax:=I else IMax:=J
end; {конец функции IMax }
end. {конец модуля IntLib }

Введем эту подпрограмму, запишем ее в файл INTLIВ.PAS, а затем оттранслируем на диск. В результате получим код модуля в файле INTLIВ.ТРU. Перешлем его в каталог модулей. Следующая программа использует модуль IntLib:

program IntTest;
uses IntLib;
var
A,B: integer;
begin
Write('Введите два целочисленных значения: ');
Readln(A,B);
ISwap(A,B);
Writeln('A=',A,' B=',B);
Writeln('Максимальное значение равно ',IMax(A,B));
end. {конец программы IntTest }

Все описания внутри модуля связаны друг с другом. Например, модуль Crt содержит все описания, необходимые для подпрограмм работы с экраном на Вашем персональном компьютере.