Какие достоинства имеет структурное программирование
Перейти к содержимому

Какие достоинства имеет структурное программирование

  • автор:

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

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

  • 1. Структурное программирование позволяет значительно сократить число вариантов построения программы по одной и той же спецификации, что значительно снижает сложность программы и, что ещё важнее, облегчает понимание её другими разработчиками.
  • 2. В структурированных программах логически связанные операторы находятся визуально ближе, а слабо связанные — дальше, что позволяет обходиться без блок-схем и других графических форм изображения алгоритмов (по сути, сама программа является собственной блок-схемой).
  • 3. Сильно упрощается процесс тестирования и отладки структурированных программ.
  • 9. Ясность и удобочитаемость программ

Структурное программирование значительно повышает ясность и удобочитаемость (readability) программ]. Эдвард Йордан (Edward Yourdon) поясняет:

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

Структурным программам, напротив, свойственна тенденция к последовательным организации и исполнению.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Перечислите методы структурного программирования. Охарактеризуйте их.
  2. Перечислите достоинства и недостатки структурного программирования.
  3. Перечислите различия структурированных и неструктурированных программ и алгоритмов.
  4. Что такое структурное программирование?
  5. Какие основные принципы положены в основу структурного подхода к программированию.

X Международная студенческая научная конференция Студенческий научный форум — 2018

Программирование в 1960-70 гг. стремительно развивалось. Появилась потребность в написании более крупных, сложных и разнообразных программ. Но чем труднее был проект, тем ниже становилось качество его работы.

Не имея четко сформулированной методологии разработки программного обеспечения, программисты столкнулись с огромной беспорядочностью и ошибками в своих программах, трудностями их чтения и понимания. Тогда и появился термин «спагетти-код». Этот код крайне сложен в обслуживании и развитии и имеет много операторов безусловного перехода go to.

Чтобы избежать этого, известный голландский специалист Эдсгер Дейкстра опубликовал статью «Доводы против оператора GO TO». Цитата из этой статьи: «Оператор go to сам по себе просто слишком примитивен; он создает слишком сильное побуждение внести путаницу в программу» [2].

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

  • Отказ от использования оператора безусловного перехода go to.
  • Состав программы только из трех главных структур: линейной (последовательной), ветвлении и циклов, которые должны иметь только один вход и выход.
  • Использование подпрограмм
  • Алгоритм и программу необходимо разрабатывать поэтапно «сверху вниз»
  • Разбитие программы на отдельные блоки

«Я считаю, что программа никогда не является самоцелью; программа предназначается для того, чтобы вызвать вычисления, а цель вычислений — получить нужный результат. Я утверждаю (хотя и не могу доказать), что легкость и гибкость таких наших суждений существенно зависит от простоты взаимосвязей между программой и вычислениями. Грубо говоря, можно считать желательным, чтобы структура программы отражалась в структуре вычислений» — из «Заметок по структурному программированию» [3].

Простой пример структурного программирования с использованием базовых конструкций:

Найдите наибольшую цифру данного натурального числа.

Как структурное программирование помогает создавать эффективный и надежный код

Сергей Немчинский: Как успешно пройти испытательный срок и не вылететь с первой работы?

Что такое сигнатура в программировании: терминология и примеры

Курсы программирования или самостоятельное обучение?

Сергей Немчинский: Гайд по выбору языка программирования

Программист: что хорошего в профессии?

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

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

Тогда были сформулированы три принципа структурного программирования:

  1. Алгоритмическая нисходящая декомпозиция. Поставленная задача пошагово детализируется, в направлении от самого верхнего уровня, вниз к мелким деталям. Этот метод позволяет создать четкую структуру программы.
  2. Модульная структура программы. В результате декомпозиции программа разбивается на модули, простые элементы.
  3. Структурное кодирование. При структурном кодировании используются три управляющие конструкции: последовательное управление, ветвление, цикл. Это базовые структуры.

Базовые конструкции структурного программирования

Структурное программирование основывается на теореме, которую упрощенно можно пересказать так:

  • Две программы считаются эквивалентными, если при любых одинаковых входных данных они всегда выдают одинаковые выходные данные или одинаково закрываются по ошибке.
  • Структурная программа использует только три конструкции:
    • последовательное исполнение – «выполнить действие 1, выполнить действие 2»;
    • ветвление – «если условие соблюдено, выполнить действие 1, иначе действие 2»;
    • цикл – «пока условие соблюдается, выполнять действие 1».
  • Оператор GoTo используется для неструктурных программ.
  • Для каждой неструктурной программы существует эквивалентная структурная программа.

Основываясь на этой теореме, иногда структурное программирование называют «программированием без Go-to». Но это не совсем верно. В каждом правиле есть исключения, и в структурном программировании оператор go-to использовать допустимо. Но все же, прежде чем его использовать, стоит пересмотреть, нельзя ли написать код без этого оператора.

Преимущества структурного программирования

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

Похожие материалы

Сергей Немчинский: Как успешно пройти испытательный срок и не вылететь с первой работы?

Что такое сигнатура в программировании: терминология и примеры

Курсы программирования или самостоятельное обучение?

Сергей Немчинский: Гайд по выбору языка программирования

Программист: что хорошего в профессии?

В чем преимущество использования структурного программирования?

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

Какие принципы лежат в основе структурного программирования?

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

Какие языки программирования поддерживают структурное программирование?

Структурное программирование может быть реализовано на большинстве языков программирования, включая C, C++, Java, Python, и другие. Я использовал структурное программирование в своих проектах на Java, и это помогло мне сделать код более понятным и поддерживаемым.

Как структурное программирование отличается от объектно-ориентированного программирования?

В структурном программировании данные разбиваются на более мелкие части, и весь код состоит из функций или процедур, которые манипулируют этими данными. В объектно-ориентированном программировании данные и функции объединены в объекты, что позволяет создавать более абстрактный и гибкий код. Я работал с обоими подходами в своих проектах, и выбор между ними зависит от конкретной задачи и требований проекта.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *