Sunday, January 10, 2010

Сверху вниз и снизу вверх. Часть I

UPDATE 10-10-2010:
Cм. также
Оптимистический и пессимистический взгляд на жизнь
Parsing - синтаксический анализ Сверху вниз и снизу вверх. Часть II (продолжение)
BFS and DFS - поиск в ширину и глубину Сверху вниз и снизу вверх. Часть III (продолжение)
END OF UPDATE.
UPDATE 17-10-2010:
Testing first - сначала тестировать Сверху вниз и снизу вверх. Часть IV
END OF UPDATE

Существует два разных подхода в решение поставленных задач, которые условно называется сверху вниз (Top down) и снизу вверх (buttom up). Практически, они могут быть замечены как разные стили размышления и обучения. Во многих случаях подход сверху вниз используется как синоним анализа или декомпозиции, и снизу вверх как синтез.

Подход сверху вниз по существу взламывает систему, чтобы получить сведения о ее составляющих подсистемах. При этом подходе сначала делается краткий обзор системы, определяя, но не детализируя любые подсистемы первого уровня. Каждая подсистема тогда усовершенствуется во всё больших деталях, иногда обрастая многими дополнительными подсистемами, пока не будут покрыты все требования. Эта модель часто определяется с помощью "чёрных ящиков" (black boxes), они облегчают работу. Однако, "черные ящики" могут быть не в состоянии прояснить элементарные механизмы или быть не достаточно детализированными, чтобы реалистично проверить правильность модели.

Ниже есть продолжение.

Подход снизу вверх - это соединений вместе систем, создавая бо́льшую систему, делая так образом первоначальные системы подсистемами создаваемой системы. При этом подходе сначала определяются базовые элементы системы во всех деталях. Эти элементы соединяются в бо́льшие подсистемы, которые в свою очередь соединяются, иногда на многих уровнях, пока не получается законченная система. Этот подход напоминает модель "семени" ("seed") когда основания малы, но в к конечном счёте они растут в сложности и законченности. Однако, такой подход может привести к путанице элементов и подсистем, разработанных в изоляции. Такой подход подвержен локальным оптимизациям, отклоняясь от удовлетворения глобальной цели.

Использование этих подходов в программировании.

Подход снизу вверх подчеркивает написание кода и раннее тестирование (unit testing), которое может начаться как только будет готова спецификация для первого модуля. Этот подход, однако, подвергается риску написания модулей без чёткого представления о том, как они будут связаны с другими частями системы, что может оказаться не таким простом как в начале казалось. Повторное использование кода является один из основных достоинств этого подхода.

Подход сверху вниз подчёркивает планирование и полное понимание системы. Неотделимым свойствам этого подхода является то, что написание кода не может начаться пока не будет достигнуто достаточный уровень детализации в дизайне по-крайней мере части программы. При этом подходе используются "заглушки" на месте модулей. Это, однако задерживает unit testing системы до завершение значительной части дизайна.


Подход снизу вверх был популярен среди разработчиков программного обеспечение до конца 1980-ых годов. Объектно-ориентированное программирование показало, что оба подхода и сверху вниз и снизу вверх могут быть использованы.

Современные подхода дизайна программного обеспечение обычно комбинируют оба подхода. Хотя понимание всей системы обычно считается необходимым для хорошего дизайна, ведя теоретически к подходу сверху вниз, большинство проектов по разработке программного обеспечения пытаются использовать существующий код до некоторой степени. Существующие ранее модули дают дизайну налёт подхода снизу вверх. Некоторые также используют подход, где частично функциональная система проектируется и пишется. Затем эта система расширяется, чтобы удовлетворить требований спецификации для этого проекта.

Подход сверху вниз является оплотом традиционных процедурных языков программирования в которых дизайн начинается определением сложных частей и затем делением их на последовательно меньшие части. В конечном счете, компоненты являются достаточно определенными чтобы их можно было написать. Это полная противоположность подхода программирования снизу вверх, который распространён на объектно-ориентированных языках, таких как C++ или Java.

Техника написание программы используя подход сверху вниз состоит в том, чтобы написать главную процедуру, которая называет все основные функции, которые ей понадобится. Позже, команда программистов посмотрит в спецификацию для каждой из этих функций и процесс повторится. Эти разделённые подпрограммы в конечном счёте будут делать выполнят действия, столь простые, они могут быть легко и кратко написаны. Когда все возможные подпрограммы написаны, написание программы завершено.

Определяя как приложение объединяется на высоком уровне, работа на низком уровне может быть самодостаточной. Определяя как низкие уровни абстракции должны быть интегрированы в более высокие уровни, интерфейс становится ясно определён.

В следующих постах будет рассмотрены различные варианты применения этих подходов на примере:

2. Parsing - синтаксический анализ.
3. BFS and DFS exploration - Поиск в ширину и глубину.
4. Testing first - Сначала тестировать.
5. Note first - Сначала писать комментарии.


При написании поста была использована статья в википедии
http://en.wikipedia.org/wiki/Top-down_and_bottom-up_design

Текстовое содержимое доступно в соответствии с GNU Free Documentation License: http://www.gnu.org/copyleft/fdl.html. Источник: Википедиа http://en.wikipedia.org/wiki/Top-down_and_bottom-up_design. Авторы: http://en.wikipedia.org/w/index.php?title=Top-down_and_bottom-up_design&action=history

Продолжение следует.

No comments:

Post a Comment