Реклама:

Все сказанное вполне подходит для Майка, но как обстоит дело с нашим методом программирования? Программы оперируют четкими, конкретными ситуациями, а не расплывчатыми понятиями управления. Как нам применить этот принцип к методике конструирования, чтобы обрабатывать ситуации непредсказуемых ошибок? Именно этот прием мы называем «откатом» и в следующем разделе 5.3 объясним, как он используется для конструирования программ.

5.3. Откат при конструировании программ

В случае управленческой дилеммы Майка нужно было принять решение, не опираясь на какую-либо информацию о возможных последствиях этого решения. Иначе говоря, это был выбор, который не поддавался оценке. Майк знал о существовании двух вариантов пути, но ему не были известны «условия» выбора. Если бы потребовалось запрограммировать решение Майка, оператор выбора имел бы вид

ЕСЛИ условие (ФРЕД) то выбрать ФРЕД, в противном случае (условие СЬЮ) выбрать СЬЮ.

Но и «условие ФРЕД», и «условие СЬЮ» являются неизвестными и не поддаются оценке.

Аналогично структуру данных, показанную на рис. 5.1, можно рассматривать как выбор, содержащий условия, которые нельзя оценить. Предположим, что нам нужно написать программу, которая читает структуру данных с рис. 5.1 и составляет отчет, содержащий по строке для каждого «корректного» входного строчного элемента. Но если множество строк «некорректно» из-за ошибочного значения в записи контрольных итогов, то для всего множества печатается одна строка, содержащая сообщение «НЕКОРРЕКТНЫЙ ЗАКАЗ Номер ххххххххххх». Итак, структура выходных данных такова, как показанная на рис. 5.2.

Кинг Д. Создание эффективного программного обеспечения

Рис. 5.2. Контрольные итоги - структура выходных данных.

Если мы по-прежнему предполагаем, что выбор между корректными и некорректными заказами можно оценить в начале множества элементов заказа, то получается структура программы, изображенная на рис. 5.3.

Структурированное изложение для этого этапа (этап 1) программы выглядело бы следующим образом:

КОНТРОЛЬ поел

Открыть файлы, Читать запись ОБ.ЗАКАЗА повт пока не КФ - Файл заказов ОБ. ТЕЛА ЗАКАЗА выб УСЛОВ. Корректный

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

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

Кинг Д. Создание эффективного программного обеспечения

Рис. 5.3. Контрольные итоги

- структура программы.

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


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