новные команды системы UNIX оперируют с входным потоком последовательных символов и
выдают результат, имеющий такую же стандартную структуру. Потенциальная возможность
композиции поддерживается оператором |командного языка “Shell”. Запись A |B означает ком-
позицию программ. Вначале запускается программа A, ее результаты поступают на вход про-
граммы B, начинающей свою работу по завершении работы программы А. Такое системное
соглашение благоприятствует композиции программных средств.
• Контрпример: Препроцессоры. Общепринятым способом расширения языка программирования,
а иногда и преодоления его недостатков, является использование “препроцессора”, принимаю-
щего входные данные в расширенном синтаксисе и отображающего их в стандартной для этого
языка форме. Типичные препроцессоры для Fortran’а и C поддерживают графические примити-
вы, расширенные управляющие структуры или операции над базами данных. Однако обычно
такие расширения не являются взаимно совместимыми; что не позволяет сочетать два таких
препроцессора, и приходится выбирать между, например, графикой или базой данных.
Как композиция, так и декомпозиция являются частью требований к модульному методу проекти-
рования. Неизбежна смесь двух подходов к проектированию: сверху-вниз и снизу-вверх.
Модульная понятность
Определение 14. Метод удовлетворяет критерию модульной понятности, если он помогает полу-
чить такую программу, читая которую можно понять содержание каждого модуля, не зная текста
остальных, или, в худшем случае, ознакомившись лишь с некоторыми из них.
Важность этого критерия следует из его влияния на процесс сопровождения программного продук-
та. Почти все действия по сопровождению программы, как неизбежные, так и не столь неизбежные,