新聞中心
本文和大家重點(diǎn)討論一下UML類圖和對(duì)象圖的概念,UML類圖是一個(gè)分為三個(gè)部分的矩形。最上面的部分顯示類的名稱,中間部分顯示類的屬性,最下面的部分顯示類的操作(或者說“方法”)。

UML類圖和對(duì)象圖
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類圖可能會(huì)用來描述一些相同的類。然而,實(shí)現(xiàn)UML類圖與邏輯UML類圖不會(huì)使用相同的描述屬性。
UML類圖是一個(gè)分為三個(gè)部分的矩形。最上面的部分顯示類的名稱,中間部分顯示類的屬性,最下面的部分顯示類的操作(或者說“方法”)。實(shí)際上,最常用、最簡(jiǎn)單的UML類圖就是一個(gè)在里面顯示了類名的長(zhǎng)方形,因?yàn)樵赨ML中,大多數(shù)類只要有一個(gè)能夠清楚表達(dá)的命名就可以了。
在類名部分還可以顯示類的構(gòu)造類型。類的構(gòu)造型顯示在一對(duì)雙角括符號(hào)“??”之間,經(jīng)常放在類的名稱上面。常見的構(gòu)造類型包括實(shí)現(xiàn)類(直接顯示類名)、接口(在類名上面顯示?interface?),以及工具類(在類名上面顯示?utility?)。如果類名用斜體表示,或者在類名下面標(biāo)上{abstract},就表示這個(gè)類是一個(gè)抽象類。
在屬性和方法的前面有一個(gè)字符用來表示屬性或方法的作用域,它們的意義如下:
—“-”表示屬性或方法是私有的(private);
—“#”表示屬性或方法是保護(hù)的(protected);
—“+”表示屬性或方法是公用的(public)。
緊接在屬性或方法的參數(shù)名稱的冒號(hào)(:)號(hào)之后,顯示了屬性的類型或方法的參數(shù)的類型。方法的返回值類型顯示在方法后面的冒號(hào)之后。
下圖顯示了一個(gè)類Person的UML類圖,它對(duì)應(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類圖示意
對(duì)象圖用來表示類的實(shí)例化對(duì)象。對(duì)象圖用一個(gè)兩層的矩形來表示,上層標(biāo)識(shí)對(duì)象名和類名,下層標(biāo)識(shí)對(duì)象的實(shí)例化屬性值。下面的代碼將創(chuàng)建一個(gè)Person類的對(duì)象mary:
Personmary=newPerson("Mary",'F',24);
對(duì)象mary的對(duì)象圖如圖所示:
- mary:Person
- name:string="Mary"
- sex:char='F'
- age:int=24
#p#
UML對(duì)象圖示例
在一個(gè)系統(tǒng)中,類之間存在多種關(guān)系,如下所示。
—繼承(inheritance):繼承是指一個(gè)類從其父類派生而來,繼承了父類的屬性和方法?;陬惖睦^承叫做一般化(generalization),基于接口的繼承,叫做實(shí)現(xiàn)(realization)。
—關(guān)聯(lián)(association):類之間的關(guān)聯(lián)大多用來表示變量實(shí)例持有對(duì)其他對(duì)象的引用,這種關(guān)系是半永久的,但沒有包含關(guān)系。
—依賴(dependency):依賴是不同類的實(shí)例之間的暫時(shí)關(guān)系。
—聚合(aggregation):聚合是關(guān)聯(lián)的一種特殊形式,它意味著一種整體/部分(whole/part)的關(guān)系,但是部分也可以作為其他整體的組分,而且部分和整體之間也沒有生命期的依賴。
—組合(composition):組合是聚合的一種特殊形式,組合的關(guān)聯(lián)性比聚合更強(qiáng),部分只能作為唯一的一個(gè)整體的部分,而且部分的生命周期依賴于整體的生命周期。
UML類圖對(duì)這些關(guān)系的表示方法如圖6-5所示。具有關(guān)聯(lián)、聚合和組合關(guān)系的兩個(gè)對(duì)象之間可能是沒有數(shù)量關(guān)系的一種聯(lián)系,也可能存在數(shù)量關(guān)系,比如1對(duì)1(不標(biāo)識(shí))、0個(gè)或1個(gè)(標(biāo)識(shí)為0…1)、0個(gè)或多個(gè)(標(biāo)識(shí)為0…*或0…n)、1個(gè)或多個(gè)(標(biāo)識(shí)為1…*或1…n)或者確切的數(shù)字(直接標(biāo)識(shí)數(shù)字)。
圖6-6顯示了一個(gè)包含了圖6-2中的對(duì)象的UML類圖。其中包括一個(gè)繼承關(guān)系和兩個(gè)關(guān)聯(lián)關(guān)系。CDSalesReport類繼承自Report類。一個(gè)CDSalesReport類與一個(gè)CD類關(guān)聯(lián),但是CD類并不知道關(guān)于CDSalesReport類的任何信息。CD類和Band類都彼此知道對(duì)方,兩個(gè)類彼此都可以與一個(gè)或者多個(gè)對(duì)方類相關(guān)聯(lián)。
UML類圖之間的關(guān)系表示方法
包含關(guān)系的UML類圖
下圖顯示了一個(gè)包含多種關(guān)系的UML類圖的另一個(gè)例子。Person類實(shí)現(xiàn)了IHuman接口,Author類繼承了Person類;Book類與Author類之間的關(guān)聯(lián)是1對(duì)多的,即一本書可能有一個(gè)或多個(gè)作者;Person讀書,這是一種暫時(shí)的單向依賴;Book由一個(gè)或多個(gè)Page組成,每一個(gè)Page只能作為一本Book的一部分,這是一種組合關(guān)系;Bookshelf里可以不放或者放多本Book,Book也可以放在其他的Bookshelf中,Bookshelf的存在并不能影響B(tài)ook的存在性,這是一種聚合關(guān)系。
一個(gè)包含多種關(guān)系的UML類圖
表示各對(duì)象之間的關(guān)系的對(duì)象圖說明了系統(tǒng)在某一個(gè)特定時(shí)刻的狀態(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不可能與源代碼一一對(duì)應(yīng),只存在結(jié)構(gòu)上的對(duì)應(yīng)關(guān)系。
名稱欄目:UML基礎(chǔ)解析UML類圖和對(duì)象圖
文章起源:http://www.dlmjj.cn/article/cdcpchh.html


咨詢
建站咨詢
