UML基礎(chǔ) 解析UML類圖和對象圖
本文和大家重點(diǎn)討論一下UML類圖和對象圖的概念,UML類圖是一個分為三個部分的矩形。最上面的部分顯示類的名稱,中間部分顯示類的屬性,最下面的部分顯示類的操作(或者說“方法”)。
UML類圖和對象圖
UML類圖表示不同的實(shí)體(人、事物和數(shù)據(jù))如何彼此相關(guān),顯示了系統(tǒng)的靜態(tài)結(jié)構(gòu)。UML類圖可用于表示邏輯類,邏輯類通常就是業(yè)務(wù)人員所談及的事物種類,比如搖滾樂隊(duì)、CD、廣播劇,或者貸款、住房抵押、汽車信貸及利率的抽象描述。UML類圖還可用于表示實(shí)現(xiàn)類,實(shí)現(xiàn)類就是程序員要編寫的類。實(shí)現(xiàn)UML類圖與邏輯UML類圖可能會用來描述一些相同的類。然而,實(shí)現(xiàn)UML類圖與邏輯UML類圖不會使用相同的描述屬性。
UML類圖是一個分為三個部分的矩形。最上面的部分顯示類的名稱,中間部分顯示類的屬性,最下面的部分顯示類的操作(或者說“方法”)。實(shí)際上,最常用、最簡單的UML類圖就是一個在里面顯示了類名的長方形,因?yàn)樵赨ML中,大多數(shù)類只要有一個能夠清楚表達(dá)的命名就可以了。
在類名部分還可以顯示類的構(gòu)造類型。類的構(gòu)造型顯示在一對雙角括符號“??”之間,經(jīng)常放在類的名稱上面。常見的構(gòu)造類型包括實(shí)現(xiàn)類(直接顯示類名)、接口(在類名上面顯示?interface?),以及工具類(在類名上面顯示?utility?)。如果類名用斜體表示,或者在類名下面標(biāo)上{abstract},就表示這個類是一個抽象類。
在屬性和方法的前面有一個字符用來表示屬性或方法的作用域,它們的意義如下:
—“-”表示屬性或方法是私有的(private);
—“#”表示屬性或方法是保護(hù)的(protected);
—“+”表示屬性或方法是公用的(public)。
緊接在屬性或方法的參數(shù)名稱的冒號(:)號之后,顯示了屬性的類型或方法的參數(shù)的類型。方法的返回值類型顯示在方法后面的冒號之后。
下圖顯示了一個類Person的UML類圖,它對應(yīng)的類的C#源代碼如下:
- Person
- +name:string
- +sex:char
- -age:int
- +Work(intype:string):void
- +Person(inname:string,insex:char,inage:int):void
- +Speak():void
- +Eat():void
UML類圖示意
對象圖用來表示類的實(shí)例化對象。對象圖用一個兩層的矩形來表示,上層標(biāo)識對象名和類名,下層標(biāo)識對象的實(shí)例化屬性值。下面的代碼將創(chuàng)建一個Person類的對象mary:
Personmary=newPerson("Mary",'F',24);
對象mary的對象圖如圖所示:
- mary:Person
- name:string="Mary"
- sex:char='F'
- age:int=24
#p#
UML對象圖示例
在一個系統(tǒng)中,類之間存在多種關(guān)系,如下所示。
—繼承(inheritance):繼承是指一個類從其父類派生而來,繼承了父類的屬性和方法?;陬惖睦^承叫做一般化(generalization),基于接口的繼承,叫做實(shí)現(xiàn)(realization)。
—關(guān)聯(lián)(association):類之間的關(guān)聯(lián)大多用來表示變量實(shí)例持有對其他對象的引用,這種關(guān)系是半永久的,但沒有包含關(guān)系。
—依賴(dependency):依賴是不同類的實(shí)例之間的暫時關(guān)系。
—聚合(aggregation):聚合是關(guān)聯(lián)的一種特殊形式,它意味著一種整體/部分(whole/part)的關(guān)系,但是部分也可以作為其他整體的組分,而且部分和整體之間也沒有生命期的依賴。
—組合(composition):組合是聚合的一種特殊形式,組合的關(guān)聯(lián)性比聚合更強(qiáng),部分只能作為唯一的一個整體的部分,而且部分的生命周期依賴于整體的生命周期。
UML類圖對這些關(guān)系的表示方法如圖6-5所示。具有關(guān)聯(lián)、聚合和組合關(guān)系的兩個對象之間可能是沒有數(shù)量關(guān)系的一種聯(lián)系,也可能存在數(shù)量關(guān)系,比如1對1(不標(biāo)識)、0個或1個(標(biāo)識為0…1)、0個或多個(標(biāo)識為0…*或0…n)、1個或多個(標(biāo)識為1…*或1…n)或者確切的數(shù)字(直接標(biāo)識數(shù)字)。
圖6-6顯示了一個包含了圖6-2中的對象的UML類圖。其中包括一個繼承關(guān)系和兩個關(guān)聯(lián)關(guān)系。CDSalesReport類繼承自Report類。一個CDSalesReport類與一個CD類關(guān)聯(lián),但是CD類并不知道關(guān)于CDSalesReport類的任何信息。CD類和Band類都彼此知道對方,兩個類彼此都可以與一個或者多個對方類相關(guān)聯(lián)。
UML類圖之間的關(guān)系表示方法
包含關(guān)系的UML類圖
下圖顯示了一個包含多種關(guān)系的UML類圖的另一個例子。Person類實(shí)現(xiàn)了IHuman接口,Author類繼承了Person類;Book類與Author類之間的關(guān)聯(lián)是1對多的,即一本書可能有一個或多個作者;Person讀書,這是一種暫時的單向依賴;Book由一個或多個Page組成,每一個Page只能作為一本Book的一部分,這是一種組合關(guān)系;Bookshelf里可以不放或者放多本Book,Book也可以放在其他的Bookshelf中,Bookshelf的存在并不能影響B(tài)ook的存在性,這是一種聚合關(guān)系。
一個包含多種關(guān)系的UML類圖
表示各對象之間的關(guān)系的對象圖說明了系統(tǒng)在某一個特定時刻的狀態(tài),經(jīng)常叫做系統(tǒng)的快照(snapshot)。
內(nèi)幕:UML與源代碼
UML是一種設(shè)計(jì)語言,它的目的不是表現(xiàn)細(xì)節(jié),而是表現(xiàn)結(jié)構(gòu),僅僅展示必要的細(xì)節(jié)。因此,UML不可能與源代碼一一對應(yīng),只存在結(jié)構(gòu)上的對應(yīng)關(guān)系。
【編輯推薦】
- 全面認(rèn)識UML類圖建模技術(shù)
- UML類圖和對象圖概念及其區(qū)別解析
- 九種UML模型圖及其功能詳解
- UML解惑:圖說六大UML類圖關(guān)系
- 經(jīng)驗(yàn)總結(jié) 在UML類圖中表示Java繼承和接口