UML状态机-重用状态

时间:2019-06-11 14:51:01

标签: uml state-machine fsm

我正在尝试对状态机进行建模,该状态机可重用状态以降低复杂性。 我有三种状态:状态A,B和X。

我的状态X可以通过状态A或B的交易进入。

状态X包含具有很多复杂性的多个子状态,我不会重复实现它。

状态X的过程完成后,我需要根据先前的状态回到状态A或B。

有解决这个问题的优雅方法吗?

2 个答案:

答案 0 :(得分:2)

  

状态X包含多个具有高度复杂性的子状态,我不会重复实现它

定义与您的状态X相对应的子计算机,并在当前计算机中使用子计算机状态在需要的位置实例化它

请参见formal-17-12-05中的§14.2.3.4.7子计算机状态和第311页的子计算机:

  

子机是一种可重复使用单个StateMachine规范的方式。它们与封装的复合状态相似,因为它们需要将传入和传出的Transition绑定到其内部顶点。

     

...

     

注意。每个子计算机状态代表一个子计算机的不同实例,即使两个或多个子计算机状态引用同一子计算机也是如此。

答案 1 :(得分:1)

SubMachine 将帮助您重用状态建模的多个时间部分。 但是,如果您希望能够从A或B进入状态X,然后恢复到先前的状态, ShallowHistory 会是一个好主意。

在以下状态机中,我对状态X1和X2都引用的SubMachine X进行了建模。我还想对状态X2在A或B之后处理,然后在下一个状态(如果是前一个状态)进行处理这一事实进行建模。

enter image description here

另一种解决方案是使用过渡防护或事件/触发器。您必须谨记,当发生特定事件或其防护为真时,将触发转换。以下截图。

enter image description here