Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
трпп_2012.docx
Скачиваний:
63
Добавлен:
30.08.2019
Размер:
727.99 Кб
Скачать

5 Методы структурного программирования. Достоинства и недостатки структурного программирования

Структурное программирование представляет собой совокупность рекомендуемых технологических приемов, охватывающих выполнение всех этапов разработки ПП и основывается на следующих принципах:

  • нисходящей разработки, рекомендующей на всех этапах вначале определять наиболее общие моменты, а затем поэтапно выполнять детализацию;

  • структурного программирования, рекомендующего определенные структуры алгоритмов и стиль программирования;

  • сквозного структурного контроля, предполагающего проведение содержательного контроля всех этапов разработки.

В основе структурного программирования лежит декомпозиция (разбиение на части) сложных систем с целью последующей реализации в виде отдельных небольших подпрограмм. Модульная разработка алгоритмов и программ предоставляет возможность параллельной работы с несколькими модулями, создания библиотек модулей, реализации программы на ЭВМ с небольшим объемом оперативной памяти.

Разрабатываемый модуль должен обладать независимостью внутренней структуры от других модулей, иметь один вход и один выход, иметь возможность вызова других модулей и передачи управления после окончания работы вызывающему модулю.

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

Наибольшее распространение получили три способа проектирования алгоритмов и программ - восходящий, нисходящий, встречный.

Восходящее (снизу вверх, синтетическое) проектирование использует идею выделения достаточно крупных подалгоритмов и модулей, каждый из которых реализует определенные функции. Выбор модулей определяется различными соображениями: функциональной законченностью, размерами, однородностью структур данных и др. Для выделенных модулей составляются спецификации, определяется связь по входу и выходу. Далее каждый модуль алгоритма или программы автономно разрабатывается и проверяется. После разработки модулей с учетом связей по входу и выходу осуществляется объединение в подсистемы, которые подвергаются контролю. Испытанные подсистемы объединяются в алгоритм или программную систему, которая подвергается комплексной проверке.

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

Основными недостатками восходящего способа проектирования являются: сложность процесса объединения отдельных подалгоритмов или модулей в алгоритм, трудность исправления ошибок, допущенных на ранних стадиях разработки, сложность контроля разработки и прогноза завершения.

Нисходящее (сверху вниз, аналитическое) проектирование начинается с постановки задачи, которую требуется решить, и развивается далее путем разбиения ее на подзадачи. В конечном счете это приводит к таким задачам, решение которых легко выразить в терминах базовых конструкций. Укрупнённо процесс проектирования включает в себя следующие действия: производится декомпозиция общей задачи на точно определенные подзадачи и доказывается, что если каждая подзадача решена корректно и полученные решения взаимосвязаны, то первоначальная задача будет решена корректно. Процесс декомпозиции повторяется для подзадач, и доказывается корректность для выполненного разбиения. Этот процесс повторяется до получения подзадач настолько простых, что решение выражается базовыми конструкциями.

Такой способ проектирования алгоритмов и программ в виде иерархической структуры позволяет решать громоздкие и сложные задачи. При нисходящей разработке появляется возможность проверки алгоритма или проверки и отладки программы с самого начала разработки и тем самым избежать ошибок.

Так как модули программ разрабатываются сверху вниз, то вместо программ нижнего уровня используются программные заглушки. Они требуются только для того, чтобы позволить модулю верхнего уровня проверить взаимодействие с модулем нижнего уровня. Программная заглушка содержит входные и выходные операторы и выдает сообщения о своем выполнении.

При разработке программы с использованием нисходящего проектирования не требуется проведения комплексной отладки, которая занимает при других методах разработки 25-40% от общего времени разработки программы.

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

Реальная стратегия разработки алгоритмов и программ почти всегда представляет собой разумное сочетание нисходящего и восходящего способов проектирования (встречное проектирование).

Достоинства структурного программирования:

  • Программы любой сложности и размера можно получать на основе соответствующего сочетания расширенного базиса управляющих структур: следования, ветвления, организации циклов и вызова подпрограмм; при этом все перечисленные структуры допускают только один вход и один выход.

  • программа может быть проанализирована проверкой ее структуры, позволяя обнаруживать в ней ошибки уже на стадии проектирования

Структура таких программ четко прослеживается от начала (сверху) до конца (вниз) при отсутствии передач управления на верхние уровни. Если в неструктурированной программе допустима передача управления из любой точки программы в любую (реализуя число передач управления до n2, где n - число операторов в программе), то в структурированной количество таких передач строго ограничено и не превышает числа (n) операторов, так как ее структура является древовидной. Все это делает программы логически менее сложными, более обозримыми и накладывает серьезные ограничения на допустимые структуры управления. Последнее, в свою очередь, требует значительно более осмысленного подхода к проектированию программ, уже этим способствуя повышению качества их разработки.

Недостатки структурного программирования:

  • невозможно полностью отказаться от меток и операторов безусловного перехода при создании сложных ПП

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

  • локальные модификации могли нарушить работоспособность всей системы.

  • далеко не все задачи поддаются алгоритмическому описанию и тем более алгоритмической декомпозиции, как того требует структурное программирование.

Рассмотрение любой сложной системы требует применения техники декомпозиции - разбиения на составляющие элементы. Известны две схемы декомпозиции: алгоритмическая декомпозиция и объектно-ориентированная декомпозиция.

В основе алгоритмической декомпозиции лежит разбиение по действиям - алгоритмам. Эта схема представления применяется в обычных ПП.

Объектно-ориентированная декомпозиция обеспечивает разбиение по индивидуальным лицам - объектам реального (или виртуального) мира. Эти лица (объекты) - более «крупные» элементы, каждый из них несет в себе и описания действий, и описания данных.

Вопросы для самопроверки:

  1. Перечислите методы структурного программирования. Охарактеризуйте их.

  2. Перечислите достоинства и недостатки структурного программирования.

  3. Перечислите различия структурированных и неструктурированных программ и алгоритмов.

  4. Что такое структурное программирование?

  5. Какие основные принципы положены в основу структурного подхода к программированию.