Недетерминированное состояние машины понимания
Я пытаюсь создать DSL для своего проекта iOS.
Для этого я планирую построить Semantic Model
в форме State Machine
, (Терминология взята из книги Фаулера о DSL).
Главная идея: State Machine
закодирован как набор states
а также transitions
между ними, а затем могут быть написаны некоторые модульные тесты, чтобы проверить, some_action
на some_state1
приводит систему к some_state2
,
Проблема в том, что в моем приложении много фоновых потоков, поэтому в данный момент в State Machine может быть активно несколько состояний.
Я читал, что такие государственные машины Nondeterministic finite automaton
Пролистал вики-страницу, но для меня это выглядит слишком теоретически.
Вот пример конечного автомата:
s8
можно активировать только при получении t7
а также t8
это означает, что он должен "ждать".
Вопросы:
1. Есть ли что-то вроде "wait"
в конечных автоматах?
2. Может быть, это не NFA, а два конечных автомата? Меня должно волновать, как назвать такую семантическую модель вообще?
3. Можно ли s8
быть реализован с некоторым фоновым потоком, который принимает уведомления от s4
а также s7
, и активируется только тогда, когда они оба отправили уведомления (это означает, что модульный тест не пройден при достижении тайм-аута, а затем этот тайм-аут должен быть указан где-то в модели)?
1 ответ
Взгляните на ортогональные области в иерархической машине состояний, это должно сделать то, что вы ищете.
Создайте новое состояние с двумя дочерними областями: первая область, содержащая s1, s2, s3, s4 и новое конечное состояние (цель t8); вторая область, содержащая s5, s6, s7 и новое конечное состояние (цель t7). Затем добавьте новый переход из нового состояния в s8.
Новый переход следует проходить только тогда, когда оба региона находятся в конечном состоянии.