Особенности компиляции программы модульной структуры.

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

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

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

Например, если модули с именами М1,М2 содержат одноименные тип А, переменная В и подпрограмма С, то после подключения этих моделей USES обращения к А, В, С в этой ПЕ будут эквивалентны обращениям к объектам к модулю М2.

Но чтобы характеризовать корректность обращений к нужным одноименным объектам разных подключенных модулей целесообразно при обращении к модулю сначала указывать имя модуля, а через точку имя объекта: М1.А М1.В М1.С М2.В.

Такие универсальные рекомендации можно сформулировать за "базу" некоторую большую программу блочной структуры.

Очевидно, что весьма несложно разделить большую программу на две части (ПЕ), т.е. основная программа + модули.

Размещая каждую ПЕ в свой сегмент памяти и в свой дисковый файл.

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

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

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

 

 

В среде ТР имеются средства, управляющие различными способами компиляции модулей.

 

COMPILE

Compile Alt+F9 RUN Cntr+F9

Make F9

Build

Primary file

Destination Memory

Эти режимы отличаются только способом связи и основной программой.

 

Режим Compile

Компилирует основную программу или модуль, который находится в этот момент в активном окне редактора. Если в этой ПЕ содержится обращение к нестандартным модулям пользователя, то этот режим требует наличия заранее одноименных дисковых файлов с расширением ___.tpu для каждого такого подключаемого модуля.

При наличии Destination сохранены в памяти, то эти файлы остаются только в памяти, а дисковый файл не создается.

Однако гораздо проще создавать tpu –файлы заодно с компилятором всей программы с помощью других режимов, которые не требуют задания Disk для опции destination.

 

Режим Make

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

1) Существования дискового tpu –файла; если его нет, то он создается автоматически путем компилирования исходного текста модуля, т.е. его pas-файл

2) Соответствие найденного tpu –файла исходному тексту модуля, куда могли быть внесены изменения; в противном случае tpu –файл автоматически создается заново

3) Неизменность интерфейсного раздела модуля: если он изменился, то перекомпилируются также все те модули (их исходные pas-файлы), в которых данный модуль указан в предложении USES.

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

 

Режим Build

В отличие от режима Make обязательно требует наличие исходных pas-файлов; проводит компиляцию (перекомпиляцию) каждого модуля и тем самым гарантирует учет всех изменений в текстах pas-файлов. Это увеличивает время компиляции программы в целом.

В отличии от режима сompile режим Make и Build позволяют начинать компилировать программу модульной структуры с любого заданного pas-файла (его и называют первичным) независимо от того, какой файл (или часть программы) находится в активном окне редактора. Для этого в пункте сompile выбирают опцию Primary file нажимают Enter и записывают имя первичного pas-файла и тогда компиляция начнется именно с этого файла.

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