1. 程式人生 > >UML中的幾種關係

UML中的幾種關係

UML定義的關係主要有六種:依賴、泛化\繼承、實現、關聯、聚合、組合)。這些類間關係的理解和使用是掌握和應用UML的關鍵,而也就是這幾種關係,往往會讓初學者迷惑。這裡給出這六種主要UML關係的說明和類圖描述,一看之下,清晰明瞭;以下就分別介紹這幾種關係:

繼承

指的是一個類(稱為子類、子介面)繼承另外的一個類(稱為父類、父介面)的功能,並可以增加它自己的新功能的能力,繼承是類與類或者介面與介面之間最常見的關係;在Java中此類關係通過關鍵字extends明確標識,在設計時一般沒有爭議性;

實現

指的是一個class類實現interface介面(可以是多個)的功能;實現是類與介面之間最常見的關係;在Java中此類關係通過關鍵字implements明確標識,在設計時一般沒有爭議性;

依賴

可以簡單的理解,就是一個類A使用到了另一個類B,而這種使用關係是具有偶然性的、、臨時性的、非常弱的,但是B類的變化會影響到A;比如某人要過河,需要借用一條船,此時人與船之間的關係就是依賴;表現在程式碼層面,為類B作為引數被類A在某個method方法中使用;

依賴指的是類之間的呼叫關係。類A訪問類B的屬性或方法,或者類A負責例項化類B,那麼就說類A依賴於類B。和關聯關係不同的是,無需在類A中定義類B型別的屬性。例如自行車和打氣筒,自行車通過打氣筒來充氣,那麼就需要呼叫打氣筒的充氣方法。對應的UML圖如下所示:


關聯

他體現的是兩個類、或者類與介面之間語義級別的一種強依賴關係,比如我和我的朋友;這種關係比依賴更強、不存在依賴關係的偶然性、關係也不是臨時性的,一般是長期性的,而且雙方的關係一般是平等的、關聯可以是單向、雙向的;表現在程式碼層面,為被關聯類B以類屬性的形式出現在關聯類A中,也可能是關聯類A引用了一個型別為被關聯類B的全域性變數;

關聯是指兩個類之間存在某種特定的對應關係,例如客戶和訂單,一個訂單隻能屬於某個客戶,一個客戶可能會有多張訂單。根據方向,分為單向和雙向。根據對應的數量分為一對一、一對多、多對多等。對應的UML圖如下所示:


聚合

聚合是關聯關係的一種特例,他體現的是整體與部分、擁有的關係,即has-a的關係,此時整體與部分之間是可分離的,他們可以具有各自的生命週期,部分可以屬於多個整體物件,也可以為多個整體物件共享;比如計算機與CPU、公司與員工的關係等;表現在程式碼層面,和關聯關係是一致的,只能從語義級別來區分;

組合

組合也是關聯關係的一種特例,他體現的是一種contains-a的關係,這種關係比聚合更強,也稱為強聚合;他同樣體現整體與部分間的關係,但此時整體與部分是不可分的,整體的生命週期結束也就意味著部分的生命週期結束;比如你和你的大腦;表現在程式碼層面,和關聯關係是一致的,只能從語義級別來區分;

對於繼承、實現這兩種關係沒多少疑問,他們體現的是一種類與類、或者類與介面間的縱向關係;其他的四者關係則體現的是類與類、或者類與介面間的引用、橫向關係,是比較難區分的,有很多事物間的關係要想準備定位是很難的,前面也提到,這幾種關係都是語義級別的,所以從程式碼層面並不能完全區分各種關係;但總的來說,後幾種關係所表現的強弱程度依次為:組合>聚合>關聯>依賴。

UML類圖依賴關係

http://developer.51cto.com/art/201006/208277.htm

本節和大家一起學習一下UML類圖依賴關係方面的知識,主要包括使用依賴,授權,繫結和抽象依賴等內容。相信通過本節的介紹你對UML類圖依賴關係會有全面的瞭解。

類間的關係:依賴Dependency,泛化Generalization,物件間的結構關係關聯關(Association)系,表示類中規格說明和實現之間關係的實現關係(Realization)

使用依賴Usage

首先看一下UML類圖依賴關係中使用以來。使用:Use,宣告使用一個模型元素需要用到已存在的另一個模型元素,這樣才能正確實現使用者的功能(包括了呼叫、例項化、引數和傳送)

呼叫call:宣告一個類呼叫其他類的操作的方法。

引數parameter:宣告一個操作和它的引數之間的關係

傳送send:宣告訊號傳送者和訊號接收者之間的關係

例項化instantiate:宣告用一個類的方法建立了另一個類的例項


抽象依賴Abstraction:

跟蹤trace:宣告不同模型中的元素之間存在一些連線但不如對映精確

精化refine:宣告具有兩個不同語義層次上的元素之間的對映

派生derive:宣告一個例項可以從另一個例項匯出。抽象依賴介紹完畢,下面再來看一下UML類圖依賴關係中授權依賴。


授權依賴Permission:

訪問access:允許一個包訪問另一個包的內容

匯入import:允許一個包訪問另一個包的內容併為被訪問包的組成部分增加別名

友元friend:允許一個元素訪問另一個元素,不管被訪問的元素是否具有可見性


繫結依賴Binding:

繫結bind:為模板引數指定值,以生成一個新的模型元素。