Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TP_теория и практикум.doc
Скачиваний:
10
Добавлен:
20.08.2019
Размер:
861.7 Кб
Скачать

Uses mod 1, mod 2, mod 3; (подключение трех модулей) Общая структура модуля

В языке Turbo Pascal модуль (unit) считается отдельной программой. Если подпрограмма является структурным элементом и не может существовать вне ее, то модуль представляет собой отдельно хранимую и независимо компилируемую единицу.

Модуль - это совокупность программных ресурсов, предназначенных для использования другими модулями и программами. (Под ресурсами здесь понимаются любые объекты языка: константы, типы, переменные, подпрограммы).

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

Наличие модулей в Turbo Pascal позволяет программировать и отлаживать программу по частям, создавать библиотеки подпрограмм и данных пользоваться возможностями стандартных модулей.

Модуль состоит из следующих частей:

заголовок модуля,

интерфейс модуля,

исполнительная часть модуля (реализация),

секция инициализации.

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

Заголовок модуля состоит из зарезервированного слова unit и идентификатора. Модуль должен быть помещен в файл, имя которого совпадает с именем модуля, а его расширение должно быть .pas.

Главными частями модуля являются:

Объекты для использования другими программами или модулями (интерфейс);

Объекты рабочего характера (реализация).

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

В части реализации помещены рабочие объекты называемые невидимыми или скрытыми.

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

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

Интерфейс начинается словом interface. Далее после слова uses указываются имена модулей, которые используются (необязательная часть). После этого могут идти разделы объявления констант, типов, переменных, процедур и функций.

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

Procedure имя;

Доступ к интерфейсным объектам модуля достигается с помощью спецификации используемых модулей:

Uses U1, U2, U3; (идентификаторы (имена) модулей).

Эта спецификация идет сразу после заголовка программы.

Возможны случаи косвенного использования модуля:

Unit А;

Unit В;

Interface

Interface

……….

Uses A;

End.

……….

End.

Схема использования модулей может образовывать древовидную структуру любой сложности. Недопустимо обращение модуля к самому себе:

Unit А;

Unit В

Так нельзя!

Interface

Interface

Unit В;

Unit A;

……….

……….

End.

End.

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

Реализация, или исполнительная часть модуля включает все подпрограммы модуля. Она может также включает локальные метки, константы, типы и переменные. Исполнительная часть начинается словом implementation. Затем после слова uses указываются имена модулей, которые используются подпрограмма данной исполнительной части (этот раздел необязателен). Если какой-то модуль уже указан в интерфейсе модуля, то в исполнительной части его повторять не следует. Далее могут идти разделы объявления меток, локальных констант, локальных типов, локальных переменных.

Затем идут описания локальных подпрограмм модуля. При описании подпрограмм допустимо использовать сокращенные заголовки (как и в случае использования директивы forward).

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

Секция инициализации. В некоторых случаях перед обращением к модулю следует провести инициализацию (например, установить связь с тем или иными файлами с помощью процедуры Assign, инициализировать какие-то переменные и т. д.). Некоторые действия можно выполнить в секции инициализации модуля. Эта секция начинается словом begin, после которого идут исполняемые операторы, а затем – слово end. (с точкой).

Пример. begin

assign (F1,` File1.dat`)

end.

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

Если инициализация модуля не нужна, то в секции инициализации помещается только end. (с точкой).

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

Общая структура модуля:

Unit имя модуля;

Interface

Описание видимых объектов

Implementation

Описание скрытых объектов

begin

операторы инициализации

объектов модуля

end.

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

Unit Calendar;

Interface

Type

Day = (Mon, Tue, Wed, Th, Fri, Sat, Sun);

Working days = Mon.. Fri;

Months = (Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);

Summer = Jan .. Aug;

Autumn = Sep.. Nov;

Spring = Mar Apr May;

Day № = 1..31;

year №= 1900.2000;

Date = record;

Day: Day №;

Month: Months;

Year: year №;

end;

Implementation

end.

Данный модуль, ввиду своей простоты, не содержит разделов реализации и инициализации.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]