java - 如何在 UML 中对枚举进行建模,以便它们表达键值关系?
问题描述
我想在 UML 枚举类型中表示一些键值对。例如,假设我们有一些元素及其符号:
ROAD => 'R'
CAR => 'C'
NOTHING => ' '
在 Java 中,它类似于以下内容:
public enum AsciiCodes {
ROAD ('R'),
CAR ('C'),
NOTHING (' ');
private final char code;
private AsciiCodes(char code) {
this.code = code;
}
}
我如何在 UML 中表示它?
到目前为止我所拥有的:
解决方案
在 UML ROAD 中,CAR和NOTHING是EnumerationLiteral,在类图中,它们显示在显示其名称的隔间文字中,仅此而已。
作为Datatype的枚举可能具有属性,但是您的 Java 中的属性代码不能像您那样被属性支持,因为它不涉及枚举,而是涉及EnumerationLiteral。
当然EnumerationLiteral不是枚举的属性,也不是枚举的实例,而是InstanceSpecification。
因此,在您通过构造型扩展枚举以将代码添加为StructuralFeature之前,没有任何标准允许为每个枚举文字建模代码及其值,在这种情况下,代码的值将通过Slot指定
在正式/2017-12-05看到:
- § 10.5.3 枚举第 175 页
- § 10.5.4 EnumerationLiteral 第 175 和 176 页
- § 9.9.9 实例规范第 140 页
[编辑]
UML 中的替代表示形式受到阅读Christophe答案的启发。
另一种方法是完全忘记 UML EnumerationLiteral,并通过一个专用实例本身对每个 Java 枚举文字进行建模,该实例本身可通过静态只读属性获得。
AsciiCodes仍然可以是 UML 枚举。
请注意,在您的 Java 定义及以上代码的值从外部不可用,然后最终无用,直到添加操作以按照Christophe的回答中建议的方式返回它。
顺便说一句,这就是我仍然使用Java 代码生成器专门管理的构造型 enum_pattern在Java的BoUML插件的 API 中实现枚举的方式。我在 2005 年开始分发 BoUML,当时 Java 中还没有枚举。
推荐阅读
- gitlab - 如何在 Bitnami Gitlab CE 上启用包注册表
- mysql - SQL将行作为列
- javascript - 如何按名称对数组进行排序?
- python - 将值移动到另一列的第一个值所在的行
- ios - 从 RxTableViewSectionedReloadDataSource 调用 self 不起作用
- c - 传递 (void*) 100 作为参数
- html - 如何使用html标签显示明文的html效果
- html - 整行的卡片/盒子尺寸相同,具体取决于最大的卡片
- php - OpenID Connect - 在没有呼叫身份提供者 (IdP) 的客户端上进行令牌验证
- javascript - 通过 JS 更新 php var