|
В общем случае рассматриваемая схема связи между модулями требует, чтобы составитель модуля Ми обращающегося к модулю М;*, знал количество k (и, разумеется, смысл) переменных хи xk, значения которых являются исходными для работы модуля My, а также количество s переменных уг, ys, значения которых модуль Mj вырабатывает в качестве результата. В каждом из этих модулей как для переменных хъ xk, так и для переменных должны быть выделены в силу основных принципов модульного программирования свои рабочие ячейки. Пусть обозначения х[,xlk заменяют адреса ячеек, выделенных для хранения значений переменных х1у xk в модуле М]. Аналогичный смысл имеют обозначения х{> У\> У\ и у{, у[. Тогда часть модуля М., связанная с обращением к модулю Mjy должна быть такой: "Команды, вычисляющие значения" "Команды, использующие значения" переменных ylt ys из ячеек Здесь р1и. и р1к. — адреса рабочих ячеек модуля М., используемых для передачи управления модулю Mj. Однако этот переход управления осуществляется не прямо, а через специальный блок связи, имеющий совершенно стандартный вид: В этом блоке рн/ и pKJ- — уже истинные адреса входа и выхода модуля М). Команда р засылает в ячейку р{к. команду О ПВ О р+1 о чем обеспечивается возврат в модуль М{ (через блок связи). Осталось лишь потребовать, чтобы ячейка plnj содержала команду (ПВ) Для этого среди команд пересылки аргументов обращения к модулю Mi (аналогичных командам rtj + ri} + k — 1) должна содержаться команда Команда q однотипна со всеми другими командами пересылки аргументов. Можно записать вместо нее команду q О ПВ ri} q + l р'н/ Нарушение стиля команд пересылки аргументов обращения окупается тем, что не нужно запасать заготовку гц. После такой стандартизации команд связи между модулями для общего случая, становится ясно, что схема связи совсем не сложна. Следующее сомнение, которое может возбудить эта схема, — не слишком ли много команд занимает каждое обращение из одного модуля к другому? Если обращение к модулю возникает лишь в одном месте программы, то ради экономии памяти и сокращения потерь времени можно, используя модуль как образец, переписать его на этом месте, учитывая то распределение памяти, которое % принято для параметров обращения. Но такое переписывание более трудоемко, чем составление шаблонных команд обращения, и сопряжено со значительно большей возможностью появления ошибок,
|