2016-10-28 59 views
2

我真的是一個初學者在處理Java,驚喜,我們必須爲情況做一個UML類圖表。我完全不確定我的UML圖,我想問一下,如果有一些更熟悉的人可以看看。謝謝。uml exercise Texas'Hold'Em撲克

情況是這樣的:

對於在德州撲克變種以下信息撲克給出:

對於pokergame需要兩個十二球員張牌之間,即有52 。每張卡具有標籤(例如「國王」),值(2至14)和顏色(例如十字)。對於撲克遊戲進一步指定的是所有插入物(該罐,例如450)和來自該套牌的五張(普通)卡的總和。 對於每個玩家來說,名片,信用卡(例如7592)和現在的,卡片組中的兩張卡片和一個值(例如「Full House?」)。

對於每個玩家,還會注意到他是否擁有莊家位置。

任務:爲沒有功能的遊戲設計一個UML類圖表(要使用的類用粗體表示)。對於這些類,鍵入必要的實例變量,包括它們(符合Java的)數據類型。繪製類之間的所有關係。注意上面給出的多重信息。

這是我的解決方案:

And this is my solution:

什麼是功能是什麼意思?我有正確的關係嗎?我需要方法嗎?

+0

對關聯使用錯誤的連接器。功能可能意味着操作。 –

+0

謝謝您的評論。是否因爲這些類本身就是其他類的屬性?手是球員的屬性。所以我有一個聚合?玩家和卡牌遊戲可以在沒有撲克遊戲的情況下存在,所以我沒有組成但是沒有玩家和沒有卡牌的卡牌,手不能存在,所以這裏是一個組合? – Becker

回答

1

你不應該太在意聚合。這不會爲設計增加太多價值(但僅在極少數情況下)。首先你的箭是錯的。它們代表UML中的泛化。你需要簡單的關聯。除了你想表達的導航能力只在一個方向上(這在大多數情況下也是你絕對不需要的東西),只需要將箭頭留下(這些箭頭必須是空心的三角形)。你應該做的是在關聯的末端使用角色,而不是將類型化的屬性放在類中。此外,你應該遵循約定,說類名以大寫字母開頭(雖然我不熟悉Java)。

enter image description here

以上就是說明我的意思的部分型號。請注意,我已添加dealer關聯。這確保遊戲中只有一個經銷商。 {subsets players}約束表明發牌人必須是players之一(感謝JimL。提示)。只使用國旗可能會導致多個經銷商設置旗幟。應該有一個約束條件,告知isDealer僅適用於與dealer關聯關聯的約束。

+0

這個模型看起來相當準確。在'經銷商'上,我會加入'{子集球員}'來說明不能有13名球員。 –

+0

@JimL。如上所述:我不知道撲克規則以及經銷商是否是其中的一名球員或是一名獨立人士:-) –

+0

從問題出發:「對於每名球員,他也注意到他是否擁有莊家的位置。」 –

2

我試圖讓從文本信息轉換成圖表:

enter image description here

您可以通過類型「字符串」的樸素屬性替換枚舉。我沒有填寫HandValue的所有值(這三個點不是有效的UML)。 我不清楚一隻手是否總是有價值。如果有,則用0替換0..1。

如果我正確理解文字,一隻手只有兩張牌,但這對我來說似乎很奇怪,我認爲它應該是五。

您可以在CardDeck和Card之間的關聯中添加合成鑽石,但從文本中不清楚這是否合適。

您可以添加一個約束條件,即PokerGame的commonCards應該是PokerGame cardDeck的卡片子集;另外,PokerGame的每個玩家的手牌都是PokerGame的cardDeck牌的一個子集。

你可以在每個關聯結束時繪製一個開放的箭頭(不是三角箭頭;這將意味着泛化),即在我已經提到過多重性和實例變量名稱的一側。

您可以在關聯的另一端指定多重性,但這些多重性在文本中未提及。

我沒有指定任何可見性(公共/私人/保護),因爲這些都沒有在文字中指定。

+0

這個模型非常接近,但也有一些錯誤的說法。例如:一張卡片並不總是有Ace,King,Queen或Jack的標籤(例如,3個俱樂部);一旦卡片被處理,一張卡片卡片不包含52個卡片(應爲0..52); '玩家'在交易'卡牌'之前沒有'手牌'。 –

+0

謝謝,現在對我來說這真的很有意義。做了另一次運動,我對它有很好的感覺。 – Becker

+0

@JimL。,感謝您的評論,我改進了圖表。雖然文字說'每張卡都有一個標籤和一個值',但我認爲你是對的,它總是隻有一個或另一個。你也可能是正確的,一個卡片卡片有0..52張卡片,但是這從文本中是不清楚的。我將「卡牌套牌」解釋爲全套卡牌,即使這些卡牌已經發出。 –