【问题标题】:How to represent a Java-collection-valued attribute in UML?如何在 UML 中表示 Java 集合值属性?
【发布时间】:2020-03-01 03:44:37
【问题描述】:

您好,我是 UML 新手,所以我被卡住了。

代码如下:

private ArrayList<Blocks> blocks = new ArrayList<Blocks>();

所以我一直在寻找将代码正确放入 UML 的方法,但我无法理解。 所以这是我尝试过的一些事情,但我真的不知道是否正确

这里的图形替代品: image

那么哪个是正确的,有没有更好的方法呢?

【问题讨论】:

    标签: java uml class-diagram


    【解决方案1】:

    从某种意义上说,只要阅读图表的人(或工具)理解您的意思,UML 图表中的任何内容都是正确的。

    在另一种意义上,使用 UML 语法更传统/更合适。 UML 是设计语言而不是编程语言。如果您尝试在 UML 图中对类型、声明等使用编程语言(即 Java)语法,那么您(可能)错过了 UML 的要点。 (使用 Java 语法的 UML 工具可能会反对您,但这取决于它实现正式 UML 语法和元模型的紧密程度/深度。)

    在这种情况下,我认为最合适的写法是:

      - block : Block[]
    

      - block : Block[1..*]
    

    您想使用ArrayList&lt;Block&gt; 来实现多值这一事实是一个实现细节。它不属于 UML 图中。 (在我看来。)

    但有(可能的)第三种选择。将Block 作为一个类添加到您的UML 图中,并使用关联对关系建模。

    【讨论】:

    • 那么在不遵循第三个选项的情况下,Java 中使用 new 的声明并没有真正包含在 UML 中?
    • 按照惯例,您不会在 UML 中包含特定于编程语言的语法。也不是第三种选择!但是,除非您打算使用此 UML 生成代码,否则您可能会忽略该约定。 (如果您使用工具,则需要根据工具的要求编写您的UML模型......)
    • @Sapphirex 使用具有适当多重性的关联(第三种选择),然后您可以使用 > 如果您认为最好指示如何支持该关系:实现
    • 当属性类型是 UML 类时,将 UML 属性绑定到 UML 关联通常是一种更好的建模方式。原因是人类可以立即吸收实例之间可能的关系,而无需解码任何文本。这样的模型更容易审查和验证,这也是 UML 有用的部分原因。
    【解决方案2】:

    UML类图既可以用来制作

    1. 与编程语言无关的设计模型
    2. 特定于编程语言的实现模型

    设计模型中,您可以将blocks 定义为引用Block 类实例的集合/列表的多值引用属性(即即,Block 将是属性 blocks) 的范围,或者等效地,作为 ClassBlock 之间关联的非功能关联端的名称,如

    blocks: Block[0..*] 
    

    这样的引用属性可以根据可用的习语在任何 OOP 语言中实现。例如,在 Java 中,它可以实现为 Set- 或 List-valued 属性。

    在 OO 实现模型中,如 Java 实体类模型C# 类模型,您可以使用任何合适的内置模板集合类,例如Set&lt;Block&gt;List&lt;Block&gt;,作为属性blocks的范围:

    blocks: Set<Block>
    

    请注意,通常在 Java 类模型中,您不会使用 ArrayList&lt;Block&gt; 作为属性 blocks 的范围,而是使用 List&lt;Block&gt;,以免过早地排除使用LinkedList&lt;Block&gt;.

    【讨论】:

    • 你不知道OP使用ArrayList的原因,你凭什么说你不会使用ArrayListArrayList 是一个内置模板集合类 : (docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html]. 我很接近 DV 你的答案(但我没有)
    • +1 用于突出差异:设计与实现。也许值得一提的是,除非您使用适当的配置文件,否则 ArrayList 和任何其他特定于语言的容器都不属于 UML ;-)
    猜你喜欢
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多