两个组合可以拥有同一个对象吗?

unk*_*dev 2 oop uml composition object-oriented-analysis

我正在尝试为在线拍卖系统制作类图,但遇到了这个问题。出价属于拍卖和买方(如果我错了,请纠正我)。那么我可以说 User 由 bid 组成,而 racing 由 Bid 组成,或者这违反了 UML 规则?我很困惑

Chr*_*phe 5

一般来说

术语“组合”含糊不清,这解释了您的困惑:

  • 在 OOP 中,对象组合意味着在另一个对象中使用一个对象。
  • 在 UML 中,组合是一种特殊的关联,它表示部分与整体的关系,整体对部分具有独占所有权。

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

在 OOP 意义上,不存在在(或使用)多个组合中使用相同对象的问题。对象组合对应于可导航的UML关联

在您的实际案例中

情况很简单:ABid有一个Buyer,aBuyer可能有多个Bids,并且 anAuction有多个Bids。您可以使用简单的关联对此进行建模:

在此输入图像描述

您也可以在这里使用聚合,因为有人可能会认为 anAuction和对应项之间存在整体-部分关系Bids(就我个人而言,我不会这样看待它):

在此输入图像描述

Buyer然而,您不应该在另一侧看到聚合,因为 a和 a之间不存在真正的整体关系Bid: aBuyer不是“由多个组成Bids”。

补充说明

您还可以在这里使用关联类。但这不是必需的。并且语义会有所不同:这意味着BidaBuyer和 an之间存在关联Auction

  • 从技术上讲,你仍然有三门课。
  • 但重点不同:theBid是 the 的附属品,Buyer并且 theAuction不能单独存在(例如,如果买家消失)