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

时间:2019-07-17 15:28:04

标签: java uml

根据顺序图,我首先应创建一个以参数“ item”为对象的方法“ regisreItem(Item item)”。我看到我的问题是,在方法“ regisreItem(Item item)”之后调用“ items”的构造函数,这样我就没有什么要插入到根据序列图的“ regisreItem(Item item)”方法中。还是不?

序列图

enter image description here

类图

enter image description here

这是我感兴趣的序列图的一部分

enter image description here

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

请提供给我一些可以实现的代码。 并阐明序列图的开始。

2 个答案:

答案 0 :(得分:0)

您可以使用以下方法来解决在registerItem之后调用Item构造函数的问题:

registerItem(new Item(...));

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

我假设顺序图的开始是拍卖师创建或打开一个已经创建的拍卖,然后通过重复调用registerItem(new Item(...));来添加将在拍卖中使用的物品清单,然后再进行竞标由Max和Moritz通过Auction对象添加到他们

答案 1 :(得分:0)

由于操作registerItem需要一个项目作为参数,因此Auctioneer对象需要在调用该操作之前创建它。这意味着拍卖师必须发送创建消息,而不是拍卖消息(在序列图中无法使用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等。