UML靜態(tài)建模:類和對(duì)象
類是一種對(duì)本質(zhì)相同事物的抽象,人類軟件開發(fā)技術(shù)的發(fā)展歷史,就是還事物以本源的歷史,開發(fā)技術(shù)、名詞越來越接近世界的真實(shí),“面向?qū)ο?rdquo;、“類”就是這樣的產(chǎn)物。被解救向大家介紹一下UML靜態(tài)建模中類和對(duì)象的概念。
UML靜態(tài)建模:類和對(duì)象
同類相從,同聲相應(yīng),固天之理也。——《莊子·漁父》
類是一種對(duì)本質(zhì)相同事物的抽象,人類軟件開發(fā)技術(shù)的發(fā)展歷史,就是還事物以本源的歷史,開發(fā)技術(shù)、名詞越來越接近世界的真實(shí),“面向?qū)ο?rdquo;、“類”就是這樣的產(chǎn)物。
3.1類圖
在UML靜態(tài)建模中,類圖顯示了一組類、接口、協(xié)作以及它們之間的關(guān)系。在UML的靜態(tài)機(jī)制中類圖是一個(gè)重點(diǎn),它不但為設(shè)計(jì)人員所關(guān)心,更為實(shí)現(xiàn)人員所關(guān)注,建模工具也主要依據(jù)類圖來產(chǎn)生代碼(正向)工程。因此,類圖在UML的各種圖中占據(jù)了相當(dāng)重要的地位。
類
在類圖中類用矩形框來表示,它的屬性和操作分別列在分格中,若不需要表達(dá)詳細(xì)信息時(shí),分格可以省略。一個(gè)類可能出現(xiàn)在好幾個(gè)圖中。同一個(gè)類的屬性和操作只在一種圖中列出,在其他圖中可省略。圖3.1給出Student類和MFC中的CObject類。
圖3.1類的表示
類間關(guān)系
在UML靜態(tài)建模的類圖中,除了需要描述單獨(dú)的類的名稱、屬性和操作外,我們還需要描述類之間的聯(lián)系,因?yàn)闆]有類是單獨(dú)存在的,它們通常需要和別的類協(xié)作,創(chuàng)造比單獨(dú)工作更大的語義。在UML類圖中,關(guān)系用類框之間的連線來表示,連線上和連線端頭處的不同修飾符表示不同的關(guān)系。類之間的關(guān)系有繼承(泛化)、關(guān)聯(lián)、聚合和組合。
(1)繼承:指的是一個(gè)類(稱為子類)繼承另外的一個(gè)類(稱為基類)的功能,并增加它自己的新功能的能力,繼承是類與類之間最常見的關(guān)系。類圖中繼承的表示方法是從子類拉出一條閉合的、單鍵頭(或三角形)的實(shí)線指向基類。例如,圖3.2給出了MFC中CObject類和菜單類CMenu的繼承關(guān)系。
圖3.2類的繼承
類的繼承在C++中呈現(xiàn)為:
classB{}
classA:publicB{}
(2)關(guān)聯(lián):指的是模型元素之間的一種語義聯(lián)系,是類之間的一種很弱的聯(lián)系。UML靜態(tài)建模中關(guān)聯(lián)可以有方向,可以是單向關(guān)聯(lián),也可以是雙向關(guān)聯(lián)??梢越o關(guān)聯(lián)加上關(guān)聯(lián)名來描述關(guān)聯(lián)的作用。關(guān)聯(lián)兩端的類也可以以某種角色參與關(guān)聯(lián),角色可以具有多重性,表示可以有多少個(gè)對(duì)象參與關(guān)聯(lián)??梢酝ㄟ^關(guān)聯(lián)類進(jìn)一步描述關(guān)聯(lián)的屬性、操作以及其他信息。關(guān)聯(lián)類通過一條虛線與關(guān)聯(lián)連接。對(duì)于關(guān)聯(lián)可以加上一些約束,以加強(qiáng)關(guān)聯(lián)的含義。
關(guān)聯(lián)在C++中呈現(xiàn)為:
classA{...}
classB{...}
A::Function1(B&b)//或A::Function1(Bb)//或A::Function1(B*b)
即一個(gè)類作為另一個(gè)類方法的參數(shù)。
(3)聚合:指的是整體與部分的關(guān)系。通常在定義一個(gè)整體類后,再去分析這個(gè)整體類的組成結(jié)構(gòu)。從而找出一些組成類,該整體類和組成類之間就形成了聚合關(guān)系。例如一個(gè)航母編隊(duì)包括??漳概?、驅(qū)護(hù)艦艇、艦載飛機(jī)及核動(dòng)力攻擊潛艇等。需求描述中“包含”、“組成”、“分為…部分”等詞常意味著聚合關(guān)系。
圖3.3類的聚合
(4)組合:也表示類之間整體和部分的關(guān)系,但是組合關(guān)系中部分和整體具有統(tǒng)一的生存期。一旦整體對(duì)象不存在,部分對(duì)象也將不存在。部分對(duì)象與整體對(duì)象之間具有共生死的關(guān)系。
UML靜態(tài)建模中聚合和組合的區(qū)別在于:聚合關(guān)系是“has-a”關(guān)系,組合關(guān)系是“contains-a”關(guān)系;聚合關(guān)系表示整體與部分的關(guān)系比較弱,而組合比較強(qiáng);聚合關(guān)系中代表部分事物的對(duì)象與代表聚合事物的對(duì)象的生存期無關(guān),一旦刪除了聚合對(duì)象不一定就刪除了代表部分事物的對(duì)象。組合中一旦刪除了組合對(duì)象,同時(shí)也就刪除了代表部分事物的對(duì)象。
我們用淺顯的例子來說明聚合和組合的區(qū)別。“國(guó)破家亡”,國(guó)滅了,家自然也沒有了,“國(guó)”和“家”顯然也是組合關(guān)系。而相反的,計(jì)算機(jī)和它的外設(shè)之間就是聚合關(guān)系,因?yàn)樗鼈冎g的關(guān)系相對(duì)松散,計(jì)算機(jī)沒了,外設(shè)還可以獨(dú)立存在,還可以接在別的計(jì)算機(jī)上。在聚合關(guān)系中,部分可以獨(dú)立于聚合而存在,部分的所有權(quán)也可以由幾個(gè)聚合來共享,比如打印機(jī)就可以在辦公室內(nèi)被廣大同事共用。
在C++語言中,從實(shí)現(xiàn)的角度講,聚合可以表示為:
classA{...}
classB{A*a;.....}
即類B包含類A的指針;
而組合可表示為:
classA{...}
classB{Aa;...}
即類B包含類A的對(duì)象。
準(zhǔn)確的UML類圖中用空心和實(shí)心菱形對(duì)聚合和組合進(jìn)行了區(qū)分。#p#
圖3.4聚合和組合
圖3.5銀行管理系統(tǒng)類圖
圖3.5給出了一個(gè)典型的銀行管理系統(tǒng)的類圖,基本上一看就懂:
銀行類聚合了賬號(hào)庫(kù)(AccountSet)、客戶庫(kù)(EmployeeSet)和員工庫(kù)(EmployeeSet);
賬號(hào)庫(kù)中包含了n個(gè)賬號(hào)(Account)、客戶庫(kù)中包含了n個(gè)客戶(Employee),員工庫(kù)包含了n個(gè)員工(Employee);
員工類和客戶類都繼承自人(Person)類,而員工類中又有一種特殊的員工,即員工管理者類(EmployeeAdmin);
賬號(hào)類和客戶類之間體現(xiàn)出一種關(guān)聯(lián)關(guān)系;
單獨(dú)的元素PersonSex定義了枚舉類,其中包括Male和Female兩種性別。
我們?cè)俳o出一個(gè)類圖實(shí)例(圖3.6),它來源于軟件無線電SCA(軟件通訊架構(gòu))標(biāo)準(zhǔn)。軟件無線電技術(shù)是目前電信產(chǎn)品、軍用電臺(tái)中研究的大熱門,在其定義的SCA體系中,核心框架即以類圖的形式呈現(xiàn),它定義了應(yīng)用程序基本框架和標(biāo)準(zhǔn)控制服務(wù)接口。
實(shí)際上,軟件無線電核心框架即由類以及類之間的繼承、關(guān)聯(lián)和聚合關(guān)系組成。
圖3.6軟件無線電核心框架
接下來,我們給出建立類圖的步驟:
(1)研究分析問題領(lǐng)域確定系統(tǒng)需求;
類的識(shí)別是一個(gè)需要大量技巧的工作,尋找類的一些技巧包括:名詞識(shí)別法;根據(jù)用例描述確定類;使用CRC分析法;根據(jù)邊界類、控制類、實(shí)體類的劃分來幫助分析系統(tǒng)中的類;參考設(shè)計(jì)模式確定類;對(duì)領(lǐng)域進(jìn)行分析或利用已有領(lǐng)域分析結(jié)果得到類;利用RUP中如何在分析和設(shè)計(jì)中尋找類的步驟。
(2)確定類,明確類的含義和職責(zé)、確定屬性和操作;
(3)確定類之間的關(guān)系。#p#
3.2對(duì)象圖
UML靜態(tài)建模中對(duì)象圖顯示某時(shí)刻對(duì)象和對(duì)象之間的關(guān)系,是類圖的變化,一個(gè)對(duì)象圖可看成一個(gè)類圖的示例(example),對(duì)象圖表示的是類的對(duì)象實(shí)例而不是真實(shí)的類。由于對(duì)象存在生命周期,因此對(duì)象圖只能在系統(tǒng)某一時(shí)間段存在。
對(duì)象圖中并無新的表示法(除了對(duì)象名下要加下劃線以外),與類圖中的表示法一樣,可以認(rèn)為,只有對(duì)象而無類的類圖就是一個(gè)“對(duì)象圖”。
圖3.7對(duì)象圖
在對(duì)象圖中,對(duì)象名可以有三種表示形式:
(1)對(duì)象名:類名
(2):類名
(3)對(duì)象名
圖3.7中的是第1種,即“對(duì)象名:類名”格式。
實(shí)質(zhì)上,對(duì)象圖幾乎很少被用到(它包含的信息量太小,僅僅用于呈現(xiàn)某一時(shí)刻對(duì)象的值,對(duì)軟件的設(shè)計(jì)幾乎沒有太大的幫助),使用遠(yuǎn)沒有類圖廣泛。我們可以這樣類比類圖和對(duì)象圖之間的關(guān)系:
“動(dòng)詞+名詞”構(gòu)成“動(dòng)名詞”,例如動(dòng)詞“愛”+名詞“國(guó)”構(gòu)成動(dòng)名詞“愛國(guó)”。
我們可以看到,“動(dòng)名詞”的信息量很大,很抽象,而作為動(dòng)名詞的例子的“愛國(guó)”信息量很小,具體程度很高。
動(dòng)名詞 ―――――>類圖
愛國(guó) ―――――> 對(duì)象圖
把“動(dòng)名詞”看作類圖,把“愛國(guó)”看作對(duì)象圖,很明顯,對(duì)象圖就是類圖的一個(gè)example而已。
本文出自“InsideSW,FWandHWR&D”博客,請(qǐng)務(wù)必保留此出處http://21cnbao.blog.51cto.com/109393/120271
【編輯推薦】
- 實(shí)例講解UML建模分析與設(shè)計(jì)
- UML實(shí)例教程 圖書管理系統(tǒng)中UML建模分析與設(shè)計(jì)
- 專家指導(dǎo) UML建模分析步驟
- UML建模時(shí)需要注意的四大問題
- 解析九大UML建模圖形用法