首页 > 解决方案 > UML 中的类型化聚合

问题描述

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

在此处输入图像描述

我知道在 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但我觉得这不是限定符的目的。

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

标签: kotlintemplatestypesumlclass-diagram

解决方案


图表章节部分中的警告位于错误的一侧,它们必须与 multiplicity 位于同一侧0..*


如果您不想显示命名的绑定类,例如ChapterListSectionList,例如:

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在图中,我使用了一些依赖关系<<use>>来突出类之间的链接,它们不是强制性的,例如,您可以在课程章节之间以及章节章节之间直接使用它们,如果不是这样的话。


推荐阅读