在UML类图中可以组成双向吗?

时间:2014-11-04 21:28:22

标签: oop uml class-diagram

组合是否能够以两个类彼此都知道的方式双向化?

如果没有,那么作曲的默认方向是什么?

3 个答案:

答案 0 :(得分:4)

您应该区分导航性和聚合。箭和钻石。

箭头A-> B意味着只能以某种简单的方式从A到达B.如果A包含B的组合,则表示

  

复合对象负责存在和存储   组合对象(部分)。

(引自OMG统一建模语言TM(OMG UML) - p.109)

那么,会众可以双向导航吗?

是的。这很正常。

例如,如果您决定在其某些功能中销毁B,则必须到达A并从那里销毁它。因此,组合具有足够的双向导航性。请注意,根据当前和未来的UML标准,双向导航性显示为两侧没有箭头的行。双面箭头已弃用。这就是你经常不会看到它的原因。

组合物本身可以双向吗?我们可以在协会的两边看到黑钻吗?

,当然这种关联不可能是相互关联的,因为B不可能只在A中创建,同时也只能在B中创建。

有趣的是,shared aggregation(空钻石)也不可能是相互的,但这里的限制并不是固有的,它只是被UML标准所禁止。

答案 1 :(得分:3)

是的,Composition不会添加关于协会可导航性的约束。 有关Accociation,Composition和Aggregations之间区别的更多信息,请访问:UML Composition vs Aggregation vs Association

答案 2 :(得分:1)

来自https://www.lucidchart.com/pages/uml/class-diagram

  

双向关联是两个类之间的默认关联,由两个类之间的直线表示。两个班级都相互了解彼此之间的关系。在上面的示例中,Car类和RoadTrip类是相互关联的。在该行的一端,Car采用“assignedCar”与多重性值0..1的关联,这意味着当RoadTrip的实例存在时,它可以有一个与之关联的Car实例,或者没有关联的Cars用它。在这种情况下,需要一个多重值为0 .. *的单独的Caravan类来证明RoadTrip可能有多个与之关联的Cars实例。由于一个Car实例可以有多个“getRoadTrip”关联 - 换句话说,一辆汽车可以进行多次公路旅行 - 多重性值设置为0 .. *