Книга: Основы объектно-ориентированного программирования
Обнаружение вершины
Обнаружение вершины
Нисходящий метод проектирования предполагает, что каждая система характеризуется на самом абстрактом уровне своей главной функцией. Хотя многие учебные примеры алгоритмических проблем - "Ханойские башни", "Задача о 8 ферзях" и т. п. - действительно легко задать с помощью их "верхних" функций, более полезно описывать практические системы в терминах предоставляемых ими услуг.
Рассмотрим какую-либо операционную систему. Наиболее разумно представлять ее как систему, предоставляющую такие услуги, как распределение времени процессора, управление памятью, обращение с устройствами ввода-вывода, декодирование и исполнение команд пользователя. Модули хорошо структурированной ОС стремятся сгруппироваться вокруг этих групп функций. Но это не та структура, которую можно получить при нисходящей функциональной декомпозиции. Этот метод заставляет проектировщика отвечать на искусственный вопрос: "что является "верхней" функцией?", а затем использовать последовательные уточнения полученного ответа в качестве основы для структуры системы. При определенных усилиях можно придти к следующему ответу на исходный вопрос
"Обработать все запросы пользователя",
который далее можно уточнять примерно так:
from
начальная загрузка системы
until
остановка или аварийный отказ
loop
"Прочесть запрос пользователя и поместить во входную очередь"
"Взять запрос r из входной очереди"
"Обработать r"
"Поместить результат в выходную очередь"
"Взять результат q из выходной очереди"
"Выдать результат q получателю"
end
Уточнения могут продолжаться. Однако маловероятно, что после такого начала кому-либо удастся спроектировать разумно структурированную операционную систему.
Вернемся к примеру с компилятором. Оставив в нем самую суть или представив точку зрения старых учебников, можно сказать, что компилятор - это реализация функции типа вход-выход, трансформирующей текст исходной программы на некотором языке программирования в машинный код некоторой платформы. Но для современных компиляторов этот взгляд недостаточен. Среди многих услуг, предоставляемых компилятором, обнаружение ошибок, форматирование программы, возможность управления конфигурацией системы, вход в систему, генерация отчетов.
По-видимому, очевидная отправная точка проектирования сверху вниз - взгляд, согласно которому для каждой новой разработки требуется запросить некоторую специальную функцию - является весьма сомнительной:
У реальной системы нет "вершины"!
- 10.6. Обнаружение щипка
- 14.1. Обнаружение доступности многозадачности
- 18.1. Обнаружение доступности акселерометра
- 18.2. Обнаружение доступности гироскопа
- 10.4. Обнаружение жестов долгого нажатия
- Глава 2 Обнаружение адреса
- 10.2. Обнаружение жестов вращения
- 14.4.6. Удаление вершины дерева и удаление дерева: tdelete() и tdestroy()
- 13.1. Обнаружение и испытание камеры
- 10.1. Обнаружение жестов смахивания
- Тест на обнаружение
- 7.8 Обнаружение маршрутов