類(Class)
類(圖A)是對象的藍圖,其中包含3個組成部分。第一個是Java中定義的類名。第二個是屬性(attributes)及舍。第三個是該類提供的方法。
屬性和操作之前可附加一個可見性修飾符窟绷。加號(+)表示具有公共可見性锯玛。減號(-)表示私有可見性。#號表示受保護的可見性兼蜈。省略這些修飾符表示具有package(包)級別的可見性攘残。如果屬性或操作具有下劃線,表明它是靜態(tài)的为狸。在操作中歼郭,可同時列出它接受的參數(shù),以及返回類型辐棒,如圖A的“Java”區(qū)域所示病曾。
圖A
<wbr style="box-sizing: border-box; outline: 0px; --tw-ring-shadow:0 0 #0000 ; word-wrap: break-word;"><wbr style="box-sizing: border-box; outline: 0px; --tw-ring-shadow:0 0 #0000 ; word-wrap: break-word;">
包(Package)
包(圖B)是一種常規(guī)用途的組合機制。UML中的一個包直接對應(yīng)于Java中的一個包漾根。在Java中泰涂,一個包可能含有其他包、類或者同時含有這兩者辐怕。進行建模時逼蒙,你通常擁有邏輯性的包,它主要用于對你的模型進行組織寄疏。你還會擁有物理性的包其做,它直接轉(zhuǎn)換成系統(tǒng)中的Java包。每個包的名稱對這個包進行了惟一性的標(biāo)識赁还。
圖B
接口(Interface)
接口(圖C)是一系列操作的集合妖泄,它指定了一個類所提供的服務(wù)。它直接對應(yīng)于Java中的一個接口類型艘策。接口既可用圖C的那個圖標(biāo)來表示蹈胡,也可由附加了<<interface>>的一個標(biāo)準類來表示。通常,根據(jù)接口在類圖上的樣子罚渐,就能知道與其他類的關(guān)系却汉。
圖C
關(guān)系
后面的例子將針對某個具體目的來獨立地展示各種關(guān)系。雖然語法無誤荷并,但這些例子可進一步精煉合砂,在它們的有效范圍內(nèi)包括更多的語義。
依賴(Dependency)
實體之間一個“使用”關(guān)系暗示一個實體的規(guī)范發(fā)生變化后源织,可能影響依賴于它的其他實例(圖D)翩伪。更具體地說,它可轉(zhuǎn)換為對不在實例作用域內(nèi)的一個類或?qū)ο蟮娜魏晤愋偷囊锰赶ⅰF渲邪ㄒ粋€局部變量缘屹,對通過方法調(diào)用而獲得的一個對象的引用(如下例所示),或者對一個類的靜態(tài)方法的引用(同時不存在那個類的一個實例)侠仇。也可利用“依賴”來表示包和包之間的關(guān)系轻姿。由于包中含有類,所以你可根據(jù)那些包中的各個類之間的關(guān)系逻炊,表示出包和包的關(guān)系互亮。
圖D
關(guān)聯(lián)(Association)
實體之間的一個結(jié)構(gòu)化關(guān)系表明對象是相互連接的。箭頭是可選的余素,它用于指定導(dǎo)航能力胳挎。如果沒有箭頭,暗示是一種雙向的導(dǎo)航能力溺森。在Java中慕爬,關(guān)聯(lián)(圖E)轉(zhuǎn)換為一個實例作用域的變量,就像圖E的“Java”區(qū)域所展示的代碼那樣屏积∫搅可為一個關(guān)聯(lián)附加其他修飾符。多重性(Multiplicity)修飾符暗示著實例之間的關(guān)系炊林。在示范代碼中姥卢,Employee可以有0個或更多的TimeCard對象。但是渣聚,每個TimeCard只從屬于單獨一個Employee独榴。
圖E
聚合(Aggregation)
聚合(圖F)是關(guān)聯(lián)的一種形式,代表兩個類之間的整體/局部關(guān)系奕枝。聚合暗示著整體在概念上處于比局部更高的一個級別棺榔,而關(guān)聯(lián)暗示兩個類在概念上位于相同的級別。聚合也轉(zhuǎn)換成Java中的一個實例作用域變量隘道。
關(guān)聯(lián)和聚合的區(qū)別純粹是概念上的症歇,而且嚴格反映在語義上郎笆。聚合還暗示著實例圖中不存在回路。換言之忘晤,只能是一種單向關(guān)系宛蚓。
圖F
合成(Composition)
合成 (圖G)是聚合的一種特殊形式,暗示“局部”在“整體”內(nèi)部的生存期職責(zé)设塔。合成也是非共享的凄吏。所以,雖然局部不一定要隨整體的銷毀而被銷毀闰蛔,但整體要么負責(zé)保持局部的存活狀態(tài)痕钢,要么負責(zé)將其銷毀。局部不可與其他整體共享钞护。但是盖喷,整體可將所有權(quán)轉(zhuǎn)交給另一個對象爆办,后者隨即將承擔(dān)生存期職責(zé)难咕。
Employee和TimeCard的關(guān)系或許更適合表示成“合成”,而不是表示成“關(guān)聯(lián)”距辆。
圖G
泛化(Generalization)
泛化(圖H)表示一個更泛化的元素和一個更具體的元素之間的關(guān)系余佃。泛化是用于對繼承進行建模的UML元素。在Java中跨算,用extends關(guān)鍵字來直接表示這種關(guān)系爆土。
圖H
實現(xiàn)(Realization)
實例(圖I)關(guān)系指定兩個實體之間的一個合同。換言之诸蚕,一個實體定義一個合同步势,而另一個實體保證履行該合同。對Java應(yīng)用程序進行建模時背犯,實現(xiàn)關(guān)系可直接用implements關(guān)鍵字來表示坏瘩。
圖I
1.類(Class):使用三層矩形框表示。
第一層顯示類的名稱漠魏,如果是抽象類倔矾,則就用斜體顯示。
第二層是字段和屬性柱锹。
第三層是類的方法哪自。
注意前面的符號,‘+’表示public禁熏,‘-’表示private壤巷,‘#’表示protected。
2.UML類圖符號之接口:使用兩層矩形框表示瞧毙,與類圖的區(qū)別主要是頂端有<<interface>>顯示隙笆。
第一行是接口名稱锌蓄。
第二行是接口方法。
3.UML類圖符號之繼承類(extends):用空心三角形+實線來表示撑柔。
4.UML類圖符號之實現(xiàn)接口(implements):用空心三角形+虛線來表示
5.UML類圖符號之關(guān)聯(lián)(Association):用實線箭頭來表示瘸爽,例如:燕子與氣候
6.UML類圖符號之聚合(Aggregation):用空心的菱形+實線箭頭來表示
聚合:表示一種弱的‘擁有’關(guān)系,體現(xiàn)的是A對象可以包含B對象铅忿,但B對象不是A對象的一部分剪决,例如:公司和員工
組合(Composition):用實心的菱形+實線箭頭來表示
組合:部分和整體的關(guān)系,并且生命周期是相同的檀训。例如:人與手
7.UML類圖符號之依賴(Dependency):用虛線箭頭來表示柑潦,例如:動物與氧氣
8.UML類圖符號之基數(shù):連線兩端的數(shù)字表明這一端的類可以有幾個實例,比如:一個鳥應(yīng)該有兩只翅膀峻凫。如果一個類可能有無數(shù)個實例渗鬼,則就用‘n’來表示。關(guān)聯(lián)荧琼、聚合譬胎、組合是有基數(shù)的。