带箭头和不带箭头的UML聚合

带箭头和不带箭头的UML聚合,uml,aggregation,Uml,Aggregation,我一直认为UML聚合被定义为路径开始处的黑色(填充)菱形,没有箭头表示结束: |--------| |--------| | :MyA |<>------| :MyB | |--------| |--------| |------------------|--------| |:MyA----:MyB| |--------| |--------| 今天我遇到了一个类似------>(右端有一个明确的箭头)的符号。所以我在UML2.

我一直认为UML聚合被定义为路径开始处的黑色(填充)菱形,没有箭头表示结束:

|--------|        |--------|
| :MyA   |<>------| :MyB   |
|--------|        |--------|
|------------------|--------|
|:MyA----:MyB|
|--------|        |--------|
今天我遇到了一个类似
------>
(右端有一个明确的箭头)的符号。所以我在UML2.4规范中查找了它,实际上找到了两个版本的参考

我最喜欢的参考文献:CraigLarman的“UML和模式”只提到了没有箭头的第一个版本。在UML规范中,我发现了一个关于可导航端的通知,但我不确定这是否相关,是否有什么区别


有人能更透彻地解释一下这一点并给出每个版本的使用示例吗?

方向意味着客户机/服务器或主/从关系。在聚合的情况下,通常情况是程序员使用聚合来查找该对象的子组件(例如,使用汽车来查找汽车零件)。零件类的方向性使这种关系变得明确,尽管在大多数情况下它是多余的。

关联有两个端点。关联的端部通过UML属性建模,UML属性可由关联相关端所涉及的分类器拥有,在这种情况下,关联被称为可导航,因为源分类器可通过该属性直接引用目标实例(关联另一端的实例)。否则,表示关联端的属性可能由关联实例本身拥有


请参见

一个箭头表示该关联可以通过这种方式导航。无箭头表示关联可以双向导航。省略了两个箭头

这可能是一个问题,因为具有
未定义的
导航性的两端看起来是相同的,但它是标准的


在我的回答中,您可以更全面地阅读有关关联/导航性/聚合的信息

借助导航性箭头,可以将任何关联端指定为“可导航”。然而,UML的“可导航性”的概念并没有精确的含义,人们把它与另一端的类所拥有的关联端的概念混淆了。类的关联端所有权的概念意味着关联端对应于该类的参考属性。这个问题仅在去年的新UML版本2.5中得到了澄清,该版本引入了一种新的关联最终所有权的可视化符号,如中所示的“点”。这很可能是您遇到的内容的预期含义,即,它真正的含义是以下参考属性:

更多解释请参见此

对注释的补充回答:如果您的类模型指定了所有关联端的所有权,并且您的类图显示了它们,并且没有所有权点(也没有导航箭头),如中所示,那么根据UML2.5,关联端由关联本身“拥有”。因为我们在MyA端都没有所有权点,所以两端都由复合协会“拥有”。就编写/生成的代码而言,这意味着复合关联不是通过MyA或MyB中的引用属性实现的,而是必须借助单独的类来实现,比如“MyA有MyB”,它有两个引用属性,用于引用任何合成链接的聚合和组件,如以下类矩形中所示:


您所说的“没有箭头表示关联可以双向导航”是不正确的。没有箭头表示导航能力未指定。@gwag去查看VP UML帮助或UML标准页面上显示的图表。不久前,我也和你一样认为,但是那些双面箭头已经过时了。在最新的UML2.5规范中,它们描述了三种通过工具实现视觉完整性的选项(见第211页)。第二个选项是“抑制所有箭头和十字:无法对导航进行推断”,第三个选项是“抑制两个方向上与导航能力相关的箭头”(在这种情况下,双向导航能力无法与完全没有导航的情况区分开来).在任何情况下,如果您在图表中与箭头有关联,而另一个图表中没有箭头,则这不具有您建议的含义(可在两个方向上导航)@gnat如果你有一个与两个箭头的关联,另一个与没有箭头的关联,那么你是对的。但是如果第一个箭头有一个箭头,而第二个没有箭头,那么它有相同的两个dir/未定义的值。我看不出与这篇文章有任何矛盾。我们的讨论只是表明了整个UML的“可导航性”概念“令人困惑,几乎毫无意义。真正重要的(以及暗示“可导航性”)是关联最终所有权的概念。因此,建议不要关注“可导航性”,而只关注关联端的所有权。可导航性(箭头)和关联端的所有权是不同的。虽然UML的“可导航性”概念没有精确的含义,但类的关联端所有权意味着关联端对应于该类的引用属性。这个问题在去年新的UML版本2.5中才得到澄清。请参阅的第5章,您是否可以用一个省略了点或箭头的示例来扩展您的答案,并稍微解释一下差异?只是一个小的更正:点符号已经出现在2.1中,但实际上并未在UML文档中使用。较新的2.5版本更广泛地使用了这种符号。作为旁注:在EnterpriseArchitect中,您必须单击4次才能为关联设置相应的属性,因此它不是