![]() |
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Зачем нужны модули и какие есть средства, аналогтчные (в какой-то мере) модулям
Следует заметить, что строить большие программы по модульному принципу можно и без использования модулей. Для этого есть, по крайней мере, следующие возможности: - разбить исходный текст программы (на Паскале) на части и хранить каждую часть в отдельном файле; к основной части можно программе подключать с помощью директивы {$I имя_файла}
можно указывать путь - - использовать динамически связываемые библиотеки - DLL (Dynamically Linked Libraries); такая возможность есть только при работе в защищенном режиме DOS или под MS Windows; структура DLL похожа на структуры программы, но вместо слова program используется слово library; при компиляции такой структурной единицы получается файл с расширением.dll; особенностью использования DLL является то, что: Структура модуля аналогична структуре программы, однако есть несколько существенных различий. В общем случае можно выделить три группы объектов, из которых состоит модуль: 1) объекты предназначенные для использования в других модулях и программах (видимые в других модулях); 2) объекты, которые должны быть видимыми только в данном модуле; 3) действия, которые надо выполнить для инициализации переменных, используемых в модуле, и данные, которые надо инициализировать (в самом начале работы). Поэтому модуль обычно имеет следующую структуру:
unit < имя модуля/идентификатор>; {заголовок модуля (обязателен)}
В частном случае модуль может не содержать все три части, тогда это будет пустой модуль: unit < имя модуля>; {заголовок модуля} interface implementation
Интерфейсная секция Все, что здесь перечисляется (константы, типы, переменные, заголовки процедур и функций), будет видимо из программы и модулей, использующих данный модуль. Другими словами, здесь описывается интерфейс (стыковочные узлы) данного модуля с другими модулями и программами. NB: В этой секции обычно приводятся только заголовки подпрограмм. Их полное описание обычно помещают в секцию реализации. Секция реализации Описанные в интерфейсной секции обычные процедуры и функции, должны описываться полностью (заголовок + описания + вложенные процедуры и функции + тело) в секции реализации. Заголовок procedure/function должен быть или идентичным тому, который указан в секции интерфейса, или иметь краткую форму (без списка формальных параметров и круглых скобок). Только здесь описываются те процедуры и функции, которые надо скрыть от использования сторонними модулями, при этом заголовки этих процедур и функций не задаются в секции интерфейса. Обычно так поступают с теми процедурами и функциями, которые предназначены для работы самого модуля. Подпрограммы, локальные для секции реализации (то есть не описанные в секции интерфейса), должны иметь полный (несокращенный) заголовок. Таким образом, кроме процедур и функций (заголовки которых приведены в интерфейсной секции) в секции реализации также описываются константы, переменные, процедуры и функции, являющиеся глобальными/видимыми по отношению к подпрограммам секции реализации, но являющиеся одновременно локальными, то есть недоступными (невидимыми) для основной программы и других модулей. Секция инициализации Обычно вся секция реализации модуля заключена между зарезервированными словами implementation и end. Однако, если перед end поместить зарезервированное слово begin, а между ними - операторы, то получившийся составной оператор, очень похожий на основное тело программы, становится секцией инициализации модуля (initialization). Секция инициализации представляет собой место, где инициализируются структуры данных (переменные), которые использует модуль или которые он делает доступными программе, использующей данный модуль. Можно, например, использовать эту секцию для открытия файлов, которые программа будет использовать позднее, или для инициализации указателей. При выполнении программы, использующей некоторый модуль, секция инициализации этого модуля вызывается перед запуском основного тела программы. Если программа использует более одного модуля, то секции инициализации всех модулей вызываются (в порядке, в котором модули указаны в операторе uses в программе) перед тем, как выполнить основное тело программы. Популярное:
|
Последнее изменение этой страницы: 2016-07-12; Просмотров: 693; Нарушение авторского права страницы