【问题标题】:UML Statemachine - Reuse stateUML 状态机 - 重用状态
【发布时间】:2019-06-11 14:51:01
【问题描述】:

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

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

State X 包含多个具有很多复杂性的子状态,我不会执行两次。

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

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

【问题讨论】:

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

标签: uml state-machine fsm


【解决方案1】:

State X 包含多个复杂度很高的子状态,我不会执行两次

定义一个对应于你的状态 X 的 submachine 并在你当前的机器中使用 submachine state 在你需要的地方实例化它

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

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

...

注意。每个 submachine State 都代表一个 submachine 的不同实例,即使两个或多个 submachine State 引用同一个 submachine。

【讨论】:

    【解决方案2】:

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

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

    另一个解决方案是使用转换守卫或事件/触发器。您必须记住,当特定事件发生或当它的保护为真时触发转换。如下截图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 2016-02-20
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      相关资源
      最近更新 更多