Inheritance 子类由其超类的各种元素组成

Inheritance 子类由其超类的各种元素组成,inheritance,uml,Inheritance,Uml,我目前正试图为我正在开发的一个简单应用程序设计一个uml类图。 问题是:我有一个类,它是同一个超类的一个子类和另一个子类。第一个,让我们称之为子类1由超类的各种元素组成,即它本身和另一个子类2 现在我不确定如何在UML中正确地建模。下面两张图片展示了我想到的两种可能性。两者似乎都不正确 选项1:子类1是其超类的聚合 选项2:子类2包含超类元素列表 我的问题是:其中一个图是否正确?如果不正确,我将如何正确建模?基本上两个图是相同的。在第一个示例中,您使用的是一个共享聚合,用于表示多重性。这是不

我目前正试图为我正在开发的一个简单应用程序设计一个uml类图。 问题是:我有一个类,它是同一个超类的一个子类和另一个子类。第一个,让我们称之为
子类1
由超类的各种元素组成,即它本身和另一个
子类2

现在我不确定如何在UML中正确地建模。下面两张图片展示了我想到的两种可能性。两者似乎都不正确

选项1:
子类1
是其超类的聚合

选项2:
子类2
包含超类元素列表


我的问题是:其中一个图是否正确?如果不正确,我将如何正确建模?

基本上两个图是相同的。在第一个示例中,您使用的是一个共享聚合,用于表示多重性。这是不对的。共享聚合具有在域上下文中定义的开放语义

上面的图片将是首选的方式。它使用具有多重性的关联和角色名称。这在语义上与第二张图片相同


注意:我使用大写作为类名,因为这是一种常见的约定。

在选项1图表上,您的聚合菱形位于错误的一侧。现在,这表明
超类1
与一组
子类1
有关系。这显然是错误的,因为超类永远不应该知道它的子类。如果是内联编写的(选项2),属性也应该使用正确的UML表示法,因此它应该是
+list:list
,而不是
+list:Superclass1[*]
。我没有提供答案,因为Thomas Killian已经提供了正确的答案,只是他的答案中缺少了这一条信息。@SgtDroelf你想使用复合模式吗@格拉尼尔·阿尔格。那些维基百科的人用的是共享作文。是的,我明白了,但维基百科只是一个简单的参考。。。今晚我会在家里检查一下,但我很确定Gamma的书中使用了一个共享组合…@granier,这本书是2005年出版的,共享组合只在新的UML版本中被指定为领域特定的。是的,的确如此;)这就是为什么维基百科页面可以被接受。。。正如你在上一篇文章中所说:大多数人并不掌握共享构图和共享构图之间的区别。