软件工程 第三章:类图
第三章:類圖
概念
- 類圖的概念:類圖是描述類、接口以及它們之間關(guān)系的圖,它顯示了系統(tǒng)中各個(gè)類的靜態(tài)結(jié)構(gòu),是一種靜態(tài)模型。
- 分類可以有效地使復(fù)雜問題簡(jiǎn)化。建立類模型的過程,是把現(xiàn)實(shí)世界中與問題有關(guān)的各種對(duì)象及其相互關(guān)系進(jìn)行抽象和分類的過程。
類圖的組成
2類元素(接口、類),4種關(guān)系
-
對(duì)象:是人們對(duì)某個(gè)事物的一種抽象描述。對(duì)象的基本特征可以歸納為對(duì)象的屬性和行為兩類。
-
類:類是指對(duì)一組具有相同特征的對(duì)象的抽象描述;任何對(duì)象都是某個(gè)類的實(shí)例。
-
關(guān)聯(lián)關(guān)系:
- 泛化關(guān)系:
泛化(Generalization): 抽象化
特化(Specialization): 實(shí)例化
- 依賴關(guān)系:
區(qū)別:
- 依賴關(guān)系VS關(guān)聯(lián)關(guān)系
當(dāng)一個(gè)類的實(shí)例與另一個(gè)類的一些特定實(shí)例存在固定的對(duì)應(yīng)關(guān)系時(shí),這兩個(gè)系統(tǒng)之間為關(guān)聯(lián)關(guān)系。只要一個(gè)類用到另一個(gè)類,但是和另一個(gè)類的關(guān)系不是太明顯的時(shí)候(可以說是“uses”了那個(gè)類),就可以把這種關(guān)系看成是依賴,依賴也可說是一種偶然的關(guān)系。
“我在某個(gè)方法中偶然用到了它,但在現(xiàn)實(shí)中我和它并沒多大關(guān)系”。
-
實(shí)現(xiàn)關(guān)系:
-
聚合與組合:
對(duì)于聚合:
聚合表示類之間的整體與部分的關(guān)系。聚合意味著一個(gè)類擁有但共享另一個(gè)類的對(duì)象。
當(dāng)整體類不存在時(shí),部分類仍可能存在。部分類被銷毀時(shí),整體類也將能夠存在。
對(duì)于組合:
組合是一種特殊形式的聚合。與聚合相比,它有兩個(gè)特點(diǎn):
一個(gè)部分類最多只能屬于一個(gè)整體類
當(dāng)整體類不存在時(shí),部分類將同時(shí)被銷毀。
- 關(guān)聯(lián)VS聚合(組合)
關(guān)聯(lián)關(guān)系所涉及的兩個(gè)類是處在同一個(gè)層次上的。比如學(xué)生和課程就是一種關(guān)聯(lián)關(guān)系,而不是聚合關(guān)系,因?yàn)閷W(xué)生不是由課程組成的。聚合關(guān)系涉及的兩個(gè)類處于不平等的層次上,一個(gè)代表整體,一個(gè)代表部分。比如電腦和顯示器、鍵盤、主板、內(nèi)存就是聚合關(guān)系,因?yàn)橹靼宓仁请娔X的組成部分。 - 聚合VS組合
組合:整體類端的重?cái)?shù)必須是1,部分類的重?cái)?shù)是任意的
聚合:整體類端的重?cái)?shù)可以大于1,部分類的重?cái)?shù)是任意的
聚合也是表示類和類之間的“整體-部分”關(guān)系,用空心菱形表示。
組合是聚合的一種特殊情形,用實(shí)心菱形表示
- 約束規(guī)則
在畫類圖的過程中,關(guān)聯(lián)、屬性和操作等基本要素都要為模型加注約束條件。
約束規(guī)則的語法:將約束條件放在括號(hào){ }中,用自然語言或其他常見的設(shè)計(jì)語言來描述,其描述要簡(jiǎn)潔準(zhǔn)確。
在理想的情況下,在所使用的程序設(shè)計(jì)語言中,規(guī)則應(yīng)該作為斷言來實(shí)現(xiàn),并在調(diào)試代碼時(shí)調(diào)用它。
- 對(duì)象圖
三個(gè)層次的觀點(diǎn)
- 概念層:描述應(yīng)用域中的概念,是對(duì)現(xiàn)實(shí)世界的直接描述,與實(shí)現(xiàn)它們的類有關(guān),但與實(shí)現(xiàn)方案和實(shí)現(xiàn)語言無關(guān)。
- 說明層:描述軟件的接口,而不是軟件的實(shí)現(xiàn)。一個(gè)類型描述一個(gè)接口,但可能有多種實(shí)現(xiàn)。
- 實(shí)現(xiàn)層:從實(shí)現(xiàn)的角度定義類及其實(shí)現(xiàn),揭示了軟件實(shí)現(xiàn)體的構(gòu)成情況。
類圖建模分析步驟
(1)尋找出需求中的名詞(候選對(duì)象)。
(2)合并含義相同的名詞,排除范圍以外的名詞,并尋找隱含的名詞。
(3)去掉只能作為類屬性的名詞。
(4)剩下的名詞就是要找的分析類(候選類)。
(5)根據(jù)常識(shí)、問題域、系統(tǒng)責(zé)任確定該類有那些屬性。
(6)補(bǔ)充該類動(dòng)態(tài)屬性,如狀態(tài)、對(duì)象間聯(lián)系(如聚合、關(guān)聯(lián))等屬性。
(7)從需求中的動(dòng)詞、功能或系統(tǒng)責(zé)任中尋找類的操作(候選操作)。
(8)從狀態(tài)轉(zhuǎn)換,流程跟蹤、系統(tǒng)管理等方面補(bǔ)充類的操作。
(9)對(duì)所尋找的操作進(jìn)行合并、篩選。
(10)對(duì)所尋找的操作在類間進(jìn)行合理分配(職責(zé)分配),形成每個(gè)類候選操作。
(11)補(bǔ)充每個(gè)類的的分析文檔,為類的進(jìn)一步設(shè)計(jì)打下基礎(chǔ)。
小結(jié):
(1)名稱;(2)屬性;(3)行為;
(1)繼承:子類繼承了超類的所有屬性和行為;
(2)關(guān)聯(lián):兩個(gè)不同類之間關(guān)聯(lián),可以單向或雙向;
(3)聚合:強(qiáng)關(guān)聯(lián)關(guān)系,整體與部分的生命周期分開;
(4)組合:強(qiáng)聚合,整體與部分的生命周期相同;
(1)概念層;(2)說明層;(3)實(shí)現(xiàn)層
總結(jié)
以上是生活随笔為你收集整理的软件工程 第三章:类图的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android架构演进 · 设计模式·
- 下一篇: 【数据结构】一个简单的计算器