问题描述
在下面的 UML 类图中,我想表明 Course.chapters
和 Chapter.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
,但我觉得这不是限定符的目的。
是否有正确的方法来准确说明如何实现组合?
解决方法
警告你的图中章节和部分在错误的一边,它们必须与多重性0..*
在同一边。
如果你不想显示像 ChapterList 和 SectionList 这样的命名绑定类:
您可以使用匿名绑定类(参见图 9.6 匿名绑定类 formal/2017-12-05 的第 106 页):
如果您甚至不想显示它们,您可以使用属性来显示属性:
无论如何,如果您想绘制作品,您可以执行以下操作:
这清楚地(即使不是正式的)表明如何记住章节/章节。当然,理论上你必须定义构造型 AugmentedList,扩展元类 Association 通常用于模型到代码的转换,这是扩展 UML 的原因之一(参见第 12.3.1.1 节) 定位配置文件与元模型、MOF 和 UMLformal/2017-12-05 的第 252 和 253 页)
在图表中,我使用了一些依赖项 <<use>>
来突出显示类之间的链接,它们不是强制性的,例如您可以在 Course 和 Chapter 之间直接使用它们em> 以及 Chapter 和 Section 之间(如果不是这样)。