9.2 Заголовок модуля и
связь модулей друг с другом
9.3 Интерфейсная часть
9.4 Исполняемая часть
9.5 Инициирующая часть
9.6 Компиляция модулей
9.7 Доступ к объявленным в
модуле объектам
9.8 Стандартные модули
МОДУЛИ
Стандартный Паскаль в том виде, как он
описан в [6], не предусматривает
механизмов раздельной компиляции частей
программы с последующей их сборкой перед
выполнением. Более того,
последовательное проведение в жизнь
принципа обязательного описания любого
объекта перед его использованием делает
фактически невозможным разработку
разнообразных библиотек прикладных
программ. Точнее, такие библиотеки в
рамка стандартного Паскаля могут
существовать только в виде исходных
текстов программист должен сам включать
в программу подчас весьма обширны тексты
различных поддерживающих процедур, таких,
как процедуры матричной алгебры,
численного интегрирования,
математической статистик И Т.П.
Вполне понятно, поэтому стремление
разработчиков коммерчески: компиляторов
Паскаля включать в язык средства,
повышающие его модульность. Чаще всего
таким средством является разрешение
использовать внешние процедуры и функции,
тело которых заменяется
зарезервированным словом EXTERNAL.
Разработчики Турбо Паскаля пошли в этом
направлении еще дальше, включив в язык
механизм так называемых модулей.
Модуль - это автономно компилируемая
программная единица, включающая в себя
различные компоненты раздела описаний (типы,
константы, переменные, процедуры и
функции) и, возможно, некоторые
исполняемые операторы инициирующей
части. По своей организации и характеру
использования в программе модули Турбо
Паскаля близки к модулям-пакетам (PACKAGE)
языка программирования Ада [12]. В них так
же, как в пакетах Ады, явным образом
выделяется некоторая «видимая»
интерфейсная часть, в которой
сконцентрированы описания глобальных
типов, констант и переменных, а также
приводятся заголовки глобальных
процедур и функций. Появление объектов в
интерфейсной части делает их доступными
для других модулей и основной программы.
Тела процедур и функций располагаются в
исполняемой части модуля, которая может
быть скрыта от пользователя.
Насколько сильно изменяются
свойства языка Паскаль при введении
механизма модулей свидетельствует
следующее замечание его автора Н.Вирта [3,
с.89], сделанное им по поводу более
позднего языка Модула-2: «Модули - самая
важная черта, отличающая язык Модула-2 от
его предшественника Паскаля». Кстати, из
пяти основных отличий Модулы-2 от Паскаля,
сформулированных Н.Виртом в предисловии
к книге [3], три -модули, средства
программирования низшего уровня и
процедурные типы - реализованы в Турбо
Паскале.
Модули представляют собой
прекрасный инструмент для разработки
библиотек прикладных программ и мощное
средство модульного программирования.
Важная особенность модулей заключается в
том, что компилятор Турбо Паскаля
размещает их программный код в отдельном
сегмента памяти. Максимальная длина
сегмента не может превышать 64 Кбайта,
однако количество одновременно
используемых модулей ограничивается
лишь доступной памятью, что дает
возможность создавать весьма крупные
программы.
9.1. СТРУКТУРА МОДУЛЕЙ
9.2. ЗАГОЛОВОК МОДУЛЯ И СВЯЗЬ МОДУЛЕЙ ДРУГ С ДРУГОМ
9.3. ИНТЕРФЕЙСНАЯ ЧАСТЬ
9.4. ИСПОЛНЯЕМАЯ ЧАСТЬ
9.5. ИНИЦИИРУЮЩАЯ ЧАСТЬ
9.6. КОМПИЛЯЦИЯ МОДУЛЕЙ
В среде Турбо Паскаля имеются
средства, управляющие способом:
компиляции модулей и облегчающие
разработку крупных программных проектов.
В частности, определены три режима
компиляции: COMPILE МАКЕ и BUILD (см. прил. 1).
Режимы отличаются только способом связи,
компилируемого модуля или основной
программы с другими модулями,
объявленными в предложении USES.
При компиляции модуля или
основной программы в режиме COMPILE все
упоминающиеся в предложении USES модули
должны быть предварительно
откомпилированы и результаты компиляции
помещены в одноименные файлы с
расширением .TPU. Например, если в
программе (модуле) имеется предложение
Uses Global;
то на диске в каталоге, объявленном
опцией UNIT DIRECTORIES (см. прил.1), уже должен
находиться файл GLOBAL.TPU. Файл с расширением
TPU (от англ. Turbo Pascal Unit) создается в
результате компиляции: модуля.
В режиме МАКЕ компилятор проверяет
наличие TPU-файлов для каждого
объявленного модуля. Если какой-либо из
файлов не обнаружен, система пытается
отыскать одноименный файл с расширением .PAS,
т.е. файл с исходным текстом модуля, и,
если .RAS-файл найден, приступает к его
компиляции. Кроме того, в этом режиме
система следит за возможными изменениями
исходного текста любого используемого
модуля. Бели в PAS-файл (исходный текст
модуля) внесены какие-либо изменения, то
независимо от того, есть ли уже в каталоге
соответствующий TPU-файл или нет, система
осуществляет его компиляцию перед
компиляцией основной программы. Более
того, если изменения внесены в
интерфейсную. часть модуля, то будут
перекомпилированы также и все другие
модули, обращающиеся к нему. Режим МАКЕ,
таким образом, существенно облегчает
процесс разработки крупных программ с
множеством модулей: программист
избавляется от необходимости следить за
соответствием существующих TPU-файлов их
исходному тексту, так как система делает
это автоматически.
В режиме BUILD существующие TPU-файлы
игнорируются, и система пытается
отыскать (и компилировать)
соответствующий P-AS-файл для каждого
объявленного в предложении USES модуля.
После компиляции в режиме BUILD программист
может быть уверен в том, что учтены все
сделанные им изменения в любом из модулей.
Подключение модулей к основной программе
и их возможная компиляция осуществляются
в порядке их объявления в предложении USES.
При переходе к очередному модулю система
предварительно отыскивает все модули, на
которые он ссылается. Ссылки модулей друг
на друга могут образовывать древовидную
структуру любой сложности, однако
запрещается явное или косвенное
обращение модуля к самому себе. Например,
недопустимы следующие объявления:
Unit A; Unit В;
Interface Interface
Uses S; Uses A;
Implementation Implementation
end.
9.8. СТАНДАРТНЫЕ МОДУЛИ