Рассмотрим нижнюю часть схемы Степана Митькина.
Это сложный случай: он в моих книгах не описан. Следует его обсудить.
...
Нельзя пересаживать лиану на линию со стрелкой цикла. Это опасно и потому должно быть запрещено.
Кроме того, нельзя превращать лиану в стрелку цикла.
Разрешается создавать стрелку цикла только и исключительно с помощью макроиконы "Цикл со стрелкой".
Глава 36. ВИЗУАЛЬНЫЙ СТРУКТУРНЫЙ ПОДХОД К АЛГОРИТМАМ И ПРОГРАММАМ (ШАМПУР-МЕТОД)
...
§22. ОПЕРАЦИИ С ЛИАНОЙ И ОПЕРАТОР GOTO
Цитата:
Операции с лианой моделируют все без исключения функ-
ции заменителей goto (например, досрочный выход из цик-
ла), а также некоторые функции goto, которые невозможно
реализовать с помощью заменителей. Однако они не приво-
дят к хаосу, вызванному бесконтрольным использованием
goto.
Цитата:
С эргономической точки зрения, действия с лианой на по-
рядок эффективнее и удобнее, чем goto и заменители. Кроме
того, они весьма эффективно корректируют недостатки клас-
сического (текстового) структурного программирования.
Приведем пример. В главе 7 мы рассмотрели эргономические преимущес-
тва схемы на рис. 62 по сравнению с рис. 61. Показано, что улучшение эр-
гономичности достигнуто за счет использования равносильных преобра-
зований алгоритмов: вертикального и горизонтального объединения. При
этом за кадром осталась важная проблема – проблема синтаксиса.
Как построить указанные схемы? Теперь мы имеем возможность осве-
тить этот вопрос. Схема на рис. 61 представляет собой структурный блок,
полученный с помощью операции «ввод атома». В отличие от нее схема
на рис. 62 – это лианный блок, построенный методом пересадки лианы.
Уместно вспомнить предостережение Гленфорда Майерса:
«Правила структурного программирования часто предписы-
вают повторять одинаковые фрагменты программы в разных
участках модуля, чтобы избавиться от употребления операто-
ров goto. В этом случае лекарство хуже болезни. Дублирование
резко увеличивает возможность внесения ошибок при изме-
нении модуля в будущем» [8, с. 138].
Как видно на рис. 53, 56, 62 пересадка лианы позволяет элегантно и
без потерь решить эту непростую проблему, одновременно улучшая на-
глядность и понятность алгоритма, обеспечивая более эффективное топо-
логическое упорядочивание маршрутов.
Пересадка лианы узаконивает лишь некоторые, отнюдь не любые пе-
редачи управления, поскольку определение операции «пересадка лианы»
(см. главу 33, тезис 28) содержит ряд ограничений.
Запрет на образование нового цикла вызван тем, что переход на опе-
ратор, расположенный выше (раньше) в тексте программы, считается
«наихудшим применением оператора goto [8, с. 135]. Указанный запрет
вводится, чтобы выполнить требование: использовать goto только для пе-
редачи управления вперед по программе, которое считается более прием-
лемым.
Запрет на образование второго входа в цикл соответствует требова-
нию структурного программирования, согласно которому цикл, как и лю-
бая простая программа, должен иметь не более одного входа.
Лишь третий запрет является оригинальной особенностью шампур-
метода: он запрещает передачи управления, изображение которых с помо-
щью лианы ведет к пересечению линий.
Таким образом, пересадка лианы разрешает только те переходы вниз
по дракон-алгоритму, которые образуют связи с валентными точками и
изображаются легко прослеживаемыми маршрутами, то есть не пересека-
ющимися линиями.