我正在尝试为在线拍卖系统创建类图,但遇到了这个问题。投标属于拍卖和买方(如果我错了,请纠正我)。因此,我可以说用户是由出价组成的,而拍卖是由出价组成的,这是否违反了UML的规则?我很困惑
答案 0 :(得分:4)
“组成”一词含糊不清,这解释了您的困惑:
因此,从UML的角度来看,不可能拥有属于两个不同组合的一部分的对象,因为所有权不再是排他的。但是您可以在多个aggregations中使用该对象,这些对象是允许共享所有权的整体关系。
从OOP的角度来看,在多个合成中使用相同的对象没有问题。对象组成对应于navigable UML association。
情况很简单:一个Bid
有一个Buyer
,一个Buyer
可能有多个Bids
,而一个Auction
有多个{{1 }}。您可以使用简单的关联对此建模:
您也可以在这里使用聚合,因为有人可能会争辩说Bids
与相应的Auction
之间存在一个整体关系(个人而言,我不会这样看) :
但是,您不应在另一侧看到聚合,因为Bids
和Buyer
之间没有真正的整体关系:Bid
不是“由几个Buyer
”。
您还可以在此处使用关联类。但这不是必需的。而且语义会有所不同:这意味着Bids
和Bid
之间存在Buyer
关联:
Auction
是Bid
和Buyer
的附属物,不能单独存在(例如,如果买家失踪了)答案 1 :(得分:2)
您是否了解UML中的关联类?它们表示根据其他两个类之间的关系创建的对象,正是您要映射的对象。有很多内容详细介绍了关联类(例如Correct use of an association class)
这样一来,您就不会在读图时感到困惑(顺便说一句,您做得正确),您会发现存在一个实体Bid,该实体Bid仅与买方和拍卖相关联。