2 回答
TA贡献1784条经验 获得超8个赞
由于该操作registerItem
需要一个项目作为参数,因此 Auctioneer 对象需要在调用该操作之前创建它。这意味着 Auctioneer 必须发送一条创建消息,而不是 Auction(new Item()
在序列图中不可能用作参数 - 而且它无论如何都不会更改创建者)。i1
并且i2
是交互的属性。它们可以用作 的参数registerItem
。 addBid
还期望一个bidder
. 此处应再次使用交互的属性Max
和。Moritz
在真实程序中,这些交互属性将是操作Auction::addBid
或拍卖人的临时变量。Auctioneer 可能不应该有变量,因此 OperationregisterItem
可能应该只有通用数据类型,例如string
参数。
应该向和Auction
发送消息,但是,由于这些是交互的属性,对象不知道它们。省略这个细节是可以的,但最好展示 是如何找到相关的,例如通过调用自身的操作。i1
i2
Auction
Auction
Item
findItemByName
更好的选择是让Auction
send the messages to its own attribute allItems
。那么两条生命线将代表相同的属性,但具有不同的对象。选择器可用于区分此属性定义的插槽中的两个对象(allItems[0]
, allItems[1]
,这是可选的)。allBids
instead ofb300EUR
等也同样适用。
TA贡献1799条经验 获得超6个赞
您可以使用以下方法解决在 registerItem 之后调用 Item 构造函数的问题:
registerItem(new Item(...));
并传入 Itemi1
和的属性i2
。这将创建新项目,然后可以将其添加到拍卖项目列表中。
我假设序列图的开始是拍卖师创建或打开一个已经创建的拍卖,然后通过重复调用添加将在拍卖中使用的项目列表,然后 Max 和 Moritz 可以registerItem(new Item(...));
通过对象Auction
_
添加回答
举报