我有一个MyServer类,其中包含一个Map,其键是MyClientType对象,值为MyClient对象。 我想在类图中描述这种关系,但我找不到一种清晰的方法来实现。
我有一个MyServer类,其中包含一个Map,其键是MyClientType对象,值为MyClient对象。 我想在类图中描述这种关系,但我找不到一种清晰的方法来实现。
您可以使用限定关联:
┌──────────┐ 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个值的关联。相比之下,限定关联表示任何给定的键只会与一个值相关联,而且你不能有一个键缺少值。
MyServer
|
|*
T1toT2
/ \
1/ \1
Key Value
首先,我和其他一些人认为,UML应该像早期版本一样包含一些基本的集合类型。例如,它们可以从OCL中获取...
"EMF方式"似乎是正确的,但是我认为它过于强调了to类型,这个类型实际上并不重要,所以我会将其建模为关联类。这将使您能够捕获所有特定于映射的约束(例如多重性),可以使用常规类来捕获这些约束,但不会使该类与其他类一样重要。
MyServer
|
|
|
Map
|
| |
| |
MyClientTypeKey MyClientType
难道不应该像上面那样很简单吗?
MyServer
|
|
Map
|
|*
T1toT2
/ \
1/ \1
Key Value
地图在代码中的实现方式完全无关紧要(T1toT2
运行时对象可能实际上并不存在)。
正如Gabreil所提到的,这也可以使用关联类进行建模。
MyServer
|
|
Map
|
|*
T1toT2
|
|
1--------1
Key Value
当然,这只有在你真正需要展示或指定地图时才重要。