UML状态机-重用状态

UML状态机-重用状态,uml,state-machine,fsm,Uml,State Machine,Fsm,我试图建立一个状态机模型,它重用一个状态以降低复杂性。 我有三种状态:状态A、B和X 我的状态X可以通过状态a或B的事务输入 状态X包含多个复杂的子状态,我不想实现两次 在状态X中的过程完成后,我需要根据前一个状态转换回状态A或B 有没有一个优雅的方法来解决这个问题 状态X包含多个复杂的子状态,我不想实现两次 定义与状态X对应的子机,并在当前机器中使用子机状态在需要的地方实例化它 参见第311页中的§14.2.3.4.7子机状态和子机: 子机是一种可以多次重用单个状态机规范的方法。它们类似于封装

我试图建立一个状态机模型,它重用一个状态以降低复杂性。 我有三种状态:状态A、B和X

我的状态X可以通过状态a或B的事务输入

状态X包含多个复杂的子状态,我不想实现两次

在状态X中的过程完成后,我需要根据前一个状态转换回状态A或B

有没有一个优雅的方法来解决这个问题

状态X包含多个复杂的子状态,我不想实现两次

定义与状态X对应的子机,并在当前机器中使用子机状态在需要的地方实例化它

参见第311页中的§14.2.3.4.7子机状态和子机:

子机是一种可以多次重用单个状态机规范的方法。它们类似于封装的复合状态,因为它们需要将传入和传出转换绑定到其内部顶点

注意。每个子机状态表示一个子机的不同实例化,即使两个或多个子机状态引用同一个子机

子机器将帮助您重用状态建模的多个时间部分。 但是,如果您希望能够从A或B进入您的状态X,然后重新运行到前一个状态,那么浅层历史将是一个好主意

在下面的状态机中,我建模了一个子机X,该子机X由状态X1和X2引用。我还想模拟这样一个事实,即状态X2在A或B之后处理,然后是下一个状态(如果是前一个)

另一个解决方案是使用过渡保护或事件/触发器。您必须记住,当特定事件发生或其保护为真时,会触发转换,参见下面的屏幕截图


@Thomas我研究了历史和深刻的历史。然而,我认为这是行不通的,因为状态B本身实际上是子状态的一部分。所以会有多个伪敌对状态。