【发布时间】:2019-07-10 15:14:34
【问题描述】:
我正在尝试为在线拍卖系统制作类图,但遇到了这个问题。出价属于拍卖和买方(如果我错了,请纠正我)。那么我可以说用户由出价和拍卖由出价组成还是违反 UML 规则?我很困惑
【问题讨论】:
标签: oop uml composition object-oriented-analysis
我正在尝试为在线拍卖系统制作类图,但遇到了这个问题。出价属于拍卖和买方(如果我错了,请纠正我)。那么我可以说用户由出价和拍卖由出价组成还是违反 UML 规则?我很困惑
【问题讨论】:
标签: oop uml composition object-oriented-analysis
您了解过 UML 中的关联类吗?它们代表从其他两个类之间的关系创建的对象,正是您要映射的对象。有很多详细描述关联类的内容(例如Correct use of an association class)
这样您就不会在阅读图表时感到困惑(顺便说一句,您做得正确),您会很清楚存在实体 Bid,该实体仅与买方和拍卖相关联。
【讨论】:
术语组合是模棱两可的,这解释了你的困惑:
所以在 UML 意义上,不可能有一个对象是两个不同组合的一部分,因为所有权将不再是独占的。但是您可以在多个aggregations 中使用该对象,它们是允许共享所有权的整体关系。
在 OOP 的意义上,在多个组合中使用(或使用)相同的对象是没有问题的。对象组合对应一个navigable UML association。
情况很简单:一个Bid 有一个Buyer,一个Buyer 可能有几个Bids,一个Auction 有几个Bids。您可以使用简单的关联对其进行建模:
您也可以在这里使用聚合,因为有人可能会争辩说Auction 和相应的Bids 之间存在整体关系(我个人不会这样认为):
但是,您不应该在另一边看到聚合,因为 Buyer 和 Bid 之间没有真正的整体关系:Buyer 不是“由多个 Bids 组成”。
您也可以在这里使用关联类。但这不是必需的。而且语义会有所不同:这意味着Buyer 和Auction 之间存在Bid 关联:
Bid 是Buyer 和Auction 的附属品,不能单独存在(例如,如果买家消失了)【讨论】: