2012-01-15 48 views
4

我爲我的Java應用程序構建UML 2.0類圖。在我的代碼中,我有HashMap數據類型的屬性。但是,據我所知,在UML標準中沒有HashMap數據類型。問題是 - 我可以使用HashMap作爲類的屬性的數據類型嗎?類圖中的HashMap(UML)

UPDATE

也許在圖我只是應指向java.util包?並且可能將Map類放在此包中的圖表上?

+1

的屬性通常不應該的'HashMap'數據類型。它應該有'Map '數據類型。 – 2012-01-15 08:49:34

回答

0

HashMap只是許多java類中的一個。
您可以在UML 2.0類圖表中使用任何Java類,接口或原始類型。
UML 2.0 java類圖中的任何數據類型都對應於某個java類,接口或原語。

您正在使用UML圖來開發您自己的應用程序。所以,爲了您的方便,請隨意擴展UML 2.0標準。沒有人能爲此責怪你。

+1

如果你真的有使用Java類的UML模型(我不會推薦它),這僅僅是擴展模型(或庫模型)。通過配置文件擴展UML - 在這種情況下,它不是必需的。 – Christian 2012-01-15 15:46:08

1

只需在UML中使用普通類並將其稱爲HashMap即可。 UML是語言不可知的,並且不瞭解Java的預定義類。或者我誤解了你的問題?

+1

HashMaps不屬於UML模型。尤其不是一流的分類器。 – Christian 2012-01-15 15:44:08

+1

@Christian:你說的沒道理。我可以在UML中創建任何數據類型。什麼阻止我調用一個類HashMap並設置一個組合關係到另一個類如果我想? – Tudor 2012-01-15 15:46:46

+1

當然,您/可以將其放入UML模型中。沒有什麼能阻止你這樣做。將實現細節放入不需要這樣做的概念模型並不是一種好的方式。看到我的答案另一種方法。 – Christian 2012-01-16 15:15:21

3

無論如何,HashMap不應該出現在你的UML模型中。 HashMap只是一個合格關聯的實現。可能它甚至只是一個提高速度的不合格協會。所以如果你有一個帶有HashMap的類A,你可以建模一個UML Class A,一個UML Class B和一個從A到B的UML Association。如果通過一個不屬於屬性的鍵B.如果你的HashMap鍵是B的名字(而B有這個名字作爲屬性),你可以簡單地忽略限定詞。

爲了表示您的關聯的實現(您希望使用HashSet實現它),您可以將其添加爲關鍵字或爲其創建一個Stereotype(更復雜)。

+0

HashMap的是一流的,它應該在UML模型中肯定存在。然而,並不是每個班級都需要作爲班級出現在圖表上。 – 2012-01-16 12:15:42

0

HashMap的可能是這個概念在Java名稱,但每一個編程語言有某種Hash<>Map<>類的,和等效東西應該包含在UML,因爲很多車型包括哈希或地圖容器的屬性。

某些工具支持<<map>>刻板印象;如果你有,我會使用它,如果你主要關心視覺直覺 - 但是不可能說出暗示什麼樣的關鍵。

合格的關聯圖形化UML設備是非直觀的,我懷疑工具很難轉化爲正向代碼生成中的任何明智事物。我會避免它。

的另一種方式做到這一點(這是我平時)做的是以下幾點:

  • 創建V和K作爲通用參數的散列類。爲了正確地做到這一點,K真的應該受到諸如'Ordered'之類的類的限制,該類也缺乏UML(我們總是添加這個)
  • 對於每次使用Hash例如Hash<Thing, String>(小心與訂單 - 我用值第一,鍵秒),創建一個名爲Hash<Thing,String> UML類和輸出關係Hash<>然後映射V和K至實際參數ThingString
  • 然後在類想要使用它,定義一個屬性,例如things其類型爲Hash<Thing,String>類型。

MagicDraw例如支持此。

這樣做的缺點是,您將看不到客戶端類和值類型之間的關聯鏈接(在我的示例中爲Thing)。有利的一面是,如果你發佈你的模型作爲程序員的規範,這是我們做什麼,程序員看到在類表中正確的事,因爲你可以看到this example - translation_details attribute

在UML這樣做基本任務的困難是剛剛的許多問題與UML之一,爲什麼大多數開發商我今天見面不使用它除了對白板或文檔圖片。