Мне довольно неясно, как обрабатывается событие, когда конечный автомат имеет ортогональные области. я это читал
В составных состояниях событие должно быть отправлено в самое внутреннее состояние, и если это состояние не обрабатывает событие через переход или действие, оно переходит к родителю.
Похожи ли орто-области? Должен ли мой код отслеживать несколько «текущих состояний», которые будут самыми внутренними из каждой орто-области, в которой мы сейчас находимся. Когда приходит событие, отправьте его в каждое из этих текущих состояний в произвольном порядке. Если они не справятся с этим, перейдите к родителям, пока не будет достигнут общий родитель одной или нескольких орто-регионов, а затем отправите событие один раз этому родителю?
Ортогональные области выполняются одновременно, как только вход в охватывающее состояние (или, если на верхнем уровне, запускается конечный автомат). Поэтому вам придется отслеживать несколько параллельных подсостояний (т. е. активное состояние будет кортежем, состоящим из активного состояния в каждой ортогональной области). Логика отправки и сопоставления событий такая же, как и для простого составного состояния (составное состояние с одним регионом), за исключением того, что перед возвратом к родительскому объекту необходимо учитывать все регионы.
Вы можете найти более формальное объяснение в спецификациях UML, например (выделено мной):
Регион обозначает фрагмент поведения, который может выполняться одновременно с его ортогональными регионами. Два или более регионов ортогональны друг другу, если они принадлежат одному и тому же штату или, на самом верхнем уровне, одному и тому же StateMachine. Регион становится активным (т. е. начинает выполняться) либо при входе в его собственное состояние, либо, если он непосредственно принадлежит StateMachine (т. е. это регион верхнего уровня), когда начинает выполняться принадлежащий ему StateMachine.
Когда ортогональные регионы принадлежат одному и тому же состоянию, это составное состояние:
Составное государство может быть либо простым составным состоянием ровно с одним регионом, либо ортогональным состоянием с несколькими регионами.
А для исполнения указана следующая семантика относительно регионов:
Конкретное выполнение StateMachine представлено набором допустимых обходов пути через один или несколько графов регионов, инициированных отправкой события Event, которое соответствует активным триггерам в этих графах.