uml - UML 状态机图:从复合状态触发退出
问题描述
我有一个UML 状态机图,如下所示:
+-----------------------------------+
| A |
| +------+ E1 +------+ | E2 +-----+
o-->| o-->| A1 |------>| A2 |------------->| B |
| +------+ +------+ | +-----+
| |
+-----------------+-----------------+
| E3
V
+-----+
| C |
+-----+
实际上,复合状态 A有很多子状态,我想将其提取到单独的图中。这意味着从A2
到的过渡箭头B
必须被一个出口点切成两半。
但是我应该把事件 E2 放在哪里?我想,我应该把它放在出口点的两边,也就是在两个图中:
高级图(o-o
是分解图标,(X)
是出口点):
+-----------+
| |
| | E2 +-----+
o-->| A (X)------>| B |
| | +-----+
| o-o |
+-----+-----+
| E3
V
+-----+
| C |
+-----+
低级图:
+------------------------------------+
| A |
| +------+ E1 +------+ E2 |
| o-->| A1 |------>| A2 |----->(X)
| +------+ +------+ |
| |
+------------------------------------+
请注意,E2
两个图中都显示了这一点。不幸的是,我在UML 规范中找不到任何东西来支持这个想法。相反,这种方法显然会导致冲突(参见第 14.2.3.9.3 节)。但我认为这里没有冲突:
- 两种转换都使系统离开 state
A
并进入 stateB
。所以它们实际上形成了一个过渡。 - 两个图都很容易理解,因为两者都显示
E2
,并且出口点看起来像两个图之间的“门”,系统的状态通过它“移动”(A, A2)
到B
。我认为E2
仅在出口点的一侧显示会令人困惑。 - 如果有另一个类似的转换,例如从
A1
到一个状态D
(未显示),那么它可以以相同的方式处理,具有第二个退出点。但是,在这种情况下,两个出口点的标签应不同(例如:“从 A1 退出”和“从 A2 退出”)。
这是有效的 UML 吗?如果没有,我应该如何解决这个问题?
解决方案
在这种情况下,我要做的就是A
只显示A2
内部,其余的都没有。注释会告诉“这是”的摘录A
。
+----------------+
| A (excerpt) |
| +------+ | E2 +-----+
o-->| | A2 |------------->| B |
| +------+ | +-----+
| |
+----------------+
B
同样,您可以通过添加注释来省略该部分。此外(如果工具允许),您可以在适当的地方添加详细图表的超链接。
推荐阅读
- jquery - 将 div 覆盖在屏幕上,但背景颜色避开页面区域
- amazon-web-services - 除了托管区域的名称服务器之外,我还应该在 A 记录下放置什么?
- javascript - 使用 webpack 访问 index.html 中的环境变量
- javascript - 如何使 Chrome 扩展 div 全屏显示?
- excel - 如何从Excel中的两列中识别不同的记录
- javascript - 滚动时仅触发一次
- ios - 使用 SwiftUI 将单个引脚添加到 Mapkit
- python-3.6 - 将txt文件合并为一个,保留不同文件中重复项的最新行
- elasticsearch - elsaticsearch 中的源过滤、存储字段和文档值有什么区别?
- python - 如何在 python 中的文本预处理期间保留十进制数字?(已编辑)