Иерархические конечные автоматы — орторегионы

Иерархические конечные автоматы — орторегионы
Иерархические конечные автоматы — орторегионы - jeremiahjrross @ Unsplash

Мне довольно неясно, как обрабатывается событие, когда конечный автомат имеет ортогональные области. я это читал

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

Похожи ли орто-области? Должен ли мой код отслеживать несколько «текущих состояний», которые будут самыми внутренними из каждой орто-области, в которой мы сейчас находимся. Когда приходит событие, отправьте его в каждое из этих текущих состояний в произвольном порядке. Если они не справятся с этим, перейдите к родителям, пока не будет достигнут общий родитель одной или нескольких орто-регионов, а затем отправите событие один раз этому родителю?

Ортогональные области являются параллельными

Поведение должно быть таким, как если бы они обрабатывались одновременно, и поэтому порядок не должен иметь значения.

Ортогональные области выполняются одновременно, как только вход в охватывающее состояние (или, если на верхнем уровне, запускается конечный автомат). Поэтому вам придется отслеживать несколько параллельных подсостояний (т. е. активное состояние будет кортежем, состоящим из активного состояния в каждой ортогональной области). Логика отправки и сопоставления событий такая же, как и для простого составного состояния (составное состояние с одним регионом), за исключением того, что перед возвратом к родительскому объекту необходимо учитывать все регионы.


Вы можете найти более формальное объяснение в спецификациях UML, например (выделено мной):

Регион обозначает фрагмент поведения, который может выполняться одновременно с его ортогональными регионами. Два или более регионов ортогональны друг другу, если они принадлежат одному и тому же штату или, на самом верхнем уровне, одному и тому же StateMachine. Регион становится активным (т. е. начинает выполняться) либо при входе в его собственное состояние, либо, если он непосредственно принадлежит StateMachine (т. е. это регион верхнего уровня), когда начинает выполняться принадлежащий ему StateMachine.

Когда ортогональные регионы принадлежат одному и тому же состоянию, это составное состояние:

Составное государство может быть либо простым составным состоянием ровно с одним регионом, либо ортогональным состоянием с несколькими регионами.

А для исполнения указана следующая семантика относительно регионов:

Конкретное выполнение StateMachine представлено набором допустимых обходов пути через один или несколько графов регионов, инициированных отправкой события Event, которое соответствует активным триггерам в этих графах.


LetsCodeIt, 18 декабря 2022 г., 15:04