Иерархическое проектирование по принципу "вход-обработка-выход"
Третья составляющая структурированной разработки касается процесса проектирования. Разработчикам рекомендуется использовать подход "сверху-вниз", но уделять при этом меньше немедленного внимания на управляющие структуры. "Разработка принятия решений" может подождать до более детализированной проработки модулей. Вместо этого на ранней стадии следует концентрировать усилия на иерархии внутри программы (какие модули вызывают какие модули) и на передаче данных от модуля к модулю.
Рис.1-6. Представление структурной диаграммы, из статьи "Структурированная разработка". (Structured Design, IBM Systems Journal).
+-----------+ | ВЫПОЛНИТЬ | +--+----+---+ | | +-------+---------------|----+--+-------------+-----------+ |... |5 |6 ...| 7| ...| +---|--------+ +---|-------|-------+ +--|-------+ | ПОЛУЧИТЬ С | | ПРЕОБРАЗОВАТЬ в D | | ВЫДАТЬ D | +----+-------+ +-------------------+ +---+------+ | | +---+--------+ +---+--------+ |3 |4 |8 |9 +----|-----+ +----|------+ +-------|---+ +-----|--+ | ПОЛУЧИТЬ | | ПРЕОБРАЗ. | | ПРЕОБРАЗ. | | ВЫДАТЬ | | B | | в C | | в E | | E | +----+-----+ +-----------+ +-----------+ +-+------+ | | +-+---------+ +-------------+---+ |1 |2 |10 |11 +--|------+ +--|------------+ +------|--------+ +------|---+ | СЧИТАТЬ | | ПРЕОБРАЗОВАТЬ | | ПРЕОБРАЗОВАТЬ | | ЗАПИСАТЬ | | | | в В | | в F | | | +---------+ +---------------+ +---------------+ +----------+
+--------------+ | вход | выход | |------+-------| 1 | | A | 2 | A | B | 3 | B | | 4 | B | C | 5 | C | | 6 | C | D | 7 | D | | 8 | D | E | 9 | E | | 10 | E | F | 11 | F | | +------+-------+
Для того, чтобы помочь разработчикам думать в этом направлении, было предложено графическое представление, названное "структурными диаграммами". (Несколько измененная форма так называемых "иерархических диаграмм"). Эти диаграммы состоят из двух частей: иерархической схемы и таблицы входов-выходов.
На рис. 1-6 показаны эти две части. Главная программа, названная "выполнить", состоит из трех подчиненных модулей, которые, в свою очередь, вызывают другие модули, изображенные под ними. Как видно, при проектировании увеличивается внимание к преобразованию входных данных в выходные.
Числа в иерархической диаграмме соответствуют строкам в таблице входов-выходов. В точке 1 (модуль СЧИТАТЬ) выходом является величина А. В точке 2 (модуль ПРЕОБРАЗОВАТЬ-в-В), на вход подается А, выходом является В.
Быть может, наибольшим вкладом такого подхода является осознание того, что решения о передаче управления не должны доминировать в проекте. Как мы убедимся, поток управления -- это поверхностный аспект проблемы. Мизерные изменения в исходных требованиях могут существенно изменить структуры управления в программе и потребовать многих лет ее углубленного "перекапывания". Но, если проект программы ориентирован на что-то другое, например, на потоки данных, то изменения в планах не будут столь разрушительными.