38. Модули в Паскале. Назначение, структура, организация, пример использования.
Модуль - это автономно компилируемая коллекция программных ресурсов, предназначенная для использования другими модулями и программами.
Все ресурсы модуля делятся на две группы: внешние – предназначенные для использования другими программными единицами, и внутренние – рабочие ресурсы данного модуля.
Структура модуля выглядит следующим образом:
Unit <имя модуля>;
Interface
<интерфейсная секция>
Implementation
<секция реализации>
[Begin
<секция инициализации>]
End,
Имя модуля должно совпадать с именем файла, в котором он содержится. Интерфейсная секция содержит объявление ресурсов (в том числе заголовки подпрограмм), к которым возможны обращения извне. Секция реализации содержит описание подпрограмм, объявленных в интерфейсной секции, и описание внутренних ресурсов модуля (локальных переменных, типов, подпрограмм). Обращение к этим ресурсам возможно только из подпрограмм, описанных в том же модуле. Секция инициализации содержит операторы, которые выполняют некоторые действия, необходимые для нормальной работы процедур модуля (например, открывают файлы, инициализируют некоторые переменные и т.п.). Операторы секции инициализации выполняются один раз (при подключении модуля) до начала выполнения основной программы. Эта секция в модуле может отсутствовать.
Программа, которая использует ресурсы нескольких модулей, должна в области описаний содержать спецификацию используемых модулей:
Uses <имя модуля1>, <имя модуля2>, ...;
В спецификации uses необходимо указывать только те модули, ресурсы которых данная программная единица (программа или модуль) использует непосредственно. Если подключаемый модуль использует другие модули, то их подключение уже описано в нем. Секции инициализации подсоединяемых модулей выполняются в порядке их подключения.
Пример: Разработать модуль, содержащий подпрограмму суммирования элементов массива.
Разбиваем текст программы на две части: подпрограмму размещаем в модуле, а тестирующую программу оставляем в качестве основной программы. Так как все структурные типы параметров должны быть предварительно объявлены, описываем тип массива в модуле.
{Модуль должен размещаться в файле Summa.pas}
Unit Summa;
Interface {объявление внешних ресурсов}
Туре mas=array[1..10] of integer;
Function sum(b:mas;n:integer):integer;
Implementation .
Function sum; {описание функции}
Var s,i: integer;
begin
s:=0;
for i:=1 to n do s:=s+b[i];
sum:=s;
end;
end.
Программа использует из модуля два ресурса: описание типа mas для объявления массива А и функцию Sum.
Program ex;
Uses Summa; {указание используемого модуля}
Var a:mas; {используем ресурс mas}
i,n: integer;
Begin
readln(n);
for i:=1 to n do re ad (a [i]);
ReadLn;
WriteLn('Сумма= sum(a,n)); {используем ресурс sum}
end.