在下面的UML類圖中,我想說明,Course.chapters
和Chapter.sections
成員分別由AugmentedList<Chapter>
和AugmentedList<Section>
實現(xiàn)。
我知道應該避免在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>
}
我知道將模板類綁定到non-templated類的方法是通過綁定,但是我希望避免在圖中添加“具體”接口,因為AugmentedList<Chapter>
和AugmentedList<Section>
接口不會在代碼中顯式實現(xiàn)。
也許有一個接口原型沒有實現(xiàn),只是在UML圖中使用?
我還研究了向Course
接口添加一個限定符chapters: AugmentedList<Chapter>
,但我覺得這不是限定符的目的。
有沒有一種正確的方法來精確地描述如何實現(xiàn)組合?
警告:圖表中的章節(jié)和部分位于錯誤的一側(cè),它們必須與多重數(shù)
0..*
位于同一側(cè)。如果您不想顯示命名綁定類,如ChapterList和SectionList,如:
您可以使用匿名綁定類(參見圖9.6匿名綁定類第106頁,共formal/2017-12-05頁):
如果您甚至不想顯示它們,可以使用屬性來顯示屬性:
不管怎樣,如果你想畫你的作品,你可以這樣做:
它清楚地(即使不是正式的)表明了章節(jié)是如何被記住的。當然,在理論上,您必須定義原型AugmentedList,擴展元類關聯(lián)通常用于模型到代碼的轉(zhuǎn)換,這是擴展UML的原因之一(參見§12.3.1.1定位概要文件與元模型,MOF和UML第252頁和第253頁,共formal/2017-12-05頁)
在這些圖中,我使用了一些依賴關系
<<use>>
來突出顯示類之間的鏈接,它們不是必需的,例如,您可以直接在課程和章節(jié)之間以及章節(jié)和小節(jié)之間使用它們(如果還不是這樣)。