Способ мышления-Форт




Глава 8. Минимизация структур управления - часть 3


Рисунки 8-1, 8-2 и 8-3 иллюстрируют три версии проекта автоматической банковской машины. Первый пример вышел прямо из Школы Структурированных Программистов. Логика задачи зависит от правильной вложенности операторов IF.

Рис.8-1. Структурированный подход.

БАНКОМАТ --------

IF карточка правильная DO IF владелец карточки правильный DO IF запрос на оплату DO IF код пароля правильный DO запрос количества IF запрос =< текущего баланса DO IF расход =< допустимого расхода DO оплатить запрос подсчитать дебет ELSE предупреждение конец сеанса ELSE предупреждение конец сеанса ELSE предупреждение конец сеанса ELSE IF код пароля правильный DO запрос количества получить конверт через щель подсчитать кредит ELSE предупреждение конец сеанса ELSE съесть карточку ELSE предупреждение КОНЕЦ - 240 -

Легко читается? Скажите мне, при каком условии пользовательская карточка будет съедена. Для ответа Вам придется либо подсчитать ELSEы от конца и приложить их к тому же количеству IFов от начала, либо использовать линейку. Во второй версии на рис. 8-2 показано улучшение за счет использования множества мелких именованных процедур для удобочитаемости. Карточка пользователя будет съедена, если владелец не тот.

Рис.8-2. Вложенные условные операторы внутри именованных процедур.

БАНКОМАТ --------

PROCEDURE ЧИТАТЬ-КАРТУ IF карточка читается THEN ПРОВЕРИТЬ-ВЛАДЕЛЬЦА ELSE выбросить карточку КОНЕЦ

PROCEDURE ПРОВЕРИТЬ-ВЛАДЕЛЬЦА IF владелец правильный THEN ПРОВЕРИТЬ-КОД ELSE съесть карточку КОНЕЦ

PROCEDURE ПРОВЕРИТЬ-КОД IF введенный код соответствует владельцу THEN ТРАНЗАКТ ELSE предупреждение, конец сеанса КОНЕЦ

PROCEDURE ТРАНЗАКТ IF запрос на оплату THEN РАСХОД ELSE ПРИХОД КОНЕЦ

PROCEDURE РАСХОД запрос IF запрос =< текущий баланс THEN ОПЛАТИТЬ КОНЕЦ

PROCEDURE ОПЛАТИТЬ IF сумма =< допустимый расход THEN оплатить счет подсчитать дебет ELSE предупреждение КОНЕЦ

PROCEDURE ПРИХОД принять конверт подсчитать кредит - 241 -

Однако даже после такого улучшения структура каждого слова полностью зависит от `последовательности`, в которой производятся проверки.


Содержание  Назад  Вперед