§18. ВИЗУАЛЬНОЕ И ТЕКСТОВОЕ СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕМожно предложить ряд правил, устанавливающих соответствие
между понятиями двумерного (визуального) и (одномерного)
текстового структурного подхода.
1. Макроикона «развилка» (рис. 242), в которую произведен
ввод функционального атома в левую или обе критические точки,
эквивалентна конструкциям if-then и if-then-else соответственно
[11, с. 120, 121]. См. также две верхние графы на рис. 253.
2. Макроикона «обычный цикл» (рис. 242), в которую
произведен ввод функционального атома в одну или обе критические
точки, эквивалентна конструкциям do-until, while-do, do-while-do
соответственно [11, с. 120, 121]. См. также две нижние графы
на рис. 253.
3. Непустая макроикона «переключатель» (рис. 242),
в которую введено нужное число икон «вариант» с помощью
операции «добавление варианта», эквивалентна конструкции
case [2, с. 27]. См. также рис. 253.
4. Непустая макроикона «цикл ДЛЯ» (рис. 242) эквива-
лентна циклу for языка СИ.
5. Непустая макроикона «переключающий цикл» (рис. 242),
в которую введено нужное число икон «вариант», эквивалентна
циклу с вложенным оператором саse, используемым, например,
при построении рекурсивных структурированных программ
по методу Ашкрофта—Манны [11, с.141, 142].
6. Шампур-блок — видеоструктурный эквивалент понятия
«простая программа» [11, с. 102].
7. Атом — общее понятие для основных составляющих блоков,
необходимых для построения программы согласно структурной
теореме Бома и Джакопини [5]. Оно охватывает также все
элементарные конструкции структурного подхода, кроме
последовательности [11, с. 119—121].
(Последняя в визуальном структурном подходе считается
неэлементарной структурой).
8. Операция «ввод атома» позволяет смоделировать две
операции:
• построить последовательность из двух и более атомов;
• методом заполнения критических точек осуществить
многократное вложение составных операторов друг в друга.
Благодаря этому единственный функциональный блок
«постепенно раскрывается в сложную структуру основных
элементов».
Вложение:
Рис. 242.png [ 56.34 КБ | Просмотров: 20248 ]
§19. СТРУКТУРНЫЕ, ЛИАННЫЕ И АДРЕСНЫЕ БЛОКИВведем понятие «базовые операции» для обозначения операций
«ввод атома», «добавление варианта» и «боковое присоединение»
(см. главу 33).
Применяя к заготовке-примитив базовые операции любое число раз,
мы всегда получим структурную дракон-схему в традиционном
смысле слова (рис. 254).
Введем три понятия.
Структурный блок — шампур-блок, построенный только с помощью
базовых операций, без использования действий с лианой (рис. 254).
Лианный блок — шампур-блок, полученный из структурного блока
с помощью операции «пересадка лианы» (рис. 255).
Адресный блок — результат преобразования структурного блока с
помощью операции «заземление лианы» и, возможно, «пересадка лианы».
Адресный блок используется только в силуэте и представляет собой
многоадресную ветку (или ее нижнюю часть). Он имеет один вход и
не менее двух выходов, присоединенных к нижней горизонтальной
линии силуэта через иконы «адрес» (рис. 257).
В примитиве могут использоваться только структурные и лианные блоки
(рис. 254, 255).
В силуэте применяются все три типа блоков: структурные, лианные и
адресные (рис. 256, 257).
Шампур-метод позволяет строить как структурные, так и лианные
конструкции. Выше мы выяснили, что базовые операции моделируют
классический структурный подход.
Чтобы смоделировать полезные функции оператора goto, в шампур-
методе предусмотрены операции «пересадка лианы» и «заземление
лианы».
И последнее. Силуэт на рис. 257 можно интерпретировать как детер-
минированный конечный автомат (рис. 258). Каждую ветку при желании
можно характеризовать как состояние автомата. Переход с ветки на
ветку означает переход из одного состояния в другое.
§20. ОПЕРАЦИИ С ЛИАНОЙ И ОПЕРАТОР GOTOОперации с лианой моделируют все без исключения функции
заменителей goto (например, дополнительный выход из цикла),
а также некоторые функции goto, которые невозможно реализовать
с помощью заменителей.
Однако они не приводят к хаосу, вызванному бесконтрольным
использованием goto.
С эргономической точки зрения, действия с лианой на порядок
эффективнее и удобнее, чем goto и заменители. Кроме того, они
весьма эффективно корректируют недостатки классического
(текстового) структурного программирования.
Приведем пример. В главе 7 мы рассмотрели эргономические
преимущества схемы на рис. 62 по сравнению с рис. 61. Показано,
что улучшение эргономичности достигнуто за счет использования
равносильных преобразований алгоритмов: вертикального и
горизонтального объединения. При этом за кадром осталась важная
проблема — проблема синтаксиса.
Как построить указанные схемы? Теперь мы имеем возможность
осветить этот вопрос. Схема на рис. 61 представляет собой структурный
блок, полученный с помощью операции «ввод атома».
В отличие от нее схема на рис. 62 — это лианный блок, построенный
методом пересадки лианы.
Уместно вспомнить предостережение Гленфорда Майерса:
Цитата:
«Правила структурного программирования часто предписывают
повторять одинаковые фрагменты программы в разных участках
модуля, чтобы избавиться от употребления операторов GOTO.
В этом случае лекарство хуже болезни. Дублирование резко
увеличивает возможность внесения ошибок при изменении
модуля в будущем» [8, с. 138].
Как видно на рис. 53, 56, 62 пересадка лианы позволяет элегантно
и без потерь решить эту непростую проблему, одновременно
улучшая наглядность и понятность программы, обеспечивая
более эффективное топологическое упорядочивание маршрутов.
Пересадка лианы узаконивает лишь некоторые, отнюдь не любые
передачи управления, поскольку определение данной операции
(см. главу 33, тезис 28) содержит ряд ограничений.
Запрет на образование нового цикла вызван тем, что переход
на оператор, расположенный выше (раньше) в тексте программы,
считается «наихудшим применением оператора GOTO» [8, с. 135].
Указанный запрет вводится, чтобы выполнить требование: использовать
goto только для передачи управления вперед по программе, которое
считается более приемлемым
Запрет на образование второго входа в цикл соответствует требованию
структурного программирования, согласно которому цикл, как и любая
простая программа, должен иметь не более одного входа.
Лишь третий запрет является оригинальной особенностью шампур-
метода: он запрещает передачи управления, изображение которых
с помощью лианы ведет к пересечению линий.
Таким образом, пересадка лианы разрешает только те переходы вниз
по дракон-алгоритму, которые образуют связи с валентными точками
и изображаются легко прослеживаемыми маршрутами, то есть не
пересекающимися линиями.
_______________________________________________________
В визуальном структурном подходе аналогом goto и заменителей
служат формальные операции «пересадка лианы» и «заземление
лианы».