UML類圖的圖形表示,你學會了嗎?
在UML類圖表示類的圖形:
表示類的圖形有三層:
- 第一層是類名字;
- 第二層是類的成員變量;
- 第三層是類的方法。
成員變量以及方法前的訪問修飾符用符號來表示:
- “+”表示 public
- “-”表示 private
- “#”表示 protected
- 不帶符號表示 default
注意:
如果是抽象類和抽象方法,那么用斜體字體表示
在UML類圖表示接口:
接口在類圖中的第一層頂端用構造型 <>表示,下面是接口的名字,第二層是字段常量,第三層是抽象方法。(如果用兩層表示,那就只是表示接口名和方法)。
第二種表示接口的方法是“棒棒糖表示法”:
類上面的一根棒棒糖(圓圈+實線)。圓圈旁為接口名稱,接口方法在實現類中出現。
在UML類圖中表示包:
類和接口一般都出現在包中,UML類圖中包的表示形式如下圖所示。package表示包名。
在UML類圖中表示關系:
繼承(泛化):
泛化關系(Generalization)是指對象與對象之間的繼承關系。如果對象A和對象B之間的“is a”關系成立,那么二者之間就存在繼承關系,對象B是父對象,對象A是子對象。例如:一只大雁“is a” 動物,很顯然,大雁是和動物是繼承關系。
實現:
實現關系是指接口及其實現類之間的關系,實現關系用空心三角和虛線組成的箭頭來表示,從實現類指向接口
關聯:
關聯關系(Association)是指對象和對象之間的連接,它使一個對象知道另一個對象的屬性和方法。
在Java中,關聯關系的代碼表現形式為一個對象含有另一個對象的引用。也就是說,如果一個對象的類代碼中,包含有另一個對象的引用,那么這兩個對象之間就是關聯關系。
關聯關系有單向關聯和雙向關聯。
雙向關聯:如果兩個對象都知道(即可以調用)對方的公共屬性和操作,那么二者就是雙向關聯。
單項關聯:如果只有一個對象知道(即可以調用)另一個對象的公共屬性和操作,那么就是單向關聯。
大多數關聯都是單向關聯,單向關聯關系更容易建立和維護,有助于尋找可重用的類。
一個對象可以持有其它對象的數組或者集合,在UML中,通過放置多重性(multipicity)表達式在關聯線的末端來表示。多重性表達式可以是一個數字、一段范圍或者是它們的組合。多重性允許的表達式示例如下:
- 數字:精確的數量
- *或者0..*:表示0到多個
- 0..1:表示0或者1個,在Java中經常用一個空引用來實現
- 1..*:表示1到多個
關聯關系又分為依賴關聯、聚合關聯和組合關聯三種類型。
依賴:
如果對象A用到對象B,但是和B的關系不是太明顯的時候,就可以把這種關系看作是依賴關系。比如說A類的方法形參用到了B類。
public class BClass{ } public class AClass{ private BClass b1; // 依賴關系情況1:成員變量. 這也是關聯關系 public void doWork(BClass b2){ // 依賴關系情況2: 方法參數 } public void doWork(){ BClass b3; // 依賴關系情況3: 方法內的局部變量 } }
聚合:
- 聚合關系是關聯關系的一種特例,他體現的是整體與部分,是一種“弱擁有”的關系,即has-a的關系。聚合是整體和個體之間的關系。
- 例如,汽車類與引擎類、輪胎類,以及其它的零件類之間的關系便整體和個體的關系。
- 與關聯關系一樣,聚合關系 也是通過實例變量實現的。但是關聯關系所涉及的兩個類是處在同一層次上的,而在聚合關系中,兩個類是處在不平等層次上的,一個代表整體,另一個代表部分。
- 聚合關系表示整體和個體的關系,整體和個體可以相互獨立存在,一定是有兩個模塊分別管理整體和個體。
- 在UML類圖中,聚合通常使用空心菱形+實線箭頭表示
組合:
- 也是整體與部分之間的關系,但是整體會影響到部分的生存周期,只要整體對象不存在了,部分對象也隨之消亡。如,公司和部門、貓和貓的腿。
- 組合關系是關聯關系的一種特例,他體現的是一種contains-a(包含)的關系,這種關系比聚合更強,也稱為強聚合。
- 它要求普通的聚合關系中代表整體的對象負責代表部分對象的生命周期,組合關系是不能共享的。代表整體的對象需要負責保持部分對象和存活,在一些情況下將負責代表部分的對象湮滅掉。代表整體的對象可以將代表部分的對象傳遞給另一個對象,由后者負責此對象的生命周期。換言之,代表部分的對象在每一個時刻只能與一個對象發生組合關系,由后者排他地負責生命周期。部分和整體的生命周期一樣。
- 整體和個體不能獨立存在,一定是在一個模塊中同時管理整體和個體,生命周期必須相同(級聯)。
- 在UML類圖中,組合通常使用實心菱形+實線箭頭表示