【问题标题】:Typed aggregation in UMLUML 中的类型化聚合
【发布时间】:2021-01-28 08:24:21
【问题描述】:

在下面的 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&lt;Chapter&gt;AugmentedList&lt;Section&gt;不会在代码中显式实现。

也许存在未实现但仅在 UML 图中使用的接口的构造型?

我还考虑将限定符 chapters: AugmentedList&lt;Chapter&gt; 添加到 Course 接口,但我觉得这不是限定符的目的。

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

【问题讨论】:

    标签: kotlin templates types uml class-diagram


    【解决方案1】:

    您的图表中的警告 chapterssections 位于错误的一侧,它们必须与多重性 0..* 位于同一侧。


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

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

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

    无论如何,如果你想绘制你的作品,你可以这样做:

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

    在图表中,我使用了一些依赖项&lt;&lt;use&gt;&gt; 来突出显示类之间的链接,它们不是强制性的,例如,您可以直接在 CourseChapter 之间使用它们以及 ChapterSection 之间的情况。

    【讨论】:

    • 我喜欢你的回答,除了最后一个建议是使用刻板印象来指示对关系使用特定接口。刻板印象属于元模型,应该在用于特定模型的配置文件中定义。关系使用特定接口来实现这一事实是对模型级别的依赖,而不是元模型属性。
    • 感谢您的全面回答!我还没有决定我将使用哪种格式,也谢谢你的指点!
    猜你喜欢
    • 2013-06-22
    • 2015-02-23
    • 2011-07-14
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 2018-09-09
    • 2021-12-16
    相关资源
    最近更新 更多