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