Здесь ограничивается разнообразие связей модулей (подпрограмм) по вызовам, т.е. ограничиваются виды графов вызова:
А) Строгая иерархия: граф вызовов – дерево.
Достоинства:
- Вложенные процедуры (Алгол, ранний Паскаль не имели библиотечных подпрограмм) --> понятность кода
- Облегчается отладка, т.к. единственная цепочка вызовов для любого модуля
Недостаток: необходимость дублирования модулей для выполнения одинаковых функций на нижних уровнях иерархии. (NB: в С/С++ нет вложенных функций.)
В) Поуровневая (layered) структуризация: граф – гамак (расширение дерева перекрестными дугами между ярусами) или "слоеный пирог" - рис. 6-3:
| ||||
Рис 6-3
| |||||||||||
| |||||||||||
| |||||||||||
|
|
ОС - операционная система
СП - система программирования (Вопрос 3)
ПП - прикладные программы
Рис. 6-5 конкретизирует эту метафору для случая MS-DOS, оболочки Norton Commander (NC) и СП на С++. Слои здесь не непроницаемы, а имеют "окна". Поверхность раздела между слоями называется интерфейсом. На рис. 6.5 имена интерфейсов - жирными буквами; UI - User Interface, API - Application Programmer's Interface. На рис. 6-6 представлена другая комбинация слоев и окон – для СУБД.
| |||||||||
| |||||||||
|
Достоинство поуровневой структуризации (кроме уже упомянутой функциональной декомпозиции как способа борьбы со сложностью) – независимость реализации слоя при фиксированном его интерфейсе. Это способствует:
· Распараллеливанию работ при проектировании и реализации сложного ПП
· Независимой модификации и модернизации слоев
· Совместимости, сопрягаемости и переносимости слоев
Следствия:
· В условиях быстрой эволюции аппаратуры машинно-зависимые части кода полезно выделять в специальный (нижний) уровень (это делается, в частности, для драйверов)
· Строгая спецификация И. компонента – основа стандартизации компонентов