无法理解方法和构造函数的顺序
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(...));
并传入项目i1
和i2
的属性。这将创建新物品,然后可以将其添加到拍卖物品列表中。
我假设序列图的开始是拍卖师创建或打开一个已经创建的拍卖,然后通过重复调用 registerItem(new Item(...));
添加将在拍卖中使用的项目列表,然后可以Max 和 Moritz 通过 Auction
object
添加了出价
由于操作 registerItem
需要一个项目作为参数,因此 Auctioneer 对象需要在调用该操作之前创建它。这意味着 Auctioneer 必须发送创建消息,而不是 Auction(在序列图中不可能使用 new Item()
作为参数 - 而且它不会改变创建者)。 i1
和 i2
是交互的属性。它们可以用作 registerItem
的参数。
addBid
还需要一个 bidder
。此处应再次使用交互的属性 Max
和 Moritz
。
在真实程序中,这些交互属性将是 Auction::addBid
操作或拍卖师的临时变量。 Auctioneer 可能不应该有变量,因此 registerItem
操作可能应该只有通用数据类型,例如 string
作为参数。
Auction
应该向 i1
和 i2
发送消息,但是,由于这些是交互的属性,Auction
对象不知道它们.可以省略这个细节,但最好显示 Auction
如何找到相关的 Item
,例如通过 findItemByName
操作调用自身。
更好的选择是让 Auction
将消息发送到它自己的属性 allItems
。那么两条生命线将代表相同的属性,但具有不同的对象。选择器可用于区分此属性定义的插槽中的两个对象(allItems[0]
、allItems[1]
,这是可选的)。同样适用于allBids
而不是b300EUR
等。
根据序列图,我应该首先创建方法"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(...));
并传入项目i1
和i2
的属性。这将创建新物品,然后可以将其添加到拍卖物品列表中。
我假设序列图的开始是拍卖师创建或打开一个已经创建的拍卖,然后通过重复调用 registerItem(new Item(...));
添加将在拍卖中使用的项目列表,然后可以Max 和 Moritz 通过 Auction
object
由于操作 registerItem
需要一个项目作为参数,因此 Auctioneer 对象需要在调用该操作之前创建它。这意味着 Auctioneer 必须发送创建消息,而不是 Auction(在序列图中不可能使用 new Item()
作为参数 - 而且它不会改变创建者)。 i1
和 i2
是交互的属性。它们可以用作 registerItem
的参数。
addBid
还需要一个 bidder
。此处应再次使用交互的属性 Max
和 Moritz
。
在真实程序中,这些交互属性将是 Auction::addBid
操作或拍卖师的临时变量。 Auctioneer 可能不应该有变量,因此 registerItem
操作可能应该只有通用数据类型,例如 string
作为参数。
Auction
应该向 i1
和 i2
发送消息,但是,由于这些是交互的属性,Auction
对象不知道它们.可以省略这个细节,但最好显示 Auction
如何找到相关的 Item
,例如通过 findItemByName
操作调用自身。
更好的选择是让 Auction
将消息发送到它自己的属性 allItems
。那么两条生命线将代表相同的属性,但具有不同的对象。选择器可用于区分此属性定义的插槽中的两个对象(allItems[0]
、allItems[1]
,这是可选的)。同样适用于allBids
而不是b300EUR
等。