ВУЗ:
Составители:
Рубрика:
81
3.5.2.3. Полнота набора базовых управляющих конструкций
Уверенность в том, что с помощью структурного программирования (т.е.,
придерживаясь его ограничений) можно создать программу, реализующую
любой корректный алгоритм, подкрепляется математическим доказательст-
вом (в кн. [5], на стр. 72 есть ссылки на соответствующие оригинальные ра-
боты).
3.5.2.4. Запрет на GOTO
Из описания базовых управляющих конструкций
видно, что среди них нет
безусловной передачи управления, т.е. конструкции GOTO. И это не случай-
но. Иногда структурное программирование связывают даже с непременным
отказом от использования GOTO. Чем же так плох оператор GOTO? Если
внимательно присмотреться, то можно заметить, что используя базовые кон-
струкции следование, развилка и повторение, мы можем из простых блоков
сконструировать опять только простые блоки, правда более высокого уровня.
Именно эта однородность и есть центральный пункт структурного подхода.
Применение же GOTO с очень большой вероятностью нарушает однород-
ность структуры программы, к тому же эти нарушения чрезвычайно чувстви-
тельны к случайным ошибкам в тексте программы, которые безнадежно
трудны в отладке. Причины тому
следующие.
Конструкция GOTO M передает управление в одном направлении - только
"туда" (к метке M), нисколько не заботясь о том, как будет потом осуществ-
ляться переход "назад", который определяется логикой работы программного
фрагмента "там". В результате трудно контролировать все переходы "туда" и
"обратно", и почти неизбежно получаются блоки с несколькими входами и
несколькими выходами
, причем то, какой из входов данного блока будет за-
действован при каждом конкретном прогоне полностью определяется резуль-
татом работы других блоков. При этом, только для того, чтобы определить,
от каких блоков это зависит, нужно каждый раз просматривать всю програм-
му.
Из-за своей половинчатости GOTO является прекрасным средством для
запутывания логики
программы, даже если такая цель и не ставится. Однако
почему вообще обсуждается вопрос нужен GOTO или нет? Нельзя ли просто
забыть про него и пользоваться только базовыми конструкциями следования,
развилки и повторения? Думается, что все дело в том, что хотим мы того или
нет, но исходный текст программы есть линейная (одномепная) цепочка
опе-
раторов и предложений, а алгоритм (с точки зрения графа управляющих свя-
зей) представляет собой плоскую (двумерную) сеть. Поэтому при написании
программы неизбежно приходится "разрезать" плоскую сеть связей алгорит-
ма на отдельные отрезки линейной цепи операторов и вот здесь, на этапе
сшивания отдельных отрезков в единую программу кажется заманчивым в
Страницы
- « первая
- ‹ предыдущая
- …
- 79
- 80
- 81
- 82
- 83
- …
- следующая ›
- последняя »