Реклама:

Прибавить 1 к СЧЕТЧИКУ ЭЛЕМЕНТОВ * Прибавить ЦЕНУ В ЭЛЕМЕНТЕ к СУММЕ *

ЗАКАЗА * Писать СТРОЧНЫЙ ЭЛЕМЕНТ в Отчет Читать запись ОБ.КОРР.ТЕЛА конец

ОТВОД если СЧЕТЧИК ЭЛЕМЕНТОВ не равен * ИТОГОВОМУ СЧЕТЧИКУ ЭЛЕМЕНТОВ * ИЛИ если СУММА ЗАКАЗА не равна * ИТОГОВОЙ СУММЕ ЗАКАЗА * ОБ.ТЕЛА ЗАКАЗА принять Некорректный * Писать СООБЩЕНИЕ ОБ ОШИБКЕ в Отчет

ОБ.НЕКОРР.ТЕЛА повт пока не ИТОГИ

Читать запись ОБ.НЕКОРР.ТЕЛА конец Читать запись ОБ.ТЕЛА ЗАКАЗА конец ОБ.ЗАКАЗА конец Закрыть файлы, СТОП КОНТРОЛЬ конец

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

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

«Если в программе реализуется этот отвод (т.е. происходит ответвление на часть «Принять» процесса), то делает ли программа при этом что-либо такое, чего не стала бы делать, если бы заранее знала, что в конце концов попадет на ветвь «Принять»?»

Обратимся к нашей программе контрольных итогов. Исследованию подлежат те операторы программы, которые прямо или косвенно общаются с внешним миром других программ и людей. В данном случае единственным действием до оператора «Отвод», удовлетворяющим этому описанию, является оператор «Писать СТРОЧНЫЙ ЭЛЕМЕНТ в отчет». Если заказ оказывается некорректным, мы совсем не хотим, чтобы программа выводила наружу какие бы то ни было строки. В некоторых подобных случаях можно просто поместить вызывающие смущение операторы в «более безопасные» позиции, но в нашем случае такой подход не имеет практического смысла, и поэтому мы будем «пытаться» писать строки, перенося их в буфер, а потом, уже зная, что запрос корректный, мы сможем писать строки с буфера в отчет. Если же заказ оказывается некорректным, то ничего вредного не произошло и можно очистить буфер перед началом обработки следующего заказа.

Теперь, если программа выполняет отвод и переключается на «Принять», то по достижении позиции «Принять»

запись ИТОГИ некорректного заказа будет находиться во входной области. Поэтому нет необходимости в повторении ОБ. НЕКОРР. ТЕЛА. Программа просто запишет сообщение об ошибке, получив из записи ИТОГИ информацию, идентифицирующую заказ. Если требуется вывести на печать более полный анализ данной проблемы, то соответствующая информация тоже будет доступна из записи ИТОГИ и из накопленных данных из записей элементов.

Итак, окончательный (этап 3) вариант структурированного изложения программы контрольных итогов выглядит следующим образом:

(Снова строки, добавленные или измененные по сравнению с этапом 2, выделены полужирным шрифтом и отмечены звездочками. )


⇐ Предыдущая страница| |Следующая страница ⇒