如何在UML类图中描述包含的地图?

时间:2009-07-28 08:15:14

标签: uml class-diagram

我有一个MyServer类,其中包含一个Map,其键是MyClientType对象,其值是MyClient对象。我想在类图中描绘这种关系,但我无法找到一种干净的方法来做到这一点。

6 个答案:

答案 0 :(得分:27)

您可以使用合格的关联:

┌──────────┐             1 ┌───────┐
│ MyServer │Key│───────────│ Value │
└──────────┘               └───────┘

请参阅:http://etutorials.org/Programming/UML/Chapter+6.+Class+Diagrams+Advanced+Concepts/Qualified+Associations/ (因为很难使用ASCII绘制)

另请注意,限定关联会更改多重性:

┌──────────┐          0..* ┌───────┐
│ MyServer │───────────────│ Value │
└──────────┘               └───────┘

┌──────────┐             1 ┌───────┐
│ MyServer │Key│───────────│ Value │
└──────────┘               └───────┘

顶部说明了从服务器到0-n值的关联。相反,合格的关联表示任何给定的密钥只与一个值相关联,并且您不能使密钥缺少值。

答案 1 :(得分:11)

我只是在MyClient端显示MyServer与MyClient之间的关联,其多重性为0 .. *。其他所有内容都是实现细节,可以留给程序员。

答案 2 :(得分:3)

           MyServer
               |
               |*
            T1toT2
            /    \
          1/      \1
         Key     Value

Mark的解决方案的不同之处在于服务器与容器有很多关系。这也是Eclipse Modeling Framework (EMF) proposes to implement maps

的方式

您可能还会引入更多特定于UML的内容,例如指定键必须是唯一的(通过构造型)。

答案 3 :(得分:2)

首先,我和其他一些人认为,UML应该包含一些基本的集合类型,就像在早期版本中那样。例如,它们可以从OCL中获取......

“EMF方式”似乎是正确的,但它给了imho过于重要的类型,这真的是不重要的imho,所以我只是作为一个关联类来模拟它。这将使您能够捕获所有可以使用常规类捕获的地图特定约束(例如,多重性),但不会使该类与其他类一样重要。

答案 4 :(得分:1)

             MyServer
                 |
                 |
                 |
                Map
                 |
                | |
               |   |
  MyClientTypeKey   MyClientType

它不应该像上面那么简单吗?

  • MyServer与地图
  • 有一对一的联系
  • 地图与键和值有1对多的关联。

答案 5 :(得分:1)

Kru的答案是最好的,但它仍然只是暗示地图。

我认为这取决于图表所处的抽象级别。如果它相对较高,我会选择黑猩猩的回应。如果它相对较低并且您确实需要显示地图,故意显示与实现相关的细节,我将使用以下内容:

           MyServer
               |
               |
              Map                
               |
               |*
            T1toT2
            /    \
          1/      \1
         Key     Value

然后如何在代码中实现映射完全无关紧要(T1toT2运行时对象实际上可能不会实现。

如Gabreil所述,这也可以使用关联类

建模
           MyServer
               |
               |
              Map                
               |
               |*
            T1toT2
               |
               |
          1--------1
         Key     Value

当然,只有当你真的 需要展示或指定地图时才有意义。