2016-05-11 131 views
9

我想用Java枚舉(枚舉)創建具有一個或多個屬性的UML圖,但我對如何執行該操作感到困惑。具有屬性的UML建模枚舉

例如枚舉可以聲明如下:

public enum Enumeration_type { 

    LITERAL_A("attr1_value", attr2_value, attr3_value), 
    LITERAL_B("attr1_value", attr2_value, attr3_value); 

    final String attr1; 
    final type_1 attr2 = initial_value_1; 
    final type_2 attr3; 

    Enumeration_type(String attr1, type_1 attr2, type_2 attr3) { 
     this.attr1_value = attr1; 
     this.attr2_value = attr2; 
     this.attr3_value = attr3; 
    } 
} 

沒有屬性,很容易:

+--------------------+ 
| <<enumeration> | 
| Enumeration_type | 
+--------------------+ 
| LITERAL_A   | 
| LITERAL_B   | 
+--------------------+ 

但你如何與它優雅的屬性模型?它應該是這樣嗎?

+-----------------------------------------------------+ 
| <<enumeration>>         | 
| Enumeration_type         | 
+-----------------------------------------------------+ 
| attr1: String          | 
| attr2: type_1 = initial_value_1     | 
| attr2: type_2          | 
+-----------------------------------------------------+ 
| LITERAL_A("attr1_value", attr2_value, attr3_value) | 
| LITERAL_B("attr1_value", attr2_value, attr3_value) | 
+-----------------------------------------------------+ 

我發現只有這個例子here,但使用String類的枚舉名稱屬性。我認爲,這應該不同於使用public enum而不指定枚舉名稱數據類型。

+-----------------------------------------+ 
| <<enumeration>>      | 
|  CarType       | 
+-----------------------------------------+ 
| +sedan : String = SEDAN    | 
| +liftback : String = LIFTBACK   | 
| +stationWagon : String = STATION_WAGON | 
+-----------------------------------------+ 

非常感謝您的回答。

回答

4

我不認爲你可以建模UML中的每個枚舉文字的屬性值。
EA使用如下標記爲具有屬性的枚舉:

enter image description here

您可以文件某處在每個音符的屬性值的文字,或者你可以使用Excel文件或類似的東西來管理該數據。
通常,您只需要在設計時提供初始值,因爲它們在運行時可能會發生變化。因此,如果您不能相信這些值是正確的,那麼將這些值保留在您的模型中並沒有多大用處。

+0

我會想,如果有需要的建設的最終值(常量) - 由定義常量 - 枚舉,他們會已經在類圖中以某種方式顯示出來了。但我相信你對此的判斷。謝謝。 – BBerry

-1

您可以使用官方文檔http://www.omg.org/spec/UML/2.5以正式方式描述您的課程。在11.4.4節中,你會發現這樣一些例子:

Example 1

+0

我沒有看到這是一個具有最終屬性的枚舉,它在enum的構造函數中自動使用來創建常量。我的問題很具體。 – BBerry