从 UML 图创建 java 类

Create java classes from UML diagram

我必须根据这个 UML diagram 创建 java 类。 问题是我不知道红色形状里面是什么关系。 我做了 A, B, C, D 类 之间的所有其他关系,但是这个我无法理解。

谁能给我提示?

到目前为止我有:

class A extends B

class D extends C

class C 
List<B> bElement;

class D 
List<A> aElement;

谢谢。

这意味着下层关联继承自上层关联。就像下层的类继承了上层的一样。

连接器继承的概念仅在最近的 UML 版本中引入(根据 @Henriette 从 2.0 开始的回答)。无论如何,实际上不需要较低的关联及其泛化,因为它无论如何都与两个泛化一起继承。

就我个人而言,我还没有找到这个概念的好用处,但知道有人在使用它(他们在 ontology 中工作在非常高的抽象级别)。

P.S。除了 p 之外,关于规范中的概念没有太多可读的。 692:

Generalization arrows between association lines are interchanged as UMLEdges with Generalizations as modelElements, and sources and targets that are UMLEdges with Associations (including AssociationClasses shown as lines) as modelElements.

关联继承于 2005 年在 UML 2.0 中引入。尽管 UML 可能最常用于面向对象的分析和设计,但它的目标是成为一种通用的 建模语言 .因此,它包括编程语言不一定支持的多重继承、属性 specialization/refinement 和关联继承等功能。然而,在像 OWL 2 这样的 ontology 语言中,这些概念很自然地表达出来。

出于其他一些目的,我写了一篇文章 w.r.t。关联继承和等效的 UML 表示,我在这里提供它们以防对其他人有帮助。

关于关联和属性,UML 规范定义了三个密切相关的概念,即 association specializationsubsettingredefinition。在子集和重新定义时,在完整关联级别应用关联专业化 应用于关联端和属性级别。

关联特化的含义与classes类似。即关联A2是图(a)中关联A1的特化。因此 classes C3C4 实例之间的每个 link 必然是 classes C1C1 实例之间的 link C2。但是,classes C1C2 实例之间的每个 link 不一定是 classes C3 实例之间的 link ] 和 C4

由于图(a)中C3/C4特化C1/C2,因此C1C2之间的所有关联都将被C3继承和 C4。此外,C3C4 之间的所有继承关联必然是 C1C2 之间关联的子集。然而, 图(a)更进一步:不仅关联A1C3C4继承,还引入了新的关联A2。由于 A2 是一个新的关联,如果没有关联专业化,将无法推断出任何关于 A1A2 的关系。因此,在图 (a) 中,关联继承的目的是引入一个新的关联 A2 并说明它与现有关联的关系 A1

在图(b)中表示c4 {subsets c2}。这意味着关联端c4表示的实例集合是关联端c2表示的实例集合的子集。这同样适用于关联端 c3c1。子集化 与关联专业化的区别在于,子集化仅考虑集合成员资格,而关联专业化专门化确定 link 成员资格的特征。

重定义用于改变特征的定义。例如,关联结束 c4 重新定义了图 (c) 中的 c2。重定义与关联特化的区别在于,重定义是为一个关联端定义的,而不是为整个关联定义的。

虽然最初的问题与继承层次结构中使用的关联继承有关,但注意到关联继承也可以在没有继承层次结构的情况下使用可能会很有启发。在图(d)中,一个男人离婚的所有女人都是他结婚的女人的一个子集。

在图 (a) 和 (d) 中,协会首先是模型的 class 公民。因此,它们可以由关联 classes(A1/A2MarriedTo/DivorceFrom)表示,在各自的关联 classes 之间具有继承关系,尽管使用关联专业化可能更有效简洁地表明您打算专门化协会而不是协会之间的专门化 classes.

综上所述:关联的特化等价于其端点(之一)的子集化,重定义可以看作是子集化的子概念。