設計模式從入門到放棄系列 01 -- UML 基礎
1997年,OMG組織(Object Management Group對象管理組織)發布了統一建模語言(Unified Modeling Language) UML 。UML的目標之一就是為開發團隊提供標準通用的設計語言來開發和構建計算機應用。UML提出了一套IT專業人員期待多年的統一的標準建模符號。通過使用UML,這些人員能夠閱讀和交流系統架構和設計規劃–就像建筑工人多年來所使用的建筑設計圖一樣。
更直白的說,UML 就像數學符號一樣,是一套符號標準,可以在 IT 領域更加規范的去傳播和閱讀。
UML 主要類別
UML 作為一個標準,有很多中類型的圖。主要有:
- 用例圖
- 類圖
- 序列圖
- 狀態圖
- 活動圖
- 組件圖
- 部署圖
每一類圖的定義以及詳細介紹可以 點擊這里 ,這里不再贅述。跟本系列設計模式較為相關的有:類圖以及時序圖。著重探討的是類之間的關系。
與設計模式相關類圖以及類之間的關系表示
下面通過一個例子來說明類之間的幾種關系以及如何用 UML 來表示。
- 交通工具為接口,有些場景下可用抽象類來替代
- 交通工具有兩個實現,汽車和自行車
- 保時捷繼承自汽車
- 汽車和輪胎之間是組合關系
- 學生和班級是聚合關系
- 學生和學生證之間是關聯關系
- 學生和自行車之間是一種依賴關系
上述描述里主要有 6 種關系。下面分別介紹。
泛化關系(generalization)
泛化關系通過一條空心交投表示。如上圖的保時捷和汽車就是泛化關系。保時捷繼承自汽車,是一種繼承關系,可以用 is-a 表示。 例如,保時捷是汽車。
實現關系(realize)
實現關系用一條帶空心箭頭的虛線表示。如上圖的汽車和自行車與交通工具的關系,交通工具是一個抽象的概念,而汽車和自行車是具體的子類或者是實現(類的繼承關系可以通過泛化或者實現來表示)。
聚合關系(aggregation)
聚合關系用一條帶空心菱形箭頭的直線表示。如上圖,學生和班級的關系。可以描述為,班級是由學生組成的。
聚合關系是實體對象直接的關系,表示整體由部分組成。但是,這種關系不是強依賴的,例如,即便是班級這個整體不存在,學生這個組成部分仍然可以存在。這一點非常容易與下面將要描述的聚合關系混淆。
組合關系(composition)
組合關系用一條帶實心菱形箭頭的直線表示。如上圖輪胎、發動機與汽車之間的關系。雖然組合關系與聚合關系一樣,可以表示整體是由部分組成的,但是,組合關系是一種強依賴,比如,汽車不存在,也就沒有了發動機,輪胎。
關聯關系(association)
關聯關系用一條直線表示。如上圖的學生證和學生之間的關系。關聯關系也是一種“強關聯”,但是是一種靜態關系,不涉及運行狀態。關聯關系一般都強調方向,因此學生和學生證之間沒有箭頭方向,如果有意強調,可以加單向箭頭表示只有一方知道另一方的存在。關聯關系通常以成員變量的形式實現。
依賴關系(dependency)
依賴關系用一個帶箭頭的虛線表示。例如,學生和自行車之間就是一種依賴關系。學生依賴自行車。與關聯關系不同的是,依賴關系是一種運行期間的關系,也就是學生這個對象在運行期間會用到自行車這個對象。除此之外,依賴關系是一種臨時性的關系,在運行時產生并隨著運行時變化。依賴關系是有方向的,雖然可以有雙向的依賴關系,但是這種設計是不好的,應該總要保證單向依賴。
依賴關系體現在代碼上,可以是類的構造函數的參數的傳入,比如,在學生這個構造函數中可能會指定自行車這個對象,運行時,學生可能會調用自行車的方法。
結語
本文講解了類之間的關系以及如何用 UML 表示這些關系。
來自:http://kevin.doyeden.com/2016/11/15/design-pattern-in-30-days-1/