1

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

4

2 回答 2

4

一般来说

术语组合是模棱两可的,这解释了你的困惑:

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

所以在 UML 意义上,不可能有一个对象是两个不同组合的一部分,因为所有权将不再是独占的。但是您可以在多个聚合中使用该对象,这些聚合是允许共享所有权的整体关系。

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

在你的实际情况下

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

在此处输入图像描述

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

在此处输入图像描述

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

附加说明

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

  • 从技术上讲,您仍然需要三个课程。
  • 但重点不同:theBid是 the 的附属品,Buyer并且Auction不能单独存在(例如,如果买家消失了)
于 2019-02-16T22:08:16.167 回答
2

你了解过 UML 中的关联类吗?它们代表从其他两个类之间的关系创建的对象,正是您要映射的对象。有很多详细说明关联类的内容(例如正确使用关联类

这样您就不会在阅读图表时感到困惑(顺便说一句,您做得正确),您会很清楚存在实体 Bid,它仅与买方和拍卖相关联。

于 2019-02-16T20:18:54.667 回答