Основы объектно-ориентированного проектирования

Основной интерактивный шаг


Вначале посмотрим, как выглядит поддержка отката одного уровня. Обобщение на произвольное число уровней будет сделано позже.

В любой интерактивной системе в модуле, ответственном за коммуникацию с пользователем, должен быть некоторый фрагмент следующего вида:

basic_interactive_step is -- Декодирование и выполнение одного запроса пользователя do "Определить, что пользователь хочет выполнить" "Выполнить это (если возможно)" end

В традиционных структурированных системах, подобных редактору, эти операции будут частью цикла - базисного цикла программы:

from start until quit_has_been_requested_and_confirmed loop basic_interactive_step end

где более сложные системы могут использовать событийно-управляемую схему, в которой цикл является внешним по отношению к системе и управляется системной графической оболочкой. Но во всех случаях существует нечто подобное процедуре basic_interactive_step.

С учетом наших абстракций тело процедуры можно уточнить следующим образом:

"Получить последний запрос пользователя" "Декодировать запрос" if "Запрос является нормальной командой (не Undo)" then "Определить соответствующую команду в системе" "Выполнить команду" elseif "Запрос это Undo" then if "Есть обратимая команда" then "Undo последней команды" elseif "Есть команда для повтора" then "Redo последней команды" end else "Отчет об ошибочном запросе" end

Здесь реализуется соглашение, что Undo примененное сразу после Undo, означает Redo. Запрос Undo или Redo игнорируется, если нет возможности отката или повтора. В простом текстовом редакторе с клавиатурным интерфейсом, процедура "Декодировать запрос" будет анализировать ввод пользователя, отыскивая такие коды, как control-I (для вставки строки, control-D для удаления) и другие. В графическом интерфейсе будет проверяться выбор команды меню, нажатие кнопки или соответствующих клавиш.



Содержание раздела