2 回答

TA貢獻1784條經驗 獲得超8個贊
由于該操作registerItem
需要一個項目作為參數,因此 Auctioneer 對象需要在調用該操作之前創建它。這意味著 Auctioneer 必須發送一條創建消息,而不是 Auction(new Item()
在序列圖中不可能用作參數 - 而且它無論如何都不會更改創建者)。i1
并且i2
是交互的屬性。它們可以用作 的參數registerItem
。 addBid
還期望一個bidder
. 此處應再次使用交互的屬性Max
和。Moritz
在真實程序中,這些交互屬性將是操作Auction::addBid
或拍賣人的臨時變量。Auctioneer 可能不應該有變量,因此 OperationregisterItem
可能應該只有通用數據類型,例如string
參數。
應該向和Auction
發送消息,但是,由于這些是交互的屬性,對象不知道它們。省略這個細節是可以的,但最好展示 是如何找到相關的,例如通過調用自身的操作。i1
i2
Auction
Auction
Item
findItemByName
更好的選擇是讓Auction
send the messages to its own attribute allItems
。那么兩條生命線將代表相同的屬性,但具有不同的對象。選擇器可用于區分此屬性定義的插槽中的兩個對象(allItems[0]
, allItems[1]
,這是可選的)。allBids
instead ofb300EUR
等也同樣適用。

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