kotlin - UML 中的类型化聚合
问题描述
在下面的 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
但我觉得这不是限定符的目的。
是否有正确的方法来准确说明如何实施组合?
解决方案
图表章节和部分中的警告位于错误的一侧,它们必须与 multiplicity 位于同一侧0..*
。
如果您不想显示命名的绑定类,例如ChapterList和SectionList,例如:
您可以使用匿名绑定类(参见正式/2017-12-05的图 9.6匿名绑定类第 106 页):
如果您甚至不想显示它们,您可以使用属性来显示属性:
无论如何,如果您想绘制您的作品,您可以执行以下操作:
这清楚地(即使不是正式的)表明章节/章节是如何记忆的。当然,理论上你必须定义原型AugmentedList,扩展元类关联通常用于模型到代码的转换,这是扩展 UML 的原因之一(参见第 12.3.1.1 节定位配置文件与元模型,MOF 和 UML第 252 和 253 页正式/2017-12-05 )
在图中,我使用了一些依赖关系<<use>>
来突出类之间的链接,它们不是强制性的,例如,您可以在课程和章节之间以及章节和章节之间直接使用它们,如果不是这样的话。
推荐阅读
- php - 如何根据特定条件计算总和
- android - Firebase 注册问题
- angular - Angular Route ExtraOptions 对象
- xamarin - 无法制作存档 ios 应用程序以进行发布
- python - 如何转置 Pandas.Groupby 的结果
- c# - UWP MasterDetailsView DetailsView 返回 MasterView
- python - 如何从无限循环返回数据而不在python中破坏它?
- sql - 如果存在具有不同值的列,SQL Server 如何使用组?
- batch-file - 从文件中提取文本的批处理文件
- elasticsearch - 在 Query 参数中传递 _type 与在弹性搜索中的 URL 中传递