Лекция: Методы заданий спецификации процессов - таблицы решений.
Проектирование спецификаций процессов с помощью таблиц решений (ТР)заключается в задании матрицы, отображающей множество входных условий во множестве действий.
ТР состоит из двух частей. Верхняя часть таблицы используется для определения условий. Обычно условие является ЕСЛИ-частью оператора ЕСЛИ—ТОи требует ответа «да-нет». Однако иногда в условии может присутствовать и ограниченное множество значений, например, ЯВЛЯЕТСЯ ЛИ ДЛИНА СТРОКИ БОЛЬШЕЙ, МЕНЬШЕЙ ИЛИ РАВНОЙ ГРАНИЧНОМУ ЗНАЧЕНИЮ?
Нижняя часть ТР используется для определения действий, т.е. ТО-части оператора ЕСЛИ—ТО.Так, в конструкции
ЕСЛИИДЕТ ДОЖДЬ, ТОРАСКРЫТЬ ЗОНТ
ИДЕТ ДОЖДЬ является условием, а РАСКРЫТЬ ЗОНТ — действием.
Левая часть ТР содержит собственно описание условии и действий, а в правой части перечисляются все возможные комбинации условий и, соответственно, указывается, какие конкретные действия и в какой последовательности выполняются, когда определенная комбинация условий имеет место.
Поясним сказанное на примере спецификации процесса выбора символов из входного потока. При выборе символов необходимо руководствоваться следующими правилами:
— если очередной символ является управляющим, то подать звуковой сигнал и вернуть код ошибки;
— если буфер формируемой строки заполнен, то подать звуковой сигнал и вернуть код ошибки;
— если очередной символ не находится в заданном диапазоне, то подать звуковой сигнал и вернуть код ошибки;
— иначе поместить символ в буфер, увеличить значение счетчика выбранных символов и вернуть новое значение счетчика
Заметим, что ели выполняется условие С1, то нет необходимости в проверке условий С2 и СЗ. Поэтому комбинации условий 1, 2, 3, 4 могут быть заменены обобщающей комбинацией (Д, — -), где знак "-" означает любую из возможных альтернатив (в данном случае, Д или Н). Аналогично, комбинации условий 5 и б могут быть заменены обобщающей комбинацией (Н, Д, -).
| Условия | Условия | |||||||||||||||
| C1 | isctrl(c) | Д | Д | Д | Д | Н | Н | Н | Н | C1 | isctrl(c) | Д | Н | Н | Н | |
| C2 | I > max lenght | Д | Д | Н | Н | Д | Д | Н | Н | C2 | I > max lenght | — | Д | Н | Н | |
| C3 | out of range(c) | Д | Н | Д | Н | Д | Н | Д | Н | C3 | out of range(c) | — | — | Д | Н | |
| Действия | Действия | |||||||||||||||
| D1 | beep() | D1 | beep() | |||||||||||||
| D2 | return(ERROR) | D2 | return(ERROR) | |||||||||||||
| D3 | retum(++i) | D3 | retum(++i) | |||||||||||||
| D4 | putchar(c) | D4 | putchar(c) |
Построение ТР рекомендуется осуществлять по следующим шагам:
— Идентифицировать все условия (или переменные) в спецификации. Идентифицировать все значения, которые каждая переменная может иметь.
— Вычислить число комбинаций условий. Если все условия являются бинарными, то существует 2N комбинаций N переменных.
— Идентифицировать каждое из возможных действий, которые могут вызываться в спецификации.
— Построить пустую таблицу, все возможные условия и действия, а также номера комбинаций условий;
— Выписать и занести в таблицу все возможные комбинации условий;
— Редуцировать комбинации условий;
— Проверить каждую комбинацию условий и идентифицировать соответствующие выполняемые действия;
— Выделить комбинации условий, для которых спецификация не указывает список выполняемых действий;
— Обсудить построенную таблицу.