UML 中的类型聚合

问题描述

在下面的 UML 类图中,我想表明 Course.chaptersChapter.sections 成员分别由 AugmentedList<Chapter>AugmentedList<Section> 实现。

enter image description here

我知道在 SO 上应该避免使用图像,所以这是与此图对应的 Kotlin 代码

interface AugmentedList<E>: List<E> {
  val introduction: String
  val conclusion: String
}

interface Section

interface Chapter {
  val sections: AugmentedList<Section>
}

interface Course {
  val chapters: AugmentedList<Chapter>
}

我知道将模板类绑定到非模板类的方法是通过 binding,但是我想避免向图中添加“具体”接口,因为接口 AugmentedList<Chapter>AugmentedList<Section> 不会在代码中明确实现。

也许对于没有实现但只是在 UML 图中使用的接口有一个构造型?

我还考虑向 chapters: AugmentedList<Chapter> 界面添加限定符 Course,但我觉得这不是限定符的目的。

是否有正确的方法来准确说明如何实现组合?

解决方法

警告你的图中章节部分在错误的一边,它们必须与多重性0..*在同一边。


如果你不想显示像 ChapterListSectionList 这样的命名绑定类:

enter image description here

您可以使用匿名绑定类(参见图 9.6 匿名绑定类 formal/2017-12-05 的第 106 页):

enter image description here

如果您甚至不想显示它们,您可以使用属性来显示属性:

enter image description here

无论如何,如果您想绘制作品,您可以执行以下操作:

enter image description here

这清楚地(即使不是正式的)表明如何记住章节/章节。当然,理论上你必须定义构造型 AugmentedList,扩展元类 Association 通常用于模型到代码的转换,这是扩展 UML 的原因之一(参见第 12.3.1.1 节) 定位配置文件与元模型、MOF 和 UMLformal/2017-12-05 的第 252 和 253 页)

在图表中,我使用了一些依赖项 <<use>> 来突出显示类之间的链接,它们不是强制性的,例如您可以在 CourseChapter 之间直接使用它们em> 以及 ChapterSection 之间(如果不是这样)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...