利用UML類圖進(jìn)行系統(tǒng)建模技巧詳談
本節(jié)和大家學(xué)習(xí)一下如何利用UML類圖進(jìn)行系統(tǒng)建模,主要包括類與類圖和對(duì)象關(guān)系兩大部分的內(nèi)容,希望通過本節(jié)的介紹大家對(duì)UML類圖有深一步的了解。下面讓我們一起來學(xué)習(xí)UML類圖吧。
如何利用UML類圖進(jìn)行系統(tǒng)建模
統(tǒng)一建模語(yǔ)言(UML)是用于系統(tǒng)建模的一種半形式化標(biāo)準(zhǔn),該語(yǔ)言兼具嚴(yán)格性和靈活性特點(diǎn),可以對(duì)系統(tǒng)的不同層面進(jìn)行描述。本文以一個(gè)電源子系統(tǒng)為例,介紹了UML類的定義和對(duì)象之間的關(guān)系,以及通過類圖對(duì)系統(tǒng)進(jìn)行建模的方法。
統(tǒng)一建模語(yǔ)言(UML)是一種用于系統(tǒng)建模的半形式化標(biāo)準(zhǔn)。其十分嚴(yán)格的特點(diǎn)能滿足可執(zhí)行性要求,同時(shí)又具有靈活性,能實(shí)現(xiàn)對(duì)系統(tǒng)各個(gè)層面的描述。在最基本的情況下,UML能描述一個(gè)系統(tǒng)的結(jié)構(gòu)模型及系統(tǒng)內(nèi)部的協(xié)作行為,以及系統(tǒng)對(duì)象和系統(tǒng)組件的具體行為規(guī)范。
類與類圖
UML類圖中類是指某組對(duì)象的低層結(jié)構(gòu)和行為規(guī)范。類定義了對(duì)象的屬性(數(shù)據(jù)元)和方法(成員函數(shù)),類還可以通過狀態(tài)圖或活動(dòng)圖來說明其實(shí)例如何響應(yīng)各類事件。
形象地說,如果一個(gè)類是“切餅機(jī)”,那么其對(duì)象便是“餅”。一個(gè)對(duì)象是某個(gè)類的實(shí)例,例如3.14159是浮點(diǎn)數(shù)類型的實(shí)例。一個(gè)特定類的所有對(duì)象具有相同的數(shù)據(jù)結(jié)構(gòu)和行為,盡管它們的屬性值可能互不相同。
當(dāng)我們希望描述一個(gè)系統(tǒng)的某些結(jié)構(gòu)特性時(shí),通常會(huì)從它的通用特征開始,如系統(tǒng)各個(gè)組成部分在設(shè)計(jì)時(shí)的各種特性以及它們之間的相互關(guān)系,而不是運(yùn)行時(shí)某一具體時(shí)刻的系統(tǒng)結(jié)構(gòu)。因此,我們通常會(huì)把系統(tǒng)結(jié)構(gòu)抽象成為多個(gè)相互關(guān)聯(lián)的類,并且知道在運(yùn)行中各時(shí)刻這些類的實(shí)例未必一定存在。如果我們希望獲得系統(tǒng)在某一瞬間的狀態(tài),便需要采用對(duì)象。
圖1所示為一個(gè)以電池和太陽(yáng)能電池板構(gòu)成的供電系統(tǒng),該圖是一個(gè)典型類圖,圖中小方框表示不同的類。“電源子系統(tǒng)”類代表一個(gè)子系統(tǒng),該子系統(tǒng)是一個(gè)大的結(jié)構(gòu)對(duì)象,它包含了提供子系統(tǒng)功能的小對(duì)象。PowerClient類和Knob類以“標(biāo)準(zhǔn)形式”顯示,而Light類除了名字外,還顯示了它的某些屬性和方法,其屬性為分類色彩和亮度,相應(yīng)的枚舉類型為COLOR_TYPE和整數(shù)(int)。在Light類的底部列出了獲得可能返回值和參數(shù)的方法。DisplayThread是一個(gè)特殊的類,該類的實(shí)例在其自己的線程內(nèi)運(yùn)行。DisplayThread類包含了一個(gè)Light類的實(shí)例,它也在DisplayThread對(duì)象的線程中運(yùn)行。
通常,一個(gè)系統(tǒng)的結(jié)構(gòu)模型由一組類圖構(gòu)成,一些類圖表示子系統(tǒng)的結(jié)構(gòu),其中主要單元是大的對(duì)象,例如子系統(tǒng)和部件,另一些類圖集中描述任務(wù)結(jié)構(gòu),并以活動(dòng)對(duì)象為主(但也可描述系統(tǒng)旗語(yǔ)和事件隊(duì)列)。其余的類圖描述類之間的協(xié)作結(jié)構(gòu),即對(duì)象是如何協(xié)同工作來實(shí)現(xiàn)系統(tǒng)級(jí)行為或模型構(gòu)成,并主要描述各個(gè)模型包及其相互關(guān)系。上面這些類圖都是描述同一系統(tǒng)結(jié)構(gòu)的不同方面。
對(duì)象關(guān)系
對(duì)象只是系統(tǒng)的組成部分,它們必須與其它對(duì)象進(jìn)行協(xié)作來實(shí)現(xiàn)系統(tǒng)功能,因此需要在對(duì)象之間建立鏈接(通常采用C或C++的指針),以便調(diào)用服務(wù)或相互發(fā)送事件(event)。這在UML類圖中表現(xiàn)為類之間的關(guān)聯(lián),在圖1中示出了三個(gè)不同的關(guān)聯(lián),不帶箭頭的線表示常規(guī)關(guān)聯(lián)。這些類之間的關(guān)聯(lián)表示在運(yùn)行過程中它們可能是實(shí)例對(duì)象之間的活動(dòng)鏈接,并可在對(duì)象間調(diào)用服務(wù)。標(biāo)有單向箭頭的地方表示信息流只有一個(gè)方向。
線上的空心菱形(例如SolarPanel和PositionSensor類之間的菱形)表明一個(gè)聚集,它代表了一種整體與局部的關(guān)聯(lián)形式。聚集的增強(qiáng)形式稱為組合體,采用實(shí)心菱形(如電源子系統(tǒng)和SolarPanel之間)或?qū)⒁粋€(gè)類嵌套在另一個(gè)類中(如電源子系統(tǒng)和電池之間)來表示。組合體是整體與局部的關(guān)聯(lián),但同時(shí)也表明整體類負(fù)責(zé)各部分對(duì)象的創(chuàng)建和解除。
對(duì)于各種關(guān)聯(lián)還可以表示其多重性,即運(yùn)行時(shí)可充當(dāng)某一角色的類的實(shí)例數(shù)。例如,你會(huì)發(fā)現(xiàn)只有一個(gè)Knob對(duì)象與每個(gè)PowerClient對(duì)象關(guān)聯(lián)。另一方面,每個(gè)電源子系統(tǒng)實(shí)例可與0個(gè)或多個(gè)(用*表示)SolarPanel實(shí)例關(guān)聯(lián)。對(duì)于嵌套的符號(hào),在部件類的左上角示出了部件的多重性。例如,電源子系統(tǒng)擁有兩個(gè)電池對(duì)象。
除了關(guān)聯(lián)之外,UML還定義了其它的類間關(guān)系。最常見的一個(gè)是“判定”,即“is-a”關(guān)系,例如PowerClient(廣義的)和Light(具體的)間的關(guān)系(即Light是一種PowerClient)。從語(yǔ)義上來講,“判定”確保Light類同樣具有所有PowerClient類的屬性、操作及關(guān)聯(lián)。Light類可重新定義PowerClient類中定義的操作,同時(shí)也可定義新的屬性和操作。例如,Light類與Knob類有關(guān)聯(lián),因?yàn)樗母割怭owerClient中定義了這一關(guān)聯(lián)。
此外,圖中還定義了“正確性規(guī)則”約束,這是系統(tǒng)的類和關(guān)聯(lián)中沒有定義的系統(tǒng)語(yǔ)義。在本文例舉的類圖中,我們需要規(guī)定在同一時(shí)刻,只能是電池或太陽(yáng)能電池板之一供電,而不能兩者同時(shí)供電。約束是用來描述系統(tǒng)的非功能性特征(通常稱為QoS,服務(wù)質(zhì)量),例如方法的最差及平均性能、功能等。
UML是用于描述系統(tǒng)不同層面的一個(gè)功能強(qiáng)大的建模語(yǔ)言,其UML類圖是一種靈活的圖形符號(hào),能清楚地表示出不同抽象程度下的系統(tǒng)結(jié)構(gòu)。UML所描述的系統(tǒng)層面主要包括系統(tǒng)結(jié)構(gòu)單元,以及從如何支持協(xié)作、所涉及的實(shí)例數(shù)量來描述的結(jié)構(gòu)單元之間的相互關(guān)系。附加約束可讓開發(fā)人員更方便地描述系統(tǒng)結(jié)構(gòu)的特殊情況以及結(jié)構(gòu)限制。
【編輯推薦】
- 全面認(rèn)識(shí)UML類圖元素
- UML類圖詳解
- UML用例圖用法實(shí)例剖析
- 術(shù)語(yǔ)匯編 UML統(tǒng)一建模語(yǔ)言簡(jiǎn)介
- 使用UML類圖進(jìn)行Java應(yīng)用程序設(shè)計(jì)