UML Statemachine - Повторное использование состояния - PullRequest
1 голос
/ 11 июня 2019

Я пытаюсь смоделировать конечный автомат, который повторно использует состояние, чтобы уменьшить сложность. У меня есть три состояния: состояние A, B и X.

Мое состояние X может быть введено через транзакцию из состояния A или B.

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

После завершения процесса в состоянии X мне нужно вернуться обратно в состояние A или B, в зависимости от того, какое из них было предыдущим.

Есть ли элегантный способ решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 11 июня 2019

Состояние X включает в себя несколько подсостояний с большой сложностью, и я не буду реализовывать его дважды

Определите автомат , соответствующий вашему состоянию X, и в вашем текущем компьютере используйте Состояние аппарата , чтобы создать его там, где вам нужно

См. §14.2.3.4.7 Состояния и параметры автоматов, стр. 311 в formal-17-12-05 :

Субмашины - это средство, с помощью которого одна спецификация StateMachine может многократно использоваться повторно. Они похожи на инкапсулированные составные состояния в том, что им необходимо связать входящие и исходящие переходы со своими внутренними вершинами.

...

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

1 голос
/ 12 июня 2019

A SubMachine поможет вам повторно использовать несколько временных частей моделирования состояния.Но если вы хотите иметь возможность войти в ваше состояние X из A или B и затем вернуться к предыдущему состоянию, ShallowHistory было бы хорошей идеей.

В следующем автомате:Я смоделировал SubMachine X, на который ссылаются оба состояния X1 и X2.Я также хотел смоделировать тот факт, что состояние X2 обрабатывается после A или B и затем следующего состояния, если предыдущее.

enter image description here

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

enter image description here

...