In short
共享聚合似乎只表达了一种简单的关联。它显然是一个“建模安慰剂”,没有客观理由使用它(除非在建模者就特定附加语义达成一致的特定上下文中)。
然而,一些消息来源声称共享聚合将意味着实例聚合图中不存在循环。这将使聚合成为图建模领域的强大工具。
但我在规格中找不到这些说法的任何证据。我是否错过了一些间接证据(例如几个约束的相互作用)?
更多细节
报价单
在他们的书中统一建模语言参考手册,第二版、Booch、Jacobson 和 Rumbaugh 关于(共享)聚合的主张:
聚合和关联之间的区别通常是品味问题,而不是语义差异。请记住,聚合就是关联。聚合传达了这样的思想:聚合本质上是其各部分的总和。事实上,它添加到关联中的唯一真正的语义是聚合链接的链不能形成循环的约束,然而,了解这一点通常很重要。 (...)尽管聚合附加的语义很少,但每个人都认为它是必要的(出于不同的原因)。将其视为建模安慰剂。
其他消息灵通的来源(例如uml-diagrams.org和几篇学术论文)也认为有向无环图是理所当然的。
根据 UML 规范进行验证
这些书是 2004 年的,基于 UML 2.0。但这种说法大部分还是得到了证实UML 2.5.1 规范。共享聚合在其中的定义非常模糊,与简单关联相比没有任何客观优势(第 112 页):
有时,属性用于模拟使用一个实例将一组实例组合在一起的情况;这称为聚合。为了表示这种情况,Property 有一个 AggregationKind 类型的聚合属性; (...)
...
共享:
指示该属性具有共享聚合语义。共享聚合的精确语义因应用程序领域和建模者而异。
另一个关于聚合的子句可以防止一些特殊的循环情况(p.200):
如果关联是二进制的,并且另一端未标记为共享或复合聚合,则关联的一端属性只能标记为共享或复合聚合。
但我没有找到任何证据表明“聚合链接的链可能不会形成循环“在一般情况下。我也没有发现其他属性,例如传递性和反对称性,可以用来推断不存在循环。
UML 发明者的主张现在已经过时了吗?或者我是否错过了当前规范中可以导出此声明的某些内容?