给定一个包含两个组件的系统,A和B,以及
系统同时启动A和B.现在A可以通过状态{A.Starting,A.Ready},B可以处于状态{B.Starting,B.DoingX,B.DoingY}。 (相应地命名A和B状态之间的转换事件:B.doingx => B转到B.DoingX等......)
我想模仿那个
如果我没弄错的话,可以在这里使用fork / join伪状态。
但是这些模型元素是否具有上述组合状态的声明性语义?还有其他方法可以对此进行建模吗?
(注意:图表来自http://yuml.me)
答案 0 :(得分:3)
你为什么不把它们拆开?以下是关于如何对其进行建模的另一个想法(假设我理解正确):
一个状态“Starting”,它包含你所指的状态A.Starting和B.Starting in parallel areas(你可以在这里使用fork / join,或者只依赖于所有区域的默认行为)输入“正在启动”状态时激活
另一个状态“正在进行”,其中包含具有“A.Ready”状态的区域和另一个包含两个状态“B.DoingX”和“B.DoingY”的并行区域。
< / LI>如果你真的需要一个整体的“DoingX”状态,那么你可能需要创建两个与A.Ready相对应的状态。
无论如何,从更广泛的角度来看:当你说“系统处于状态......”时,我相信你的观点有点偏离。相反,由这种状态机建模的系统处于一组状态。通常情况下,我会非常高兴地说“系统目前处于A.Ready和B.DoingX”。
也许你需要的只是改变术语。那怎么样:
当A.Ready和B.DoingX状态处于活动状态时,系统处于配置“DoingX”?
回应评论:是的,这是标准的,这是上层建筑规范(版本2.4 beta)的相应部分:
在分层状态机中,可以同时激活多个状态。 [...]当前活动的“状态”实际上由一组状态树表示 从根区域的最顶层状态开始直到最内层的活动子状态。我们称这样的状态树为 州配置。