【问题标题】:HashMap in class diagram (UML)类图中的 HashMap (UML)
【发布时间】:2023-04-10 10:02:02
【问题描述】:

我为我的 Java 应用程序构建 UML 2.0 类图。在我的代码中,我有 HashMap 数据类型的属性。但是,据我所知,UML 标准中没有 HashMap 数据类型。问题是 - 我可以使用 HashMap 作为类属性的数据类型吗?

更新

也许在图中我应该指向 java.util 包?并且也许将 Map 类放在图表上的这个包中?

【问题讨论】:

  • 属性通常不应具有HashMap 数据类型。它应该具有 Map<Foo, Bar> 数据类型。

标签: java hash hashmap uml


【解决方案1】:

HashMap 可能是这个概念的 Java 名称,但每种编程语言都有某种 Hash<>Map<> 类,并且在 UML 中应该包含等价的东西,因为许多模型都包含 Hash 或 Map 容器属性。

一些工具支持<<map>> 构造型;如果你有它,如果你主要关心视觉直观性,我会使用它 - 但不可能说隐含什么样的键。

合格的关联图形 UML 设备不直观,我怀疑工具很难在前向代码生成中转换为任何合理的东西。我会避免它。

另一种方法(这是我通常的做法)如下:

  • 创建一个以 V 和 K 作为通用参数的 Hash 类。为了正确地做到这一点,K 应该受到 UML 中也缺少的诸如“Ordered”之类的类的约束(我们总是添加这个)
  • 对于哈希的每次使用,例如Hash<Thing, String>(注意顺序 - 我首先使用值,然后使用键),创建一个名为 Hash<Thing,String> 的 UML 类和与 Hash<> 的传出关系,然后将 V 和 K 映射到实际参数 Thing 和 @ 987654329@
  • 然后在要使用它的类中,定义一个属性,例如things,其类型为 Hash<Thing,String> 类型。

例如,MagicDraw 支持这一点。

这样做的缺点是您不会看到客户端类和值类型之间的关联链接(在我的示例中为Thing)。好处是,如果您将模型发布为程序员规范,这就是我们所做的,程序员会在类表中看到正确的内容,正如您在 this example - translation_details attribute 中看到的那样。

在 UML 中完成这项基本任务的困难只是 UML 的众多问题之一,以及为什么我今天遇到的大多数开发人员除了在白板或文档上的图片之外不使用它。

【讨论】:

    【解决方案2】:

    HashMap 无论如何都不应该出现在您的 UML 模型中。 HashMap 只是一个合格关联的实现。可能它甚至只是一个速度提高的不合格协会。因此,如果您有一个带有 HashMap 的 A 类,您将建模一个 UML 类 A、一个 UML 类 B 和一个从 A 到 B 的 UML 关联。如果它由不是属性的键限定,则可以向关联添加限定符B 的。如果您的 HashMap 键是 B 的名称(并且 B 将该名称作为属性),您只需省略限定符。

    要表示您的 Association 的实现(您想使用 HashSet 来实现它),您可以将其添加为关键字或为其创建 Stereotype(更复杂)。

    【讨论】:

    • HashMap 是类,UML 模型中当然应该存在。然而,并不是每个类都需要作为一个类出现在图表上。
    【解决方案3】:

    HashMap 只是众多 java 类中的一种。
    您可以在 UML 2.0 类图中使用任何 java 类、接口或原始类型。
    UML 2.0 java 类图中的任何数据类型都对应于一些 java 类、接口或原语。

    您正在使用 UML 图来开发您自己的应用程序。因此,为了您的方便,请随意扩展 UML 2.0 标准。没有人可以为此责怪你。

    【讨论】:

    • 如果你真的必须在你的 UML 模型中使用 Java 类(我不会推荐它),这只是扩展你的模型(或库模型)。扩展 UML 是通过配置文件完成的 - 在这种情况下不需要。
    【解决方案4】:

    只需在 UML 中使用一个普通类并将其命名为HashMap。 UML 与语言无关,并且不了解 Java 的预定义类。还是我误解了你的问题?

    【讨论】:

    • HashMaps 不属于 UML 模型。尤其不是一流的分类器。
    • @Christian:你说的话毫无意义。我可以在 UML 中创建任何数据类型。如果我愿意,是什么阻止我调用一个类 HashMap 并设置与另一个类的组合关系?
    • 当然,您/可以/ 将其放入 UML 模型中。没有什么能阻止你这样做。将实现细节放入不需要这样做的概念模型中只是一种不好的风格。请参阅我的答案以了解另一种方法。
    • 顺便说一句。大多数 UML 工具都为 Java 提供了特殊的配置文件,因此与 UML 不同,您的模型不一定与语言无关
    猜你喜欢
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多