无法理解方法和构造函数的顺序

Can not understand the sequence of method and constructor

根据序列图,我应该首先创建方法"regisreItem(Item item)",参数"item"作为一个对象。我看到我的问题是 "items" 的构造函数在方法 "regisreItem(Item item)" 之后被调用,因此根据序列图我没有任何东西可以插入到 "regisreItem(Item item)" 方法中。或者不是?

时序图

Class 图

这是我感兴趣的部分时序图

https://drive.google.com/open?id=1eJolWNoN32IubP3iaaXPc_cLM5Es08hK 这是我所有的代码。

请提供一些可以实现的代码。 并阐明时序图的开头。

您可以通过以下方式解决在 registerItem 之后调用 Item 构造函数的问题:

registerItem(new Item(...));

并传入项目i1i2的属性。这将创建新物品,然后可以将其添加到拍卖物品列表中。

我假设序列图的开始是拍卖师创建或打开一个已经创建的拍卖,然后通过重复调用 registerItem(new Item(...)); 添加将在拍卖中使用的项目列表,然后可以Max 和 Moritz 通过 Auction object

添加了出价

由于操作 registerItem 需要一个项目作为参数,因此 Auctioneer 对象需要在调用该操作之前创建它。这意味着 Auctioneer 必须发送创建消息,而不是 Auction(在序列图中不可能使用 new Item() 作为参数 - 而且它不会改变创建者)。 i1i2 是交互的属性。它们可以用作 registerItem 的参数。 addBid 还需要一个 bidder。此处应再次使用交互的属性 MaxMoritz

在真实程序中,这些交互属性将是 Auction::addBid 操作或拍卖师的临时变量。 Auctioneer 可能不应该有变量,因此 registerItem 操作可能应该只有通用数据类型,例如 string 作为参数。

Auction 应该向 i1i2 发送消息,但是,由于这些是交互的属性,Auction 对象不知道它们.可以省略这个细节,但最好显示 Auction 如何找到相关的 Item,例如通过 findItemByName 操作调用自身。

更好的选择是让 Auction 将消息发送到它自己的属性 allItems。那么两条生命线将代表相同的属性,但具有不同的对象。选择器可用于区分此属性定义的插槽中的两个对象(allItems[0]allItems[1],这是可选的)。同样适用于allBids而不是b300EUR等。