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等也同樣適用。
TA貢獻1799條經驗 獲得超6個贊
您可以使用以下方法解決在 registerItem 之后調用 Item 構造函數的問題:
registerItem(new Item(...));
并傳入 Itemi1和的屬性i2。這將創建新項目,然后可以將其添加到拍賣項目列表中。
我假設序列圖的開始是拍賣師創建或打開一個已經創建的拍賣,然后通過重復調用添加將在拍賣中使用的項目列表,然后 Max 和 Moritz 可以registerItem(new Item(...));通過對象Auction_
添加回答
舉報
