为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

胡子哥哥 2023-03-31 15:39:14
根据序列图,我应该首先创建方法“regisreItem(Item item)”,参数“item”作为对象。我看到我的问题是在方法“regisreItem(Item item)”之后调用了“items”的构造函数,因此我没有任何东西可以根据序列图插入到“regisreItem(Item item)”方法中。或不 ?时序图类图这是我感兴趣的序列图的一部分https://drive.google.com/open?id=1eJolWNoN32IubP3iaaXPc_cLM5Es08hK 这是我所有的代码。请向我提供一些可以实现的代码。并阐明时序图的开头。
查看完整描述

2 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

由于该操作registerItem 需要一个项目作为参数,因此 Auctioneer 对象需要在调用该操作之前创建它。这意味着 Auctioneer 必须发送一条创建消息,而不是 Auction(new Item()在序列图中不可能用作参数 - 而且它无论如何都不会更改创建者)。i1并且i2是交互的属性。它们可以用作 的参数registerItem。 addBid还期望一个bidder. 此处应再次使用交互的属性Max和。Moritz

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

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

更好的选择是让Auctionsend the messages to its own attribute allItems。那么两条生命线将代表相同的属性,但具有不同的对象。选择器可用于区分此属性定义的插槽中的两个对象(allItems[0]allItems[1],这是可选的)。allBidsinstead ofb300EUR等也同样适用。


查看完整回答
反对 回复 2023-03-31
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

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

registerItem(new Item(...));

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

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


查看完整回答
反对 回复 2023-03-31
  • 2 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信