【问题标题】:how do I add a final variable to class diagram如何将最终变量添加到类图中
【发布时间】:2013-04-27 12:59:17
【问题描述】:

我正在为拼字游戏设计一个类图。在其中一个类中,我声明了最终变量。谁能告诉我,如何在 UML 类图中将变量指示为 final?

【问题讨论】:

    标签: class uml final class-diagram


    【解决方案1】:

    final 有不同的概念,它们都以不同的方式表示:

    • 最终定义,即它不能在子类中被覆盖 - 这对应于属性的 isLeaf 属性:

      isLeaf 属性,当一个特定的 RedefinableElement 为 true 时,指定它不应有重新定义。
      - UML 2.5 规范,第 99 页

      isLeaf=true 的属性不再有官方符号;添加{leaf} 是以前的官方表示法(UML 1.x),现在仍然很常见。

    • 最终值,即它的值不能改变 - 这对应于属性的 isReadOnly 属性:

      如果一个 StructuralFeature 被标记为 isReadOnly true,那么一旦它被分配了一个初始值,它就可能不会被更新。相反,当 isReadOnly 为 false(默认值)时,该值可能会被修改。
      - UML 2.5 规范,第 106 页

      只读属性的符号包括将{readOnly}附加到属性字符串。

    • constant 通常是指类本身的不可更改属性,而不是实例(static final 属性)。在 UML 中,它将具有上述两个属性并且另外是静态的,这对应于 isStatic 属性:

      isStatic 属性指定特征是与单独考虑的分类器实例相关(isStatic=false),还是与分类器本身相关(isStatic=真)。
      - UML 2.5 规范,第 105 页

      在属性定义下划线表示静态属性。正如已经提到的,常量通常是大写的,但这只是一个约定。

    因此,总而言之,类型为 String 且值为“x”的常量属性 FOO 看起来像这样,并且另外加上下划线(这不是此处支持):

    + FOO : String = "x" {readOnly,leaf}
    

    【讨论】:

    • 我参考当前的 UML 规范更新了这个出色而全面的答案。
    【解决方案2】:

    常量(即最终)字段通过命名约定表示: 常量应该是 ALL_CAPS

    Source

    【讨论】:

    • 虽然命名约定是表示常量的充分方式,但 OP 也有机会为常量属性添加自定义构造型,例如“常数”或“最终”。如果 OP 正在尝试对他的模型执行自动分析,这将特别有用,例如使用 OCL。
    • source 死:(
    • 源代码可以在wayback machine 上找到,其状态为 2016 年。但是,这不是一个有效的参考。 Carsten 引用 UML 规范的答案要准确得多。
    【解决方案3】:

    声明一个变量/属性 final 是实现细节。所以你不需要在你的类图中指定它,但你可以遵循eboix建议的约定。

    UML 规范没有具体说明它;所以你可以遵循在ALL CAPS中显示它的约定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-27
      • 2014-12-07
      • 1970-01-01
      • 2018-05-06
      • 2020-11-22
      • 2019-09-13
      相关资源
      最近更新 更多