再次說UML 中的關係

彎_彎發表於2012-11-20

       用了半個的時間第一遍學習了第一遍大話設計模式,在大話設計模式中每個模式的解釋都用了類圖,每個類和每個

 

類都用不同的關係連線起來.所以我根據自己的理解有總結了一下他們的關係.

 

"直線"關係----關聯關係

 

A,B兩個類,它們之間有關係,但又不能確定是怎麼的關心地,我們可以這樣畫:

 

 

用比較通俗的話說是"直線"關係,使用UML 專業的術語說是"關聯"關係.

 

       我們在做軟體需求分析時,如果覺得兩個業務感念之間有聯絡,但是暫時不能確定具體是怎麼的,那麼就先畫一條線

 

將兩者連起來再說.隨著自己對業務的瞭解,這條線條會進一步具體化,你就可以為這兩條線新增更多的元素.

 

(1)一對一的關係

 

這個圖A.B兩個類有一條直線相連,但在直線兩端各有一個數字1,表示一個A對應一個B,

 

 

 

(2)一對多的關係

 

這個表示一個A對應多個B,*號表示0到多個.

 

 

 

"包含"關係

 

一個部分由多個員工,用類圖可以這樣表示:

 

 

 

       用uml的標準術語來說,第一種空心菱形表示的是聚合關係,它的關係就如計算機主機和CPU的關係.第二種實心菱

 

形表示的是組合關係,它的關係就如孕婦和胚胎的關係.

 

       這裡有兩種表示方法,一種是空心菱形,一種是實心菱形.兩種菱形表示包含的強烈程度不同,空心菱形是"弱"包含,實

 

心菱形則是"強"包含.

 

       米老師常常說的"記是永遠記不住的".如果有技巧的記憶,會讓你"忘也不掉"的.我們來看看這個記憶技巧:空心菱形

 

是空心的,顯得虛弱一點,這就是"弱"包含;實心菱形是實心的,顯得更加的強壯,這就是"強"關係.

 

"繼承"關係

 

       在提高班提倡的是導師制,在提高班內部的學生做師傅,分享知識和學習經驗.學生可以做徒弟,也可以做師傅,把自己

 

的經驗傳給徒弟,下面是徒弟和老師的類圖:

 

 

 

現在我們來思考一個問題:徒弟和師傅有些什麼共性呢?

 

徒弟和師傅不都是學生嗎,凡是學生都有這樣的屬性:

 

 

 

學生,師傅,徒弟可以表示以下的關係:

 

 

師傅和徒弟都"繼承"了員工,它們具備學生的屬性,同時也有自己特有的屬性.

 

我們還可以這樣說:師傅,徒弟都是員工的一種.

 

"繼承"關係畫法如下:

 

 

 

這表示A繼承B,A具有B的特點,同時也具有自己特有的特點.

 

在UML的標準術語中這種"繼承"關係被稱為"泛化"關係(Generalization).

 

依賴關係

 

若果一個酒鬼嗜酒如命,沒有酒的話就不能生活,用類圖就可以這樣來表示:

 

 

這個虛箭頭就表示依賴關係(Dependency),

 

 如果說A依賴於B,用類圖就可以這樣來表示:

 

 

所謂的依賴關係,依賴的程度是相當而言的,不一定是A沒有B就不能"生存"了.

 

在具體的業務邏輯中,對於某個事情,A需要B來協助才能完成,這樣也是一種依賴關係.

 

 

擴充套件關係:

 

       在機房收費系統中,當涉及到錢的地方,比如查詢充值情況,日結算,周結算的地方都涉及到了列印,列印預覽的功能,

 

我們用用例圖可以這樣表示:

 

 

從圖中我們可以看出擴充套件關係式用一條帶箭頭的虛線加上<<extends>>來表示的.

 

如果A擴充套件出B,用用例圖我們可以這樣表示:

 

 

       擴充套件關係表示的是"可選"的,而不是"必選",這意味著即使沒有擴充套件用例,基本用例也是完整的,如果哦沒喲基本用例,

 

擴充套件用例是不能單獨存在的;如果有多個擴充套件用例,同一時間用例例項也只會使用其中一個.

 

使用擴充套件關係的情況:

 

1.用例的某一個部分是可選的系統行為.

 

2.只在特定條件下才執行分支流,如觸發警報器

 

3.可能有一組行為段,其中的一個或者多個可以再基本用例擴充套件點處插入.所插入的行為段將取決於執行基本用例時與

 

主角進行的互動.

 

 包含關係(include)

 

       如果我們想要使用機房收費系統,我們必選先登入機房收費系統,才能進行各自的操作,才能對資料庫進行增刪改查.

 

用用例圖我麼可以這樣表示:

 

 

包含關係式用一條帶箭頭的虛線加<<include>來表示的.

 

如果A包含B,用例圖可以這樣表示:

 

 

       與擴充套件用例不同的是:包含用例表示的是"必選"而不是"可選",這意味著如果沒有包含用例,基本用例是不完整,同時

 

沒有基本用例,包含用例是不能單獨存在的.

 

在用例圖中使用包含關係的理由:

 

1.從基本用例中分解出這樣的行為:它對於瞭解基本用例的主要目的並不是必需的,只有它的結果才比較重要.

 

2.分解出兩個或更多個用例所共有的行為.

 

實現關係(Realize)

 

手機是現在生活中不可缺少的一部分.使用手機通話,就必須要交話費,交話費的實現途徑可能有營業廳交費,銀行交

 

費,    預存話費等.用類圖我們可以表示為:

 

 

實現關係是由一條帶空心箭頭的虛線表示的.

 

如果A實現B ,用類圖可以這樣表示:

 

 

       在前面我曾說過<<uml ---關係>>.但是說的比較簡單,那是剛學習的時候,對關係還是處於很模糊的狀態寫的.

相關文章