具有属性的UML建模枚举

时间:2016-05-11 09:57:43

标签: java enums uml class-diagram

我想创建一个带有Java枚举(枚举)的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 |
+-----------------------------------------+

非常感谢您的回答。

2 个答案:

答案 0 :(得分:4)

我不认为您可以为UML中的每个枚举文字建模属性值。
EA对具有以下属性的枚举使用以下表示法:

enter image description here

您可以在每个文字的注释中的某处记录属性值,也可以使用excel文件或类似的东西来管理该数据。
通常,您只需要在设计时提供初始值,因为它们可能在运行时更改。因此,如果您不相信它们是正确的,那么在模型中保留这些值并没有多大用处。

答案 1 :(得分:-1)

您可以使用官方文档http://www.omg.org/spec/UML/2.5以正式方式描述您的课程。在11.4.4部分,你会发现一些这样的例子:

Example 1