Все программные ресурсы модуля можно разбить на две части:
1) объекты, прямо предназначенные для использования другими программами или модулями,
2) объекты рабочего характера. В соответствии с этим модуль, кроме заголовка, имеет две основные части: интерфейсную и реализации.
Интерфейсная часть содержит описания объектов, доступных из других программ. Их называют объектами, видимыми вне модуля.
В части реализации помещаются рабочие объекты, называемые невидимыми или скрытыми.
Кроме этого, модуль может содержать раздел инициализации, предназначенный для установки начальных значений переменных модуля перед их использованием в программах. Этот раздел начинается со слова begin и содержит последовательность операторов присваивания. Не рекомендуется делать инициирующую часть пустой, лучше ее опустить.
Общая структура модуля:
unit имя
Interface
<описания видимых объектов>
Implementation
<описания скрытых объектов>
Begin
<операторы инициализации объектов модуля>
End.
Если в модуле содержатся процедуры и функции, то её заголовок считается интерфейсной частью, а тело – реализацией. В соответствии с этим в интерфейсной части модуля должны быть представлены только заголовки процедур и функций, а их полные описания должны содержаться в разделе реализации. При этом в разделе реализации можно писать сокращённый заголовок (без описания параметров). Но, если параметры будут описаны, то они должны полностью совпадать с заголовком в интерфейсной части.
Для того чтобы можно было воспользоваться объектами модуля, нужно в программе после заголовка указать: uses <имя модуля>.
Пример 3.1. Реализовать в виде модуля набор подпрограмм для выполнения следующих операций:
а) проверка существования треугольника с заданными сторонами,
б) вычисления площади треугольника по трём сторонам.
С помощью данного модуля решить задачу: ввести стороны трёх существующих треугольников и вывести их площади в порядке возрастания.
Описание модуля для всех реализаций, кроме Паскаля АВС, приведены ниже.
Unit Treug;
Interface {Интерфейсная часть. Описание видимых объектов}
Procedure Prav(x,y,z:Real; Var l:Boolean);
Function Square(x,y,z:Real):Real;
Implementation {Раздел реализации}
Procedure prav; {Проверка существования треугольника}
Begin
l:=(x<y+z) and (y<x+z) and (z<x+y)
End;
Function Square; {Вычисление площади треугольника}
Var p:real;
Begin
p:=(x+y+z)/2;
square:=sqrt(p*(p-x)*(p-y)*(p-z))
end;
End.
После создания текста модуля, его необходимо сохранить под именем Treug.pas. Затем пишем текст основной программы:
Program;
Uses Treug; {Подключение модуля Treug}
Var a,b,c,x:Real;
s: Array [1..3] OfReal;
flag:Boolean;
i:Integer;
Begin
For i:=1 To 3 DoBegin
flag:=false; {признак существования треугольника}
Whilenot flag Do
Begin
ReadLn(a,b,c); {ввод сторон треугольника}
Prav(a,b,c,flag); {проверка существования треугольника}
Ifnot flag Then
WriteLn(‘Треугольник не существует’)
Else
s[i]:=square(a,b,c) {вычисление площади треугольника}
End
End;
If s[1]>s[2] thenbegin {Упорядочение площадей по возрастанию}
x:=s[1]; s[1]:=s[2]; s[2]:=x end;
if s[2]>s[3] thenbegin
x:=s[2]; s[2]:=s[3]; s[3]:=x end;
if s[1]>s[2] thenbegin
x:=s[1]; s[1]:=s[2]; s[2]:=x end;
writeln(s[1],’ ‘,s[2],’ ‘,s[3])
end.
При компиляции модуля создается одноименный файл с некоторым зарезервированным для этих целей расширением. Список возможных расширений откомпилированных модулей для различных систем программирования приведен в таблице 2.
Таблица 2. Расширения файлов откомпилированных модулей
Расширение откомпилированного модуля | Система программирования |
.tpu | Turbo Pascal |
.tpu,.tpp,.tpw | Borland Pascal |
.dcu | Delphi |
.ppu | Free Pascal, Lazarus |
Поскольку система Pascal ABC не создает кода на диске, модули являются аналогом включаемых файлов. В частности, они компилируются всякий раз при компиляции основной программы. Описание аналогичного модуля в Паскале АВС будет иметь вид:
Unit Treug;
Var x,y,z:Real; l:Boolean; {раздел описаний}
Procedure Prav(x,y,z:Real; Var l:Boolean);
Begin
l:=(x<y+z) and (y<x+z) and (z<x+y)
End;
Function Square(x,y,z:Real):Real;
Var p:real;
Begin
p:=(x+y+z)/2;
square:=sqrt(p*(p-x)*(p-y)*(p-z));
end;
initialization {раздел инициализации}
Prav(x,y,z,l);
Square(x,y,z);
end.
За более подробной информацией для работы с модулями воспользуйтесь справкой системы программирования.
Различные системы программирования имеют неодинаковые наборы стандартных модулей. Например, в Turbo Pascal и Borland Pascal часто в программах используются модули CRT и Graph. В модуле Crt сосредоточены процедуры и функции, обеспечивающие управление текстовым режимом работы экрана. С его помощью можно перемещать курсор в любую точку экрана, менять цвет выводимых символов и фона, создавать окна. Модуль GRAPH содержит набор типов, констант, процедур и функций для управления графическим режимом работы экрана. Этот модуль позволяет создавать различные графические изображения и выводить на экран надписи стандартными или созданными программистом шрифтами.