Uml类图替代map属性

时间:2018-03-06 12:37:27

标签: uml class-diagram

通过搜索,我发现在UML中,聚合(假设它被正确使用)可用于表示类中的属性。

例如, enter image description here

(假设专栏可以独立)

然后,使用这样的例子,如果我想用map替换属性:Column []来表示列的名称,那么使用如下所示的关联类是否正确? (如果我不愿意将Column类中的列名作为属性)

enter image description here

3 个答案:

答案 0 :(得分:1)

关联类与简单关联一起使用。它们具有m-1-1-n多重性。共享聚合(如您所用)没有定义的语义(我建议不要使用它,除非您有特定于域的文档用途)。将预期的多重性放在关联的任何一侧更好。

关联类连接两个类,添加属性和/或操作。您的示例是“非常规的”,因为表/列具有简单的关系,不需要关联类。一个典型的例子是学生/讲座关系,您可以在其中放置一个关联课程来记录考试成绩,时间等。

答案 1 :(得分:0)

是的,我认为这是一种有效的建模方式,您可以使用某种关键字符串来识别此Table的{​​{1}}。

如果有许多可能的实现,使用Map就是一个,所以它不是真正的等于

使用关联类进行建模的优势在于您的模型保持在更抽象的功能级别,并省略了实现细节。

顺便说一句。对于TableColumn之间的关联,我会使用组合而不是聚合,因为存在明显强烈的所有权关系和生活 - 两者之间的循环依赖。

答案 2 :(得分:0)

如果您要用地图替换属性Column[]以表示列的名称,并且您不愿意将列名称放在Column类中作为属性,并且不愿意遵循UML specification正是这样,您将产生如下所示的模型: enter image description here

Map<Key, Value>通常被理解为一个关联的容器,其中包含具有唯一键的键值对Map.Entry<Key, Value>。容器是根据从Map<Key, Value>Map.Entry<Key, Value>的定向聚合来建模的。

Map<Key, Value>Map.Entry<Key, Value>模板。 UML规范的第7.3.3.1条规定:

不能以与相同类型的非模板元素相同的方式使用模板。模板元素只能用于生成 bound 元素,或作为其他模板规范的一部分。

根据第7.3.3.3节:

TemplateBinding是TemplateableElement与模板之间的关系,它指定 actual ParameterableElements替换模板的 formal TemplateParameters。

因此,我们有两个绑定元素,它们的模板具有TemplateBinding(用<>关键字标记)关系:

  • ColumnNames基本上是Map<String, Column>的名称
  • ColumnName基本上是Map.Entry<String, Column的名称

根据UML规范的第11.5.1条:

关联对代表表示类型的实例之间的链接的一组元组进行分类。 AssociationClass既是Association也是Class。

ColumnName是AssociationClass,表示StringColumn类的实例之间的链接。我们使用图11.35中的11.5.5节表示法。

最后,TableColumnNames类之间的方向组成关联告诉我们Table的每个实例都拥有ColumnNames的实例,即一组列名。 / p>

请注意,尽管ColumnNamesColumName类通常由实现对最终用户隐藏,但它们仍然存在。

我用BoUML绘制了图。