Java設計模式及實踐》—1.6 總結">《Java設計模式及實踐》—1.6 總結
830
2025-03-31
1.4 統一建模語言簡介
統一建模語言(Unified Modeling Language,UML)可以幫助我們表示軟件的結構:不同的模塊、類和對象如何相互交互,以及它們之間的關系是什么。
UML經常與面向對象的設計結合使用,但它具有更廣泛的適用范圍。然而這超出了本書的范圍,因此,下面我們將重點介紹與本書相關的UML功能。
在UML中,我們可以定義系統的結構和行為,并且可以通過圖表可視化全部或者部分模型。有兩種類型的圖表:
結構圖用于表示系統的結構。有許多類型的結構圖,但我們只討論類圖。對象圖、包圖和組件圖均類似于類圖。
行為圖用于描述系統的行為。交互圖是行為圖的子集,用于描述系統的不同組件之間的控制流和數據流。在行為圖中,順序圖廣泛用于面向對象的設計中。
類圖是面向對象設計和開發階段中使用最多的圖類型。類圖是一種結構圖,用于說明類的結構及類之間的關系。如圖1-1所示。
類圖對于描述類在應用程序中的結構非常有用。大多數時候,僅僅查看結構就足以了解類如何交互,但有時這還不夠。對于這些情況,我們可以使用行為圖和交互圖,其中順序圖用于描述類和對象的交互。讓我們使用順序圖來顯示Car對象和Vehicle對象如何在繼承和多態示例中進行交互,如圖1-2所示。
類之間的關系
在面向對象編程中,除了代表基本概念的繼承關系之外,還有一些其他類關系可以幫助我們建模和開發復雜的軟件系統:
泛化和實現
依賴
關聯、聚合和組合
圖 1-2
1.泛化
繼承也被稱為Is-A關系,因為從另一個類繼承而來的類能夠被當成父類來使用。
當一個類表示多個類的共享特征時,這稱為泛化,例如,Vehicle是Bike、Car和Truck的泛化。類似地,當一個類表示一般類的特殊實例時,這稱為特化,因此Car是Vehicle的特化,如圖1-3所示。
在UML術語中,描述繼承的關系稱為泛化。
2.實現
如果說泛化是面向對象中繼承概念對應的UML中的術語,則UML中的實現表示面向對象編程中類的接口實現。
我們假設創建了一個名為Lockable的接口,該接口僅由可以鎖定的Vehicle實現。在這種情況下,為Car類實現Lockable的圖1-3將如圖1-4所示。
3.依賴
依賴是最通用的UML關系類型之一。它用于定義一個類以某種方式依賴于另一個類,而另一個類可能依賴于或不依賴于第一個類。依賴關系有時被稱為Uses-A關系。
通常,在面向對象的編程語言中,依賴關系用于描述一個類在方法的聲明中是否包含第二個類的參數,或者說它只是通過方法將第二個類傳遞給其他類,而不是使用方法來創建第二個類的實例。如圖1-5所示。
圖 1-4? ????????????????????????????????????????????圖 1-5
4.關聯
關聯表示兩個實體之間的關系。有兩種類型的關聯:組合和聚合。通常,關聯關系由箭頭表示,如圖1-6所示。
5.聚合
聚合是一種特殊類型的關聯。如果將繼承看作Is-A關系,則可以將聚合視為Has-A關系。
聚合用于描述以下情況中兩個或多個類之間的關系:一個類在邏輯上包含另一個類,但所包含的類的實例又可以獨立于第一個類在其上下文之外生存,或者可以被其他的類所引用。例如,部門與教師間存在Has-A關系,每位教師必須屬于部門,但如果部門不再存在,教師仍然可以處于活動狀態,如圖1-7所示。
圖 1-6????????????????????????????????????????? 圖 1-7
6.組合
顧名思義,一個類是另一個類的組成部分就稱兩者間存在組合關系。這有點類似于聚合,不同之處在于當主類不再存在時,依賴類不再存在。例如,房子(House)由房間(Room)組成,但如果房子被銷毀,房間就不再存在,如圖1-8所示。
實際上,尤其是在具有垃圾回收器的Java等語言中,組合和聚合之間的界限并不是很清晰。對象不必手動銷毀,當它們不再被引用時,它們會被垃圾回收器自動銷毀。因此,從編碼的角度來看,我們不需要真正關心處理的是組合還是聚合關系,但是如果我們想要在UML中有一個定義良好的模型,考慮這一點就很重要了。
Java UML
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。