著作權聲明:轉載時請以超連結形式標明文章原始出處和作者資訊及本聲明
http://jeffrey.blogbus.com/logs/67361.html
第十章 進階關係
第二章提到了UML中最重要的四種關係分別是dependency、association、generalization、
realization,在第五章也進一步學習了dependency、association和generalization。而這一章講述的是這幾種
關係的進階特性。
①dependency
dependency表明一個事物使用了另一個事物,在UML中定義了17種可用於dependency的構造型,這17種構造型可被分為6組,下面就詳細說明這17種構造型:
⑴可應用到類圖中的類和對象間的依賴關係
Ⅰ、綁定(bind)
表明源對目標模板使用給定的實際參數進行執行個體化,常應用於模板類。(模板類的概念不瞭解)
Ⅱ、匯出(derive)
表明可以從目標計算出源。當對兩個屬性或關聯之間的關係建模時,如果其中一個屬性(關聯)可以匯出另一個屬性(關聯),就可以使用derive構造型。例如生日和年齡。
Ⅲ、友元(friend)
表明源對目標的特定可見度。常用於C++中的友元類建立的關係建模。
Ⅳ、的執行個體(instanceOf)
表明來源物件時目標類元的一個執行個體。
Ⅴ、執行個體化(instantiate)
表明源建立目標的執行個體。
Ⅵ、強型別(powertype)
表明目標是源的強型別。(強型別是一個類元,其對象都是一個給定父類的子類)當對覆蓋其他類的類建模時,例如資料庫建模時可能碰到這種依賴關係。
Ⅶ、精化(refine)
表明源比目標處於更精細的抽象程度上。當對本質上相同但位於不同抽象層次的類建模時,要用精化。
Ⅷ、使用(use)
表明源元素的語義依賴於目標元素的公用部分的語義。當要顯式地把一個依賴標記為使用關係時,就可以應用使用(use)。
⑵可應用到包之間的依賴關係
Ⅰ、訪問(access)
表明源包有權引用目標包中的元素。
Ⅱ、引入(import)
是一種訪問,它表明把目標包的公用內容加入到源包的命名空間。
⑶可應用到用況之間的依賴關係
Ⅰ、延伸(extend)
表明目標用況延伸了源用況的行為。
Ⅱ、包含(include)
表明源用況在其指定的位置上顯式地合并了另一個用況的行為。
⑷可應用到對象之間的依賴關係
Ⅰ、變成(become)
描述了目標對象與來源物件是相同的,但在後續的時間點上屬性值、狀態或角色可能會不同。
Ⅱ、調用(call)
表明源操作調用目標操作。
Ⅲ、複製(copy)
表明目標對象是來源物件的精確複製,但目標對象是獨立的。
⑸可應用到狀態機器的語境中的依賴關係
發送(send)
表明源操作向目標發送事件。
⑹可應用到把系統的元素組織成子系統和模型的語境中的依賴關係
跟蹤(trace)
表明目標是源的曆史上祖先。
②generalization
generalization表明了一般/特殊的事物之間的關係。在程式中體現為父類/子類,在UML中定義了應用到泛化關係上的一個構造型和4個約束。
一個構造型:
實現(implementation)
表明子類繼承父類的實現,但既不公布也不支援父類的介面,因此它是違背可替換性的。在C++中私人繼承建模時用到這種構造型。
4個約束:
Ⅰ、完全(complete)
表明已經在模型中給出了泛化關係的所有子類,不允許再有更多的子類。
Ⅱ、不完全(incomplete)
表明沒有完全給出所有子類,可以在增加子類。
Ⅲ、互斥(disjoint)
表明父類的對象最多以給定的子類中的一個子類作為類型。
Ⅳ、重疊(overlapping)
表明父類的對象可能以給定的子類中的一個以上子類作為類型。
③association
是一種結構關係,它詳述一個事物的對象與另一個事物的對象相聯絡。關聯的4種基本修飾:名稱、角色、多重性和彙總,在第二章有描述。對於它的進階用法,從下面幾個方面描述:
Ⅰ、導航
關聯的導航預設是雙向的,但有些情況下是單嚮導航的,例如user和password,只能從user匯出password,而不能從password匯出user,這樣的導航需要使用箭頭標出其單向性。
Ⅱ、可見度
可見度用於限制關聯對於外部對象的可見度。例如password是user私人的,對group而言,password是不可見的。
Ⅲ、限定
給定關聯一端的對象,識別另一端的對象或對象集,可以使用限定來描述。
Ⅳ、介面說明符
這個說不清楚,可以看書中的例子。
Ⅴ、組合
組合是彙總的一種特殊情況,它具有強的擁有關係,整體與部分的生命週期是一致的。一個對象在一個時間內只能是一個組合的一部分。
Ⅵ、關聯類別
是關聯關係的兩端的對象之間的產生關係的類的描述。看書更明白意思。
Ⅶ、約束
UML中定義了5中可以用於關聯關係的約束:
⒈隱式(implicit)
表示關係不是顯式的,而僅是概念性的。例如兩個父類有關聯關係,那麼這兩個父類的子類之間就可以有隱式的關聯關係。
⒉有序(ordered)
表明關聯的一端的對象是顯式有序的。
⒊可變(changeabel)
可以自由增加、移動和改變對象之間的鏈。
⒋只增(addonly)
可以從關聯另一端的一個對象增加新的鏈。
⒌凍結(frozen)
一旦關聯另一端的對象增加了一個鏈,就不能對它修改或刪除。
④realization
realization是dependency和generalization在語義上的一些交叉,應用於介面語境和協作語境中。