Недетерминированное состояние машины понимания

Я пытаюсь создать 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.

Новый переход следует проходить только тогда, когда оба региона находятся в конечном состоянии.

Другие вопросы по тегам