logo
ГосЭкзамен

9. Структурное программирование.

Структурное программирование - методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков (часть кода, которая сгруппирована и воспринимается как единое целое). Предложена в 70-х годах XX века Э. Дейкстрой.

В соответствии с данной методологией

  1. Любая программа представляет собой структуру, построенную из 3х типов базовых конструкций:

    • последовательное исполнение - однократное выполнение операций в том порядке, в котором они записаны в тексте программы;

    • ветвление - однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;

    • цикл - многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).

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

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

  2. Разработка программы ведётся пошагово, методом «сверху вниз». Сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста, вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются «заглушки», которые ничего не делают. Полученная программа проверяется и отлаживается. После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (т.е. общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причём разработка каждой подпрограммы ведётся тем же методом, что и основной программы. Разработка заканчивается тогда, когда не останется ни одной «затычки», которая не была бы удалена. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и может быть уверен, что общая структура всех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста.

Теорема о структурном программировании: (Теорема Бома-Якопини).

Любую схему алгоритма можно представить в виде композиции вложенных блоков begin и end, условных операторов if, then, else, циклов с предусловием (while) и м/б дополнительных логических переменных (флагов). Эта теорема была сформулирована итальянскими математиками К.Бомом и Дж. Якопини в 1966 году и говорит о том, как можно избежать использование оператора перехода goto (оператор безусловного перехода, ПЕРЕЙТИ К...).

Теорема Бёма-Якопини - положение СП, согласно которому любой исполняемый алгоритм может быть преобразован к структурированному виду, т.е. такому виду, когда ход его выполнения определяется только при помощи 3х структур управления: последовательной (sequence), ветвлений (selection) и повторов или циклов (repetition, cycle).

Обоснование теоремы:

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

Подпрограмма 1 /* последовательное выполнение инструкций 1, 2 ..N…...*/

Инструкция 1;

Инструкция 2;

...

Инструкция N;

Конец Подпрограммы 1.

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

Подпрограмма 2 /* ветвлений – Выбор инструкции согласно условию */

Если условие 1 то Инструкция 1; /* выполняется, если истинно условие 1 */

Если условие 2 то Инструкция 2; /* выполняется, если истинно условие 2 */

...

Иначе Инструкция N; /* выполняется, если не ни одно из условий не является истинным */ .

Конец Подпрограммы 2.

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

Подпрограмма 3 /* цикл */

Пока условие N выполнить Инструкция N /* цикл повторяется пока верно условие N */

Инструкция N + 1 /* выход из цикла по нарушению условия N */

Конец Подпрограммы 3

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

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

3. Сильно упрощается процесс тестирования и отладки структурированных программ.