Раздел инициализации initialization

Модули

Модуль и модульное программирование

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

Объекты модуля можно использовать, подключив модуль к основной программе или к другому модулю, указав его имя в предложении uses список_подключаемых_модулей.

Модульное программирование, т.е. организация программы как совокупности модулей, позволяет:

- разбивать программу на отдельные модули, которые можно разрабатывать одновременно группой разработчиков;

- уменьшить время перекомпиляции при изменениях программы, т.к. перекомпилируются только измененные модули;

- повторно использовать модули в других программах;

- создавать стандартные библиотечные модули, поставляемые вместе с компилятором.

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

Модуль состоит из заголовка модуля, двух основных разделов – интерфейса и реализации, а также разделов инициализациии завершения:

unit имя_модуля; //Заголовок модуля

interface //Раздел интерфейса

[uses список_модулей;]

{Раздел описаний, «видимый» вне модуля}

implementation //Раздел реализации

[uses список_модулей;]

{Раздел описаний, скрытый от других программ и модулей}

initialization //Раздел инициализации

{Операторы, выполняемые до начала работы основной программы}

finalization //Раздел завершения

{Операторы, выполняемые после окончания работы основной программы}

end.

Пример модуля и его использования

Модуль содержит описание переменной R и описание функции Circle, вычисляющей длину окружности.

unit geometry; //Модуль

interface //Раздел интерфейса

var R: real;

function Circle(R: real): real;

implementation //Раздел реализации

function Circle(R: real): real;

begin

Result := 2*pi*R

end;

end.

Исходный текст модуля сохраним под именем geometry.pas в том же каталоге, где и исходный текст программы.

program prog; //Основная программа

uses geometry; //Подключение модуля geometry

begin

readln(R); //Используется переменная R и

writeln(Circle(R)) //функция Circle из модуля geometry

end.

Если модуль разместить в другом каталоге, тогда в uses надо указать имя файла и путь к нему. Например:

uses geometry in '..\my_unit\geometry.pas';

Указанный путь означает, что надо выйти из текущего каталога и войти в каталог my_onit.

Заголовок модуля

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

Раздел интерфейса interface

Раздел интерфейса состоит из описаний типов, констант, переменных и подпрограмм, которые становятся доступными основной программе и/или другому модулю после подключения данного модуля. Для подпрограмм здесь описываются только заголовки с обязательным полным описанием формальных параметров (но, в отличие от предварительного описания, без служебного слова forward). Полное описание подпрограмм помещается в разделе реализации.

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

Раздел реализации implementation

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

Раздел инициализации initialization

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

Операторы разделов инициализации всех модулей, используемых в основной программе, выполняются до передачи управления основной программе в том порядке, в каком имена модулей перечислены в предложении uses программы.

Если модуль М1 подключает модуль М2, то раздел инициализации модуля М2 будет выполнен раньше раздела инициализации модуля М1.

Если инициализация не нужна, зарезервированное слово initialization может быть опущено.

Наши рекомендации