UML建模枚举类型及其属性

11

我想使用Java枚举(enum)来创建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) |
+-----------------------------------------------------+

我只找到了这个例子这里,但是它使用String类属性作为枚举名。我认为这应该与使用public enum而不指定枚举名称数据类型有所不同。

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

6
我认为在UML中不能为每个枚举字面量建模属性值。
EA在具有属性的枚举中使用以下符号:enter image description here
您可以在每个文字的注释中记录属性值,或者使用类似Excel文件的工具来管理这些数据。由于它们可能会在运行时改变,因此通常只需要在设计时提供初始值。所以如果您不能信任这些值是正确的,那么将它们保留在模型中也没有什么用处。

我认为,如果最终值(常量)需要用于构建根据定义为常量的枚举,则它们应该以某种方式显示在类图中。但是我相信您的判断。谢谢。 - Kit Ostrihon

-2

您可以使用官方文档http://www.omg.org/spec/UML/2.5以正式的方式描述您的类。在11.4.4节中,您将找到一些类似于以下示例的内容:

Example 1


1
我认为这不是一个枚举类型,因为它包含了final属性,在枚举构造函数中自动使用来创建常量。我的问题非常具体。 - Kit Ostrihon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接