从UML图创建Java类

4
我需要基于这个 UML 图创建 Java 类。问题是我不知道红色形状内部的关系。我已经对 A、B、C、D 类之间的其他关系进行了处理,但我无法理解这个关系。
有人能给我一点提示吗?
到目前为止,我已经完成了以下部分:
class A extends B

class D extends C

class C 
List<B> bElement;

class D 
List<A> aElement;

感谢您的咨询。

输入图像描述


这是一张图片,暂无具体的技术相关内容需要翻译。

你确定这是有效的UML吗? - Vanguard
它看起来是用UML工具创建的。这里附加的图像略有修改,因此我猜想它是有效的。 - CC.
2个回答

4
这意味着下层关联继承自上层关联,就像下层类继承自上层类一样。
连接器继承的概念是在最近的UML版本中引入的(根据@Henriette在2.0上的回答)。总之,既然两种泛化都继承了下层关联,那么下层关联和它们的泛化实际上都不需要。
个人而言,我没有找到这个概念的实际用途,但我认识的人会使用它(他们在本体论的非常高的抽象层级上工作)。
P.S. 规范中对这个概念没有太多内容可读,除了第692页的内容:
“关联线之间的泛化箭头被交换为UMLEdge和泛化作为modelElements,并且作为modelElements的UMLEdge具有关联(包括显示为线条的AssociationClasses)作为来源和目标。”

那么,这意味着它只用于“图表美观”吗?没有其他需要添加到Java类中以翻译此关系的内容吗? - CC.
在这种情况下,这可能只是“课程的一部分”,您可以忽略它以进行实现。正如所说,我仍在寻找这个概念的有意义的应用。 - qwerty_so
非常感谢您的解释。 - CC.

3
在2005年的UML 2.0中引入了关联继承。尽管UML可能最常用于面向对象的分析和设计,但它旨在成为一种通用的建模语言。因此,它包括多重继承、属性特化/细化和关联继承等功能,这些功能在编程语言中不一定得到支持。然而,在本体语言(如OWL 2)中,这些概念是自然表达的。
对于其他一些目的,我已经撰写了关于关联继承和等效UML表示的文稿,在此提供给其他人以备有用之需。

Association inheritance equivalent representations

关于关联和属性,UML规范定义了三个紧密相关的概念,即“关联专业化”、“子集”和“重新定义”。关联专业化应用于完整关联的级别,而子集和重新定义应用于关联端点和属性的级别。
关联专业化的含义类似于类。也就是说,在图(a)中,关联A2是关联A1的专业化。因此,类C3和C4的实例之间的每个链接必然是类C1和C2的实例之间的链接。然而,类C1和C2的实例之间的每个链接不一定是类C3和C4的实例之间的链接。
由于在图(a)中,C3/C4专门化了C1/C2,因此可以得出结论,所有C1C2之间的关联都将被C3C4继承。此外,C3C4之间的所有继承关联必然是C1C2之间关联的子集。然而,图(a)的含义不仅如此:不仅关联A1C3C4继承,它还引入了一个新的关联A2。由于A2是一个新的关联,没有关联专门化,人们将无法推断出A1A2之间的关系。因此,在图(a)中,关联继承的目的是引入一个新的关联A2并说明它如何与现有的关联A1相关。
在图(b)中,它声明 c4 {subsets c2}。这意味着由关联端 c4 所表示的实例集是由关联端 c2 所表示的实例集的子集。关联端 c3c1 也是如此。子集与关联特化有所不同,因为子集仅考虑集合成员身份,而关联特化则专门针对确定链接成员身份的特征。
重新定义用于更改功能的定义。例如,在图(c)中,关联端 c4 重新定义了 c2。重新定义与关联特化有所不同,因为重新定义是针对关联端而不是完整关联定义的。
尽管最初的问题涉及继承层次结构中使用的关联继承,但值得注意的是,在不存在继承层次结构的情况下,也可以使用关联继承。在图(d)中,男人离婚的所有女人都是他结婚的女人的子集。

enter image description here

在图(a)和(d)中,关联是模型的一等公民。因此,它们可以由关联类(A1/A2MarriedTo/DivorceFrom)表示,并且在相应的关联类之间存在继承关系,尽管使用关联特化可能更简洁地表明您专门化关联的意图而不是关联类之间的特化。
总之:关联的特化等同于对其端点进行子集化,重定义可以视为子集化的子概念。

虽然我大致知道 subset/redef 可以用在哪里,但我仍然不明白为什么需要 (a)。当你这样概括时,C3/4 不是继承了 C1/2 的关联吗?还是说我对连接器的重要性有所不同,把它们看作二等公民? - qwerty_so
感谢你的评论,@ThomasKilian。你提到连接器作为一等公民和二等公民的观点很有道理。我已经更新了我的答案,考虑到了你的意见。 - Henriette Harmse
非常感谢您提供的详细解释。现在我能够看得更清楚了。还有更多问题,但是这些问题会让评论区爆炸,所以我最终会将它们作为新问题提出。如果可能的话,我会给您的答案点赞不止一次 :-) - qwerty_so

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接