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