两个作品可以拥有同一个对象吗?

时间:2019-02-16 19:36:05

标签: oop uml composition object-oriented-analysis

我正在尝试为在线拍卖系统创建类图,但遇到了这个问题。投标属于拍卖和买方(如果我错了,请纠正我)。因此,我可以说用户是由出价组成的,而拍卖是由出价组成的,这是否违反了UML的规则?我很困惑

2 个答案:

答案 0 :(得分:4)

一般

“组成”一词含糊不清,这解释了您的困惑:

  • 在OOP中,object composition意味着要在另一个对象中使用一个对象。
  • 在UML中,composition是一种特殊的关联,表示部分-整体关系,并且整体具有部分专有权。

因此,从UML的角度来看,不可能拥有属于两个不同组合的一部分的对象,因为所有权不再是排他的。但是您可以在多个aggregations中使用该对象,这些对象是允许共享所有权的整体关系。

从OOP的角度来看,在多个合成中使用相同的对象没有问题。对象组成对应于navigable UML association

在您的实际情况下

情况很简单:一个Bid有一个Buyer,一个Buyer可能有多个Bids,而一个Auction有多个{{1 }}。您可以使用简单的关联对此建模:

enter image description here

您也可以在这里使用聚合,因为有人可能会争辩说Bids与相应的Auction之间存在一个整体关系(个人而言,我不会这样看) :

enter image description here

但是,您不应在另一侧看到聚合,因为BidsBuyer之间没有真正的整体关系:Bid不是“由几个Buyer”。

其他备注

您还可以在此处使用关联类。但这不是必需的。而且语义会有所不同:这意味着BidsBid之间存在Buyer关联:

  • 从技术上讲,您仍然有3节课。
  • 但是重点不同:AuctionBidBuyer的附属物,不能单独存在(例如,如果买家失踪了)

答案 1 :(得分:2)

您是否了解UML中的关联类?它们表示根据其他两个类之间的关系创建的对象,正是您要映射的对象。有很多内容详细介绍了关联类(例如Correct use of an association class

这样一来,您就不会在读图时感到困惑(顺便说一句,您做得正确),您会发现存在一个实体Bid,该实体Bid仅与买方和拍卖相关联。