Структура модуля
Структура модуля
Модули предназначены для разбиения текста программы на несколько файлов. В модулях описываются переменные, константы, типы, классы, процедуры и функции. Для того чтобы эти объекты можно было использовать в вызывающем модуле (которым может быть и основная программа), следует указать имя файла модуля (без расширения .pas) в разделе uses вызывающего модуля. Файл модуля (.pas) или откомпилированный файл модуля (.pcu) должен находиться либо в том же каталоге, что и основная программа, либо в подкаталоге Lib системного каталога программы PascalABC.NET.
Модуль имеет следующую структуру:
unit имя модуля;
interface
раздел интерфейса
implementation
раздел реализации
initialization
раздел инициализации
finalization
раздел финализации
end.
Имеется также упрощенный синтаксис модулей без разделов интерфейса и реализации.
Первая строка обязательна и называется заголовком модуля. Имя модуля должно совпадать с именем файла.
Раздел интерфейса и раздел реализации модуля могут начинаться с раздела uses подключения внешних модулей и пространств имен .NET. Имена в двух разделах uses не должны пересекаться.
Раздел интерфейса включает объявление всех имен, которые экспортируются данным модулем в другие модули (при подключении его в разделе uses). Это могут быть константы, переменные, процедуры, функции, классы, интерфейсы. Реализация методов классов может быть дана прямо в разделе интерфейса, но это не рекомендуется.
Раздел реализации содержит реализацию всех процедур, функций и методов, объявленных в разделе интерфейса. Кроме этого, в разделе реализации могут быть описания внутренних имен, которые не видны вне модуля и используются лишь как вспомогательные.
Раздел инициализации и раздел финализации представляют собой последовательность операторов, разделяемых символом ;. Операторы из раздела инициализации модуля выполняются до начала основной программы, операторы из раздела финализации модуля - после окончания основной программы. Порядок выполнения разделов инициализации и разделов финализации подключенных модулей непредсказуем. Как раздел инициализации, так и раздел финализации могут отсутствовать.
Вместо разделов инициализации и финализации может присутствовать только раздел инициализации в виде
begin
последовательность операторов
end.
Например:
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.
Циклические ссылки между модулями возможны при определенных ограничениях.