UML - 是否可以将 ActivityPartitions 添加到 StructuredActivityNodes?

UML - Is it possible to add ActivityPartitions to StructuredActivityNodes?

在第 476 页的 UML 规范中有下图:

如果我没记错的话,应该不可能将 ActivityPartions(这是 ActivityGroups 的特化 - 就像 StructuredActivityNodes)添加到 StructuredActivityNode,对吧?根据图表,StructuredActivityNodeActivityGroup 之间的唯一关系是 generalization/specialization 关系。如果Partitions in StructuredActivityNodes 是可能的,那么也应该有一个组合关系。

我错了吗?我问是因为它在某些工具(例如 VisualParadigm)中是可能的,但在其他工具中是不可能的。

如图所示,StructuredActivityNode只能拥有ActivityNode、ActivityEdge、Variable、InputPin和OutputPin。 如果您查看 UML 2.5.1 规范的图 15.65 第 406 页,您会发现 ActivityPartition 没有继承任何这些概念(ActivityPartition 继承自 ActivityGroup,后者继承自 NamedElement)。

所以 StructuredActivityNode 不应该拥有 ActivityPartition(s)。

Red Beard 指出 StructuredActivityNodes 可以包含 ActivityNodes 而 ActivityPartitions not ActivityNodes 是正确的。这是显示后一点的图表:

由此可见,StructuredActivityNodes 不能 包含 ActivityPartitions。

但是,除了 StructuredActivityNode 本身之外,规范中的任何内容都不能阻止我们从不同的分区中引用 StructuredActivityNode 中的 ActivityNode。

这可能导致无法以图形方式显示分区。规范为此定义了一个文本符号:只需将分区的名称放在节点名称上方的圆括号中。不幸的是,很多工具都不支持这种表示法。

为了能够以图形方式显示它,StructuredActivityNode 需要被多个分区引用。根据上图,这是允许的。当然,接下来的问题是,语义是什么。

实际上,没有定义语义。该规范仅定义包含 InvocationActions 的分区的语义。然后分区指定调用的目标。有两个目标是没有意义的,因此,在这种情况下不应允许(尽管缺少对此效果的约束)。但是所有其他操作都可以跨越多个分区。

因此这是一个完全有效的图表,达到了目标:

PS: 在使用的​​工具中可以创建正确的模型。虽然经过了一些调整,直到图表看起来像这样。