Параллельные состояния -- это одна из фишек иерархических конечных автоматов. Параллельность означает, что КА находится сразу в нескольких состояниях. Допустим, у КА есть ортогональные состояния A и B, а в состоянии B есть два параллельных состояния C и D. Получается, что КА может быть либо в состоянии A, либо же сразу в двух состояниях B.C и B.D.
Но самая жесть начинается когда параллельные состояния начинают вкладываться друг в друга. Простенький пример:
+==========================+
| A |
| +===================+ |
| | B | |
| | +===========+ | |
| | | C | | |
| | +===========+ | |
| | | |
| |- - - - - - - - - -| |
| | +===========+ | |
| | | D | | |
| | | +=====+ | | |
| | | | E | | | |
| | | +=====+ | | |
| | |- - - - - -| | |
| | | +=====+ | | |
| | | | F | | | |
| | | +=====+ | | |
| | | | | |
| | +===========+ | |
| | | |
| +===================+ |
| |
| +===================+ |
| | G | |
| +===================+ |
| |
+==========================+
Есть состояние A, в нем есть два ортогональных подсостояния B и G. Внутри B есть два параллельных состояния C и D. Внутри D еще два параллельных подсостояния E и F.
Как вы думаете, в каких состояниях может находится КА?
Он может находиться либо в состоянии A.G, либо... Тра-та-та-там! A.B.C + A.B.D.E + A.B.D.F.
И ведь это еще не самый сложный случай :) Гораздо круче было бы, если бы в A.B.C были еще и свои параллельные состояния.
Приходится возвращаться к теме параллельных состояний поскольку ради этого и затевается работа над SObjectizer-5.5.22. Но вот задумываясь как же искать обработчик для сообщения, когда агент одновременно находится в состояниях A.B.C, A.B.D.E и A.B.D.F вызывает непроизвольный ужас.
Отдельный ужас возникает от мысли о том, как потом объяснять пользователю как этот поиск происходит. И почему у него вызывается обработчик из A.B.C, когда он думал, что агент находится в A.B.D.F...
Хотя да, фича, наверное полезное. Даже примеры, где она может потребоваться, не так уж сложно придумать. Но пока как-то многовато белых пятен в ней.
Комментариев нет:
Отправить комментарий