Заключительные замечания по структурному проектированию
Обе рассмотренные методологии естественным образом приводят к явно выраженной расслоенной структуре программной системы, обеспечивая равную доступность модулей одного слоя. В обеих методологиях слой представляет собой полное непротиворечивое множество модулей, даже если понятие полноты в каждом случае имеет различные оттенки.
Сферы применения этих двух методов дополняют друг друга. Кратко это можно охарактеризовать так: при программировании решения отдельной задачи предпочтительнее аналитическое проектирование, а при создании программных систем для решения класса задач - синтетический метод. Поэтому синтетическое проектирование часто используется при написании операционных систем, а аналитическое - при написании специализированных программных систем.
Возможен другой путь использования методов структурного проектирования. Система может быть спроектирована методом «сверху вниз», а реализована методом «снизу вверх». В этом случае общий проект структуры программной системы выполняется методом «сверху вниз», а модули фактически объединяются в систему по методу «снизу вверх». При таком подходе налицо все преимущества реализации методом «снизу вверх» и в то же время не приносится в жертву возможность общего охвата системы, предоставляемая методом проектирования «сверху вниз».
Существует другая интерпретация взаимной дополняемости этих двух принципов проектирования, объясняющая, почему в большинстве важных задач используются оба подхода. Для трудных и больших задач обстановка, обеспечиваемая базовым уровнем, как правило, слишком удалена, чтобы к ней можно было прийти аналитическими методами проектирования. Поскольку при выборе абстрактных свойств, полезных для решения данной широкой задачи, можно учитывать предыдущий опыт, на этапах приведения системы к уровню этих предположительно полезных абстрактных понятий можно с успехом применять синтетическое проектирование, что значительно снижает объем разработок аналитического характера.
Между сторонниками методов проектирования «снизу вверх» и «сверху вниз» ведется много дискуссий. Многие полагают, что проектирование «сверху вниз» больше соответствует идее, когда следует принимать решения на ранних стадиях проектирования и оставлять решения по детальной реализации на более поздние этапы. Однако проектирование «сверху вниз» требует лучшего осмысливания на ранней стадии процесса проектирования. Проектирование «снизу вверх» не требует вначале полного осмысливания системы, так как каждый слой программной системы добавляется к уже полностью определенному предыдущему слою. Вследствие этого, как указывается в [41], некоторые разработчики программ пропагандируют метод «сверху вниз», но на практике проектируют системы методом «снизу вверх»; особенно это касается операционных систем.

Рис. 6.10. Последовательность проектирования сверху вниз