Там был также весьма изобретательный архитектор, придумавший новый способ постройки домов. Постройка должна была начинаться с крыши и кончаться фундаментом. Он оправдывал мне этот способ ссылкой на приемы двух мудрых насекомых - пчелы и паука.
Джонатан Свифт, "Путешествия Гулливера"
При подходе сверху вниз система строится с помощью последовательных уточнений. Этот процесс начинается с самого общего утверждения об ее абстрактной функции, такого как
[C0] "Оттранслировать СИ-программу в машинный код"
или
[P0] "Обработать команду пользователя"
и продолжается путем последовательных шагов уточнения. На каждом шаге уровень абстракции получаемых элементов должен уменьшаться, каждая операция на нем разлагается на композицию одной или нескольких более простых операций. Например, следующий шаг в первом примере (транслятор с СИ) может привести к декомпозиции
[C1] "Прочесть программу и породить последовательность лексем" "Разобрать последовательность лексем и построить абстрактное синтаксическое дерево" "Снабдить дерево семантической информацией" "Сгенерировать по полученному дереву код"
или, используя другую структуру (и сделав упрощающее предположение, что СИ-программа - это последовательность определений функций):
[C'1] from "Инициализировать структуры данных" until "Определения всех функций обработаны" loop "Прочесть определение следующей функции" "Сгенерировать частичный код" end "Заполнить перекрестные ссылки"
В любом случае разработчик должен на каждом шаге проверять оставшиеся не полностью уточненными элементы (такие как "Читать программу..." и "Определения всех функций обработаны") и раскрывать их, используя тот же процесс уточнения до тех пор, пока все не окажется на достаточном низком уровне абстракции, допускающем непосредственную реализацию.
Процесс уточнения сверху вниз можно представить как построение дерева. Вершины представляют элементы декомпозиции, ветви показывают отношение "B есть уточнение A".