Структура модуля
Модули предназначены для разбиения текста программы на
несколько файлов. В модулях описываются переменные, константы, типы,
классы, процедуры и функции. Для того чтобы эти объекты можно было использовать
в вызывающем модуле (которым может быть и основная программа), следует указать
имя файла модуля (без расширения .pas) в разделе uses
вызывающего модуля. Файл модуля (.pas) или откомпилированный
файл модуля (.pcu) должен находиться либо в том же
каталоге, что и основная программа, либо в подкаталоге Lib
системного каталога программы PascalABC.NET.
Модуль имеет следующую структуру:
unit
имя модуля
;
interface
раздел интерфейса
implementation
раздел реализации
initialization
раздел инициализации
finalization
раздел финализации
end.
Имеется также упрощенный синтаксис модулей без разделов интерфейса и реализации.
Первая строка обязательна и называется заголовком модуля. Имя модуля должно совпадать с именем файла.
Раздел интерфейса и раздел реализации модуля могут начинаться
с раздела uses
подключения внешних
модулей и пространств имен .NET. Имена в двух разделах
uses
не должны пересекаться.
Раздел
интерфейса
включает объявление всех
имен, которые экспортируются данным модулем в другие модули (при подключении его
в разделе uses
). Это могут быть
константы, переменные, процедуры, функции, классы, интерфейсы. Реализация
методов классов может быть дана прямо в разделе интерфейса, но это не
рекомендуется.
Раздел реализации содержит реализацию всех процедур, функций и методов, объявленных в разделе интерфейса. Кроме этого, в разделе реализации могут быть описания внутренних имен, которые не видны вне модуля и используются лишь как вспомогательные.
Раздел инициализации и раздел финализации
представляют собой последовательность операторов, разделяемых символом ;
. Операторы из раздела
инициализации модуля выполняются до начала основной программы,
операторы из раздела финализации модуля
- после окончания основной программы.
Порядок выполнения разделов инициализации и разделов финализации подключенных
модулей непредсказуем. Как раздел инициализации, так и раздел финализации могут
отсутствовать.
Вместо разделов инициализации и финализации может присутствовать только раздел инициализации в виде
begin
последовательность операторов
en
d.
Например:
unit Lib;
interface
uses GraphABC;
const Dim = 5;
var Colors: array [1..Dim] of integer;
function RandomColor: integer;
procedure FillByRandomColor;
implementation
function RandomColor: integer;
begin
Result := RGB(Random(255),Random(255),Random(255));
end;
procedure FillByRandomColor;
begin
for i: integer := 1 to Dim do
Colors[i] := RandomColor;
end;
initialization
FillByRandomColor;
end.
Циклические ссылки между модулями возможны при определенных ограничениях.