【设计模式学习笔记】类图:类与类之间的关系
目錄
一、UML統一建模語言簡介
二、類圖
三、類與類之間的關系
1. 泛化關系
2. 實現關系
3.? 依賴關系
4. 關聯關系
?5. 聚合關系
6. 組合關系
四、小結
一、UML統一建模語言簡介
在軟件開發流程中,一般應先對軟件開發的過程進行建模,把要做什么功能、如何去實現、達到什么樣的程度這些基本問題分析清楚了,才去寫代碼實現。建模是對現實按照一定規則進行簡化,但應該體現出現實事物的特點。通過軟件建模可以把現實世界中的問題轉化到計算機世界進行分析和實現,軟件建模的實現過程就是需求-建模-編碼的一個過程。
UML統一建模語言,United Modeling Language,是一種面向對象的可視化建模語言,通過圖形符號描述現實系統的組成,通過建立圖形之間的關系來描述整個系統模型。
二、類圖
類圖是面向對象系統建模中最常用的一種UML圖,主要用來表示類與類之間的關系,包括泛化關系、關聯關系、依賴關系和實現關系。
類圖由三部分組成:類名、屬性和方法。
-? ?表示private
+? ?表示public
#? ?表示protected
點擊選擇類組件就可以進行設置,可以直接在組件上修改,也可以在右側Editors修改。
- 屬性表示為???????? ?屬性名:類型
- 方法表示為? ? ? ? ? 方法名(參數類型):返回值類型?
三、類與類之間的關系
1. 泛化關系
Generalization,用來表示類與類之間的繼承關系,也叫做is a kind of關系,用三角形的箭頭從子類指向父類。
2. 實現關系
Realization,實現關系就是類或接口的實現,由三角箭頭虛線從實現類指向接口類,(比如C++中純虛函數的實現)。可以在右側查看類之間的關系。
3.? 依賴關系
Dependency,依賴關系是指在一個類中要用到另一個類的實例的一種關系,主要表現為一個類是另一個類的函數參數,或者一個類是另一個類的函數返回值的情況。在類圖中的表現形式為一個虛線箭頭從一個類指向被依賴的類。
?具體代碼表現形式為
class Class4 {}; class Class3 { public:void function(Class4 temp) //Class4類對象作為Class3的成員函數的函數參數{ /**/ } };4. 關聯關系
Association,關聯關系是類和類之間對應的一種連結,是指兩個獨立的對象,一個對象的實例與另一個對象的一些特定實例存在固定的對應關系。關聯關系可以是單向的也可以是雙向的,通過關聯使得一個類可以使用另一個類的屬性和方法,在C++中具體的表現形式為,一個類的對象是另一個類的成員屬性。在類圖中,單向的是帶箭頭的實線,雙向的是不帶箭頭的實線。
?代碼形式為
class Class6 {}; class Class5 { public:void func(){c.func1(); //可以直接使用Class6的方法} private:Class6 c; //Class6對象作為Class5類的成員屬性 };?5. 聚合關系
Aggregation,聚合關系表示整體和部分的關系,它是一種has-a的包含關系,而且整體和部分是可以分離的,即離開整體,部分也能存在。聚合關系是關聯關系的一種,它是一種更強的關聯關系。聚合關系在C++中的表現也是成員變量的方式,但是和關聯關系不同的是,關聯關系中的兩個類是相互獨立的,而聚合關系中的兩個類是整體與部分的關系,一個類是另一個類的一部分。在類圖中,空心菱形在代表整體的類那側,另一側為代表部分的類。
?聚合關系的簡單理解,比如手機和充電線,充電線是手機的一部分,手機就是整體,充電線是部分,但是沒有手機了,充電線也可以單獨存在。代碼表現形式為:
class charger {}; class phone { public:void set_charger(charger m_c){this->m_c = m_c;} public:charger m_c; };在聚合關系中,我們在創建一個對象phone的時候可以不去管charger,因為在phone類中定義了set_charger方法用于構造charger,我們可以通過該方法在其它時機設置charger。
6. 組合關系
Composite,也是關聯關系的一種,是一種比聚合關系更強的關聯關系。如果兩個類是聚合關系(A是B的一部分),那么離開B之后,A就失去了存在的意義。組合關系是一種不可分離的關系。在類圖中用實心菱形指在代表整體的類,另一側為代表部分的類。
?聚合關系的簡單理解,屏幕screen是手機phone的一部分,并且屏幕screen離開手機phone之后就失去了存在的意義,這就是組合關系。代碼表現形式為:
class screen {}; class phone { public:phone(screen m_s){this->m_s = m_s;} public:screen m_s; };在組合關系中,創建phone對象的時候就已經構造了屬性m_s,也就是整體phone的生命周期也決定了部分screen的生命周期,一旦phone生命周期結束了,screen的生命周期也結束了。在聚合關系中,沒有這種強的生命周期的關聯。
四、小結
對6種類與類之間的關系進行總結對比:
- 泛化關系和實現關系的區別:泛化關系是指C++中的繼承關系;而實現關系是指虛基類的繼承,在子類中實現虛基類的純虛函數。
- 泛化關系和實現關系可以看成依賴關系的一種,因為它們離開依賴的類都無法編譯通過。
- 聚合關系和組合關系是關聯強度逐漸增強的關聯關系;關聯關系雙方是平等的,聚合關系和組合關系的雙方是整體和部分的關系。
- 聚合關系的雙方整體和部分可以分離單獨存在,沒有生命周期的強相關;組合關系雙方,部分離開整體將失去意義,整體的生命周期代表了部分的生命周期。
總結
以上是生活随笔為你收集整理的【设计模式学习笔记】类图:类与类之间的关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 奇迹服务器如何修改合成几率,奇迹萌新教程
- 下一篇: 测试创新——拓宽自己的边界