6
我知道在Java中有不同的關聯轉換方式,聚合和組合。但是當我們將它們轉換爲代碼(Java類)時,它們都以相同的方式表示。就像由老師教授的關聯的學生一樣,代表具有班主任實例變量的學生班。將關聯,聚合和組合轉換爲java中的代碼?
部門有聚合的教授也將用具有班級教授實例變量(數組)的部門類表示。
大學有組成部門也將以具有Class部門的實例變量(數組)的大學班級來表示。
所以所有的代碼都以相同的方式重新排列。那麼協會,聚合和組合爲開發者提供了什麼好處?
對不起,sfinnie我錯過了這兩點。 Point1: - 如果我們在原始文章中考慮組合示例,那麼您是否在說大學類應該具有Class部門的實例變量(數組)作爲final。如果不是我們將如何在代碼中表示它。 Point2: - 是的,我同意你的觀點,但是當我們將uml圖轉換爲編碼時並沒有什麼區別,因爲它仍然是一個簡單的實例變量。 –
點1:是的。第2點:這不僅僅是參考。 UML複合語義要求「如果刪除了一個組合,它的所有部分通常都會被刪除」(UML superstructure 2.3,page 40)。在像C++這樣的非GC語言中,這意味着析構函數代碼必須確保刪除父項之前刪除所有子項。對於GC環境而言,這一點不太明顯。然而,還有一些成語 - 例如由領域驅動設計推廣的「聚合根」方法,其中創建(或移除)兒童的唯一方法是通過父類本身的方法......(ctd)。 – sfinnie
...所以在原型Order/OrderLine場景中,從Order添加OrderLine的唯一方法是調用Order.AddOrderLine()(同樣用於刪除)。所以總結一下:代碼中沒有直接的聲明式模擬表示複合。相反,你必須在程序上建立行爲。因此,在代碼中識別複合材料需要大量的「模式識別」。如果引用是最終的,並且創建/刪除孩子的唯一方法是通過父級的接口,則該關係可能是Composite。心連心。 – sfinnie