UML Statemachine - 重用状态
UML Statemachine - Reuse state
我正在尝试对重用状态的状态机建模以降低复杂性。
我有三个状态:状态 A、B 和 X。
我的状态 X 可以通过状态 A 或 B 的交易进入。
状态 X 包含多个子状态,非常复杂,我不想将它实现两次。
在状态 X 中的过程完成后,我需要根据之前的状态转换回状态 A 或 B。
有什么优雅的方法可以解决这个问题吗?
State X includes multiple substates with lots of complexity and I don't wont to implement it twice
定义一个submachine对应于你的状态X并在你当前的机器中使用submachine state在你需要的地方实例化它
参见formal-17-12-05中第 311 页的 §14.2.3.4.7 子机状态和子机:
Submachines are a means by which a single StateMachine specification can be reused multiple times. They are similar to encapsulated composite States in that they need to bind incoming and outgoing Transitions to their internal Vertices.
...
NOTE. Each submachine State represents a distinct instantiation of a submachine, even when two or more submachine States reference the same submachine.
A SubMachine 将帮助您重复使用状态建模的多个时间部分。
但是,如果你希望能够从 A 或 B 进入你的状态 X,然后返回到之前的状态,ShallowHistory 会是个好主意。
在下面的状态机中,我对状态 X1 和 X2 都引用的 SubMachine X 建模。我还想模拟这样一个事实,即状态 X2 在 A 或 B 之后处理,然后是下一个状态(如果是前一个状态)。
另一种解决方案是与过渡后卫一起打球或 events/triggers。你必须记住,当特定事件发生或者当它的 guard 为 true 时,转换被触发。以下屏幕截图。
我正在尝试对重用状态的状态机建模以降低复杂性。 我有三个状态:状态 A、B 和 X。
我的状态 X 可以通过状态 A 或 B 的交易进入。
状态 X 包含多个子状态,非常复杂,我不想将它实现两次。
在状态 X 中的过程完成后,我需要根据之前的状态转换回状态 A 或 B。
有什么优雅的方法可以解决这个问题吗?
State X includes multiple substates with lots of complexity and I don't wont to implement it twice
定义一个submachine对应于你的状态X并在你当前的机器中使用submachine state在你需要的地方实例化它
参见formal-17-12-05中第 311 页的 §14.2.3.4.7 子机状态和子机:
Submachines are a means by which a single StateMachine specification can be reused multiple times. They are similar to encapsulated composite States in that they need to bind incoming and outgoing Transitions to their internal Vertices.
...
NOTE. Each submachine State represents a distinct instantiation of a submachine, even when two or more submachine States reference the same submachine.
A SubMachine 将帮助您重复使用状态建模的多个时间部分。 但是,如果你希望能够从 A 或 B 进入你的状态 X,然后返回到之前的状态,ShallowHistory 会是个好主意。
在下面的状态机中,我对状态 X1 和 X2 都引用的 SubMachine X 建模。我还想模拟这样一个事实,即状态 X2 在 A 或 B 之后处理,然后是下一个状态(如果是前一个状态)。
另一种解决方案是与过渡后卫一起打球或 events/triggers。你必须记住,当特定事件发生或者当它的 guard 为 true 时,转换被触发。以下屏幕截图。