Введение в объектно-ориентированное программирование на языке Object Pascal. Соколов Е.В. - 14 стр.

UptoLike

Составители: 

14
остальных случаях соответствующий оператор uses помещается в раз -
дел реализации.
Порядок подключения модулей определяет и порядок сраба тыва-
ния их разделов инициализации и финализации, причем существенными
здесь оказ ы ваются не только вид графа зависимостей, но и очередность
перечисления модулей в оп ераторах uses. Последовательность выпол -
нения этих разделов определяется индуктивно следующим образом .
Для модуля, не использующего других модулей, процедурой ини-
циал изации будем называть простой вызов его раздела инициализации,
если только он уже не был выполнен ранее. Пусть теперь модуль A под -
ключает мод у ли B
1
, B
2
, ¼, B
n
(именно в таком порядке). Тогда процедура
инициализации модуля A будет состоять в последовательном вызове
процедур инициализации модулей B
1
, B
2
, ¼, B
n
и завершаться выполне-
нием раздела инициализации модуля A (снова при условии, что это не
было сделано ранее). Таким образом , процедура инициализации основ -
ной программы приводит к однократному исполнению разделов ини-
циализации всех модулей, косвенно ею используемых. Разделы финал и-
зации вызываются в обратном порядке.
Рассмотрим небольшой пример. Пусть программа Program1 с о-
держит оператор uses Unit1, Unit2, Unit3; и пусть модули Unit1 и Unit2
также используют модуль Unit3. Тогда граф зависимостей модулей в ы -
глядит следующим обр а зом :
После старта приложения начинается инициализация основной
програм мы и первой вызывается процедура инициализации модуля
Unit1. Поскольку он использует Unit3, то сначала выполняется раздел
инициализации Unit3, а затем Unit1. Далее следует процедура инициа-
лизации модуля Unit2. Так как Unit3 уже был инициализирован, она сво-
дится к вызову раздела инициализации Unit2. Третьей по счету выполня-
ется процедура инициализации Unit3, которая просто ничего не делает.
Теперь наступает черед основного блока программы, по з авершении
работы которого разделы финализации модулей исполняются в обрат -
ном порядке: Unit2, Unit1, Unit3.
Этот пример показывает, в частности, что последовательность
инициализации модулей не всегда очевидна разработчику программы.
Program1
Unit1
Unit2
Unit3
ос т ал ь ны хс л учаяхс оот в ет с т в ующий оператор uses пом ещает с я в раз -
д ел реал из ации.
          Поряд ок под кл ючения м од ул ей опред ел яет и поряд ок с рабат ы в а-
ния ихраз д ел ов инициал из ации и финал из ации, причем с ущес т в енны м и
з д ес ь оказ ы в ают с я не тол ь ков ид графа з ав ис им ос т ей, нои очеред нос т ь
перечис л ения м од ул ей в операторах uses. Пос л ед ов ат ел ь нос т ь в ы пол -
нения э т ихраз д ел ов опред ел яет с я инд укт ив нос л ед ующим образ ом .
          Дл я м од ул я, не ис пол ь з ующегод ругихм од ул ей, процед урой ини-
циал из ации буд ем наз ы в ат ь прос той в ы з ов его раз д ел а инициал из ации,
ес л и тол ь коон уже не бы л в ы пол нен ранее. Пус т ь т еперь м од ул ь A под -
кл ючает м од ул и B1, B2, ¼, Bn (им еннов т аком поряд ке). Тогд а процед ура
инициал из ации м од ул я A буд ет с ос тоят ь в пос л ед ов ат ел ь ном в ы з ов е
процед ур инициал из ации м од ул ей B1, B2, ¼, Bn и з ав ерш ат ь с я в ы пол не-
нием раз д ел а инициал из ации м од ул я A (с нов а при ус л ов ии, что э то не
бы л ос д ел аноранее). Т аким образ ом , процед ура инициал из ации ос нов -
ной програм м ы прив од ит к од нократ ном у ис пол нению раз д ел ов ини-
циал из ации в с ехм од ул ей, кос в енноею ис пол ь з уем ы х. Раз д ел ы финал и-
з ации в ы з ы в ают с я в обрат ном поряд ке.
          Рас с м от рим небол ь ш ой прим ер. Пус т ь програм м а Program1 с о-
д ержит оператор uses Unit1, Unit2, Unit3; и пус т ь м од ул и Unit1 и Unit2
т акже ис пол ь з уют м од ул ь Unit3. Т огд а граф з ав ис им ос т ей м од ул ей в ы -
гл яд ит с л ед ующим образ ом :

                                      Program1


                         Unit1          Unit2           Unit3



         Пос л е с т арт а прил ожения начинает с я инициал из ация ос нов ной
програм м ы и перв ой в ы з ы в ает с я процед ура инициал из ации м од ул я
Unit1. Пос кол ь ку он ис пол ь з ует Unit3, то с начал а в ы пол няет с я раз д ел
инициал из ации Unit3, а з ат ем — Unit1. Дал ее с л ед ует процед ура инициа-
л из ации м од ул я Unit2. Т ак как Unit3 уже бы л инициал из иров ан, она с в о-
д ит с я к в ы з ов у раз д ел а инициал из ации Unit2. Т рет ь ей пос чет у в ы пол ня-
ет с я процед ура инициал из ации Unit3, которая прос то ничего не д ел ает.
Т еперь нас тупает черед ос нов ного бл ока програм м ы , по з ав ерш ении
работ ы которого раз д ел ы финал из ации м од ул ей ис пол няют с я в обрат -
ном поряд ке: Unit2, Unit1, Unit3.
         Э тот прим ер показ ы в ает, в час т нос т и, что пос л ед ов ат ел ь нос т ь
инициал из ации м од ул ей не в с егд а очев ид на раз работ чику програм м ы .

                                          14