Структуризация функциональной модульной структуры

Здесь ограничивается разнообразие связей модулей (подпрограмм) по вызовам, т.е. ограничиваются виды графов вызова:

А) Строгая иерархия: граф вызовов – дерево.

Достоинства:

- Вложенные процедуры (Алгол, ранний Паскаль не имели библиотечных подпрограмм) --> понятность кода

- Облегчается отладка, т.к. единственная цепочка вызовов для любого модуля

Недостаток: необходимость дублирования модулей для выполнения одинаковых функций на нижних уровнях иерархии. (NB: в С/С++ нет вложенных функций.)

В) Поуровневая (layered) структуризация: граф – гамак (расширение дерева перекрестными дугами между ярусами) или "слоеный пирог" - рис. 6-3:

       
   
Сложные программные системы обычно имеют несколько слоев, надстроенных над аппаратурой. Рис. 6-4: метафора вложенных "виртуальных машин" - программных оболочек с возрастающим уровнем мощности "команд":
 


Рис 6-3

                       
   
 
 
   
 
   
IBM PC
 
 
   
Рис. 6-5
   
Рис. 6-4
 


ОС - операционная система

СП - система программирования (Вопрос 3)

ПП - прикладные программы

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

                   
   
     
SQL – язык запросов к базе данных CLI – Call Level Interface
 
 
 
 
   
Аппаратура ура
 
   
Рис. 6-6


Достоинство поуровневой структуризации (кроме уже упомянутой функциональной декомпозиции как способа борьбы со сложностью) – независимость реализации слоя при фиксированном его интерфейсе. Это способствует:

· Распараллеливанию работ при проектировании и реализации сложного ПП

· Независимой модификации и модернизации слоев

· Совместимости, сопрягаемости и переносимости слоев

Следствия:

· В условиях быстрой эволюции аппаратуры машинно-зависимые части кода полезно выделять в специальный (нижний) уровень (это делается, в частности, для драйверов)

· Строгая спецификация И. компонента – основа стандартизации компонентов


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: