在uml中,事物之間相互聯絡的方式(無論是邏輯上的還是物理上的)都被建立為關係。在物件導向的建模中,有3種最重要的關係:依賴、關聯和泛化。
依賴(dependency)是使用關係。例如,水管依賴熱水器,對它們所運送的水進行加熱。
關聯(association)是例項之間的結構關係。例如,房間是由牆和一些其他事物組成的,牆上可以鑲嵌門和窗,管道可以穿過牆體。
泛化(generalization)把一般類連線到較為特殊的類,也稱為超類/子類關係或父/子關係。例如,觀景窗是一種帶有固定的大窗格的窗戶,庭院窗是一種帶有向兩邊開的窗格的窗戶。
這3種關係覆蓋了大部分事物之間相互協作的重要方式。顯然,這3種關係也能很好地對映到大多數物件導向程式設計所提供的連線物件的方式。
術語和概念
關係(relationship)是事物之間的聯絡。在物件導向的建模中,最重要的3中關係是依賴、泛化和關聯。在圖形上,把關係畫成一條線,並用不同的線區別關係的種類。
依賴
依賴(dependency)是一種使用關係,說明乙個事物(如類window)使用另乙個事物(如類event)的資訊和服務,但反之未必。在圖形上,把依賴畫成一條有向的虛線,指向被依賴的事物。當要指明乙個事物使用另乙個事物時,就選用依賴。
在大多數情況下,在類與類之間用依賴指明乙個類使用另乙個類的操作,或者它使用其他類所定義的變數和參量。這的確是一種使用關係,如果被使用的類發生變化,那麼另乙個類的操作也會受到影響,因為這個被使用的類此時可能表現出不同的介面或行為。在uml中,也可以在很多其他的事物之間建立依賴,特別是註解和包。
泛化
泛化(generalization)是一般事務(稱為超類或父類)和該事物的較為特殊的種類(稱為子類或子)之間的關係。有時也稱泛化為「is-a-kind「關係:乙個事物(如類baywindow)是更一般的事物(如類window)的「乙個種類」。泛化意味著子類的物件可以被用在父類的物件可能出現的任何地方,反之則不然。換句話說,泛化意味著子類可以替換父類的宣告。子類繼承父類的特性,特別是父類的屬性和操作。通常(但不總是),子類除了具有父類的屬性和操作外,還具有更多的屬性和操作。若子類的乙個操作的實現覆蓋了父類的同樣乙個操作的實現,則這種情況稱為多型性。其共同之處是,兩個操作必須具有相同的特徵標記(相同的名字和引數)。在圖形上,把泛化畫成一條帶有空心三角形大箭頭的有向實現,指向父類。當要表示父/子關係時,就使用泛化。
乙個類可以有0個、1個或多個父類。沒有父類並且最少有乙個子類的類稱為根類或基類;沒有子類的類稱為葉子類。如果乙個類只有乙個父類,則說它使用了單繼承;如果乙個類有多個父類,則說它使用了多繼承。
在大多數情況下,用類或介面之間的泛化來表明繼承關係。在uml中,也可以在其他的類目之間建立泛化,比如結點之間。
關聯
關聯(association)是一種結構關係,它指明乙個事物的物件與另乙個事物的物件間的聯絡。給定乙個連線兩個類的關係,可以從乙個類的物件聯絡到另乙個類的物件。關聯的兩端都連到同乙個類是完全合法的。這意味著,從類的給定物件能連線到該類的其他物件。恰好連線兩個類的關聯叫作二元關聯。儘管不太常見,但可以有連線多於兩個類的關聯,這種關聯叫作n元關聯。在圖形上,把關聯畫成一條連線相同類或不同類的實線。當要表示結構關係時,就使用關聯。
除了這種基本形式外,還有4種應用於關聯的修飾。
名稱關聯可以有乙個名稱,用以描述該關係的性質。為了消除名稱的歧義,可提供乙個指出讀名稱方向的三角形,給名稱乙個方向。
角色當乙個類參與了乙個關聯時,它就在這個關係中扮演了乙個特定的角色。角色是關聯中靠近它的一端的類對另乙個端的類呈現的面孔。可以顯示地命名乙個類在關聯中所扮演的角色。把關聯端點扮演的角色稱為端點名(在uml中稱為角色名)。
多重性關聯表示了物件間的結構關係。在很多建模問題中,說明乙個關聯的例項中有多少個相互連線的物件是很重要的。這個」多少「被稱為關聯角色的多重性,它表示乙個整數的範圍,指明一組相關物件的可能個數。將多重性寫成乙個表示取值範圍的表示式,其最大值和最小值可以相同,用兩個圓點把它們分開。宣告了關聯的一端的多重性,這說明:對於關聯另一端的類的每個物件,本端的類可能有多少個物件出現。物件數目必須是在給定的範圍內。可以精確地表示多重性為:乙個(1)、零個或乙個(0..1)、多個(0..*)、乙個或多個(1..*)。可以給出它的乙個整數範圍(如2..5),甚至可以精確地指定多重性為乙個數值(如3與3..3等價)。
下圖所示,每個公司物件可以僱傭乙個或多個人員物件(多重性為1..*);每個人員物件受僱於0個或多個公司物件(多重性為*,它等價於0..*)。
聚合兩個類之間的簡單關聯表示了兩個同等地位類之間的結構關係,這意味著這兩個類在概念上是同級別的,乙個類並不比另乙個類更重要。有時要對」整體/部分「關係建模,其中乙個類描述了乙個較大的事物(」整體「),它由較小的事物(」部分「)組成。這種關係稱為聚合,它描述了」has-a「關係,意思是整體物件擁有部分物件。其實聚合只是一種特殊的關聯,它被表示為在整體的一端用乙個空心菱形修飾的簡單關聯。
其他特徵
簡單而未加修飾的依賴、泛化以及帶有名稱、多重性和角色的關聯是建立抽象時所需要的最常見的特徵。事實上,對於建立的大多數模型,這3種關係的基本形式足以表達關係的最重要的語義。然而,有時需要視覺化或詳述其他特徵,如組合聚合、導航、判別式關聯類、特殊種類的依賴和泛化。這些以及很多其他的特徵都可以用uml表達,但它們都被稱為高階概念處理。
提示和技巧
在用uml對關係建模時,要遵循如下策略:
在用uml繪製關係時,要遵循如下策略:
Terrain 讀書筆記 Chapter 5
chapter 5.fundamental 3d objects 經過了漫長的前戲 rpwt 終於到了講核心技術的時候了。這是最後一章基礎課了 基礎課不是在part i的時候都講完了麼?講的就是3d裡面非常基礎的乙個話題 空間分割,果然是基礎。空間分割就是把world分成若干個部分,然後確定出哪些部...
mysql學習筆記 Chapter5 常
mysql學習筆記 chapter5 常用函式 王小安 學習 mysql資料庫開發管理與維護 筆記,備以後學習檢視。mysql有豐富的字串函式,其中常用的有 字串函式 日期函式 數值函式。一 字串常用函式 1 cancat s1,s2,sn 字串連線,連線 s1,s2.sn為乙個字串 2 inser...
chapter5 路徑管理
path類 改變檔案的字尾 path.changeextension 獲得檔案字尾名稱 path.getextension 獲得檔名稱 path.getfilename 獲得相對路徑對應的絕對路徑 path.getfullpath 源 using system using system.collec...