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

问题描述 投票:1回答:2

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

oop uml composition object-oriented-analysis
2个回答
4
投票

In general

术语构成含糊不清,这解释了你的困惑:

  • 在OOP中,object composition意味着在另一个中使用一个对象。
  • 在UML中,composition是一种特殊的关联,它代表了一个整体的关系,整体上对这些部分拥有独家所有权。

因此,在UML意义上,不可能有一个对象是两个不同组合的一部分,因为所有权将不再是排他性的。但是你可以在几个aggregations中使用该对象,这是一个允许共享所有权的整体关系。

在OOP意义上,没有问题是在(或使用)几种组合物中使用相同的对象。对象组成对应于navigable UML association

In your practical case

情况很直接:一个Bid有一个Buyer,一个Buyer可能有几个Bids,而Auction有几个Bids。您可以使用简单关联对此进行建模:

enter image description here

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

enter image description here

但是你不应该在另一边看到聚合,因为BuyerBid之间没有真正的全部关系:Buyer不是“由几个Bids组成”。

Additional remarks

你也可以在这里使用一个关联类。但这不是必需的。语义会有所不同:这意味着BidBuyer之间存在Auction关联:

  • 从技术上讲,你还有三节课。
  • 但重点是不同的:BidBuyerAuction的附属物,并且不能单独存在(例如,如果买方消失)

2
投票

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

这样你就不应该对阅读图表(你正确地做了btw)感到困惑,你会清楚存在实体Bid,它只存在于买方和拍卖中。

© www.soinside.com 2019 - 2024. All rights reserved.