Описание подключаемых модулей (Uses)

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

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

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

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

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

<модуль>::= <заголовок модуля> ";"

<раздел интерфейса>";"

<раздел реализации>";".

["Begin" <раздел инициализации] "End" ".".

Модуль оформляется в виде отдельного файла с расширением ".pas". Имя файла должно быть таким же, как и имя модуля (поэтому в Turbo Pascal, предназначенном для работы в операционной системе MS DOS, длина имени модуля не должна превышать 8 символов – такая длина разрешена для имен файлов в MS DOS).

Файлы исходных текстов модулей должны размещаться в каталоге (папке), объявленном в меню Options-Compiler-Directories-Unit Directories.

<заголовок модуля>::= "Unit" <имя модуля>.

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

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

<раздел интерфейса>::= "Interface" [<описание Uses>] {<описание констант>|<описание типов>| <описание переменных>| <описание заголовков процедур и функций>}.

Назначение описания Uses и его формат описаны ниже. Структура остальных описаний – такая же, как в стандартном Паскале с расширением синтаксиса, принятом в Turbo Pascal. Процедуры и функции в этом разделе не описываются – только их заголовки. Это похоже на опережающее описание, только не используется слово Forward.

Метки здесь не описываются (см. синтаксис меток).

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

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

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

<раздел реализации>::= "Implementation" [[<описание Uses>] {<описание констант>|<описание типов>| <описание переменных>| <описание процедур и функций>}].

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

Раздел реализации должен присутствовать в модуле обязательно, но он может быть пустым (не содержать никаких описаний после слова Implementation). Такое возможно, если модуль предназначен только для того, чтобы предоставлять описания констант, типов и переменных в готовом виде и не содержит собственных алгоритмов.

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

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

Описание Uses предназначено для подключения модулей к программе или к модулю других модулей. Это описание должно быть самым первым после заголовка программы (если он присутствует) или заголовка модуля. То есть, он должен предшествовать всем остальным разделам описаний программы или модуля.

<описание Uses>::= "Uses" <имя модуля> {"," имя модуля}";".

Описание Uses не обязательное. Оно нужно только в том случае, если к программе или модулю подключаются другие модули.

Если модуль G подключен к модулю F, а модуль F подключен к программе, то видимость в программе компонентов, объявленных в модуле G, зависит от того, помещено ли описание Uses в модуле F в раздел интерфейса или в раздел реализации. Если нужно, чтобы интерфейсные компоненты модуля G были доступны и в модуле F, и в программе, необходимо описать модуль G и там, и там.

Надо учитывать, что модули, имена которых объявлены в Uses, подключаются и инициализируются в той последовательности, в которой они объявлены. Если модуль G используется модулем F, причем оба модуля содержат разделы инициализации, и оба модуля нужно включить в программу, то модуль G должен быть описан перед описанием модуля F, чтобы раздел инициализации модуля G выполнился до того, как модуль F станет выполнять свой раздел инициализации, обращаясь при этом к модулю G.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: