1. 程式人生 > >UML類圖中的關係(一)

UML類圖中的關係(一)

前言:

   UML中類圖之間的關係有許多種,我們在使用畫圖工具畫圖時常常會因為不瞭解類圖之間的關係而導致類圖畫的不夠準確,不能高效簡單地表達開發需求,學的時候就有點模模糊糊,傻傻分不清楚,現在UML畫圖文件(結合機房收費系統)已經畫完,感覺對於類圖中的關係要搞清楚,類圖用於描述系統中所包含的類以及它們之間的相互關係,幫助人們簡化對系統的理解,它是系統分析和設計階段的重要產物,也是系統編碼和測試的重要模型依據,由此可知,類圖的關係是至關重要的,我們需要用最準確的建模語言來描述。

正文:

   

1.關聯關係(Association)

          關聯關係是類與類之間的連線,它使一個類知道另一個類的屬性和方法,指明瞭事物的物件之間的聯絡,如:教師與學生、僱員與僱主。

          關聯是模型元素間的一種結構聯絡,用於表示一類物件與另一類物件之間有聯絡。

          可以是單向和雙向。

    根據關聯導航方向又分為單向關聯、雙向關聯;使用導航性可以降低類間的耦合度,描述一個物件通過鏈進行導航訪問另一個物件。

    在類圖使用帶箭頭的實線表示,箭頭從使用類指向被關聯的類;

      單向關聯:

          有一個箭頭,表示關聯的方向。表示A與B是單相識關係,A知道B,只有一方(A)可以呼叫另一方(B)的公共屬性,而另一方(B)對這一方(A)一無所知,也就是說只有A知道這種聯絡的存在。

    例如:顧客(Customer)擁有地址(Address),則Customer類與Address類具有單向關聯關係。

       

      雙向關聯:

       多數預設情況下,關聯是雙向的。表示A與B是相知關係,A和B相互瞭解,雙方都知道對方的存在,都可以呼叫對方的公共屬性和方法。

     例如:顧客(Customer)和商品(Product)之間的關係。顧客購買商品並擁有商品,賣出的商品與某個顧客之間相互關聯,他們之間是雙向關聯的關係。


  對關聯進行修飾又有自身關聯和多重性關聯等。

  自身關聯:

    在系統中可能會存在一些類的屬性物件型別為該類本身,這種特殊的關聯關係稱為自身關聯。

   例如:組成一輛汽車的零件類的成員又是零件型別的物件。

   

    多重性關聯(Multiplicity):

     多重性關聯關係又稱為重數性關聯關係,表示一個類的物件與另一個類的物件連線的個數,在UML中多重性關係可以直接在關聯直線上增加一個數字表示與之對應的另一個類的物件的個數。

例如:一個僱主(Employer)可以僱傭一個或多個僱員(Employee),一個僱員可以為不同的僱主服務,因此,一個僱主(Employer)類的物件可以與一個或多個僱員(Employee)類的物件相互關聯,一個僱員(Emplyee)的物件可以與1個或多個僱主(Employer)類的物件相關聯。

   

聚合(Aggregation):

   聚合關係表示部分與整體的關係,但是這種關係較於組合(Composition)來說較弱。部分與整體可以具有不同的生存期,部分是整體的一部分,但是部分在脫離整體之後還可以獨立存在,有自己的屬性和方法。

例如:一臺電腦(Computer)包括顯示器(Moniter)、滑鼠(Mouse)、鍵盤(Keyboard)、主機(Host),一臺電腦可以喝多個滑鼠、多個鍵盤、多個顯示器相搭配,並不是成套存在的,顯示器可以選擇任一鍵盤、滑鼠、主機等組成電腦,當滑鼠、鍵盤、主機、顯示器脫離這臺電腦還可以單獨存在,換言之,它們還具有自己的生命週期, 此時的電腦就不叫電腦了,但是滑鼠還是滑鼠,滑鼠還可以作為另一臺電腦的一部分。

  

組合(Composition):

   組合關係表示的也是整體和部分的關係,關係較為緊密,部分和整體具有共同的生命週期,可以說部分的生命週期是依據整體的生命週期而定的,當整體滅亡的時候部分也就不復存在了,在時間上有很嚴格的約束,先有整體才有個體,是很強的部分和整體關係,部分和整體共存亡。寫到這裡想到一個成語“脣亡齒寒”,它常用來比喻雙方休慼相關,榮辱與共。

例如:人(Person)和頭(Head)的關係就是組合關係,如果人沒了,頭也就沒了,頭是在人存在的基礎上存在的,人和腦袋有共同的生命週期,如果腦袋從人身上分離出去了,頭就無法執行進而失去作用。


 組合(Composition)和聚合(Aggregation)的比較,用一張圖來說明:


2.依賴關係(Denpendency)

依賴關係是一種使用關係,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關係。假設A類的變化引起了B類的變化,則說明B類依賴於A類。

例如:使用者(User)使用網站(Website)完成資訊瀏覽等事情,如果某一天百度網站需要進行網站維護或升級,使用者就不能再使用網站做有關的事情了,網站的變化引起了使用者的變化,說明了使用者依賴於網站。

   

3.關聯(Association)和依賴(Dependency)關係的比較

    (1)依賴是一種弱關聯,只要一個類用到了另一個類,但是和另一個類的關係不是太明顯的時候,就可以把這種關係看成是依賴,表現為一個物件僅僅是呼叫了另一個物件的服務,具有偶然性、臨時性。比如:我和船,我和船本來是沒關係的,但是當我有一次需要過河時,我需要借用一條船來渡我過河,我和船之間就是依賴關係,我依賴船完成過河這件事情。

       關聯是一種結構關係,表現為一個物件能夠獲得另一個物件的例項引用並呼叫它的服務,它們之間存在固定的對應關係,具有必然性。比如:自行車和自行車的主人,每輛自行車對應特定的主人,每輛車自行車屬於特定的主人,每個主人有自己特定的自行車,主人每天騎著自己的自行車出行,自行車的主人和自行車之間就是關聯關係。

   (2)依賴是物件間短暫的一種關係,在這個短暫的關係中,被呼叫類表現為呼叫類的區域性變數、方法的引數、以及呼叫類呼叫被呼叫類的靜態放大,這些情況下,呼叫類和被呼叫類就屬於依賴關係。

            關聯是物件間長期的一種關係, 在這個長期的關係中,被呼叫類表現為呼叫類的引用、或者呼叫類的屬性,這些情況下,呼叫類和被呼叫類之間就屬於關聯關係。

            比如:司機(Driver)和汽車(Car)

            用依賴關係來表示:類Driver中存在一個屬性Car car

           

           用關聯關係來表示:類Car 的例項可能存在於某個方法呼叫的引數中,或某個方法的區域性變數中

           

  4.幾種關係比較

           這幾種關係所表現的強弱程度依次為:組合>聚合>關聯>依賴

 總結:

        類圖是其他幾種圖的基礎,正確表達出類與類之間的關係,不能只用依賴關係,能用組合就不用聚合,能用聚合就不用一般關聯,能用一般關聯就不要用依賴。這對於後續開發工作的進行非常重要。

       如有不合適之處,請大家多多指教,歡迎留言~~