|
|
|
|
Опции проектирования
Модульное проектирование и декомпозиция относятся к процессу расчленения больших проблем на более узкие, более управляемые подпроблемы. Первым
шагом проектирования является решение, в каком месте должна быть граница между этими подпроблемами
Для получения максимальных преимуществ от использования модульного программирования каждая подпроблема или модуль должны иметь один вход и один
выход. В этом случае можно легко отслеживать поток управления в программе. В любом месте модуля должна иметься возможнось увидеть точку входа в
модуль и сказать: "Я знаю значения регистров X,Y и Z в этой точке, потому что они указываются как...", и затем проследить функционирование модуля
без тревоги об искажении программы. Один вход обеспечивает возврат потока управления в точку вызова при вызове модуля. По этой причине, модульные
программы почти всегда выполняются как структуры CALL-RET.
Использование нескольких предложений RET в модуле не должно нарушать правило одного входа, поскольку все инструкции RET возвращают управление в
одну и ту же точку. Точно также, переход к общему RET в конце модуля, не изменяет структуру модуля, а добавляет лишь коды в модуль и увеличивает его
сложность. С другой стороны, вход или выход из модуля не по этому правилу перечеркивает наибольшие преимущества модульного программирования: ясность,
удобство сопровождения.
Имеется исключение из правила входа в модуль. Это происходит при использовании таблицы переходов для реализации потока управления внутри программы.
Таблица перехода используется путем "проталкивания" адреса возврата в стек, вычисления индекса требуемого адреса перехода в таблице и выполнения
перехода в памяти. Пример этого приема показан в листинге программы драйвера устройства, приведенной в главе 6.
При практическом выполнении декомпозиции модулей можно самим найти некоторое количество альтернативных решений. Прежде чем осуществить правильный
выбор, необходимо знать альтернативы. Цель состоит в выборе таких альтернатив, которые создадут наилучшие условия проектирования.
|
|