類之間的關系
1. 泛化
類之間的關系包括泛化(——|>)、關聯(lián)(——)和依賴(------à)三種。
泛化指的就是繼承關系,它是從父類(超類)的角度來講的。
2. 類之間的關聯(lián)
關聯(lián)的含義:通過屬性來表示一個對象對另一個對象的靜態(tài)依賴關系。
首先,關聯(lián)是對象間的;另外,關聯(lián)是一種靜態(tài)的關系,而不是通過操作。
關聯(lián)的三種表現(xiàn)形式:
連接:—— 最弱的關聯(lián),表示兩個類的對象之間有導航關系,即。
聚合:A◇——B 表示對象A包含一個對象B。
組合:◆—— 強語義耦合,如果整體消失則部分也消失。
3.依賴
依賴表示兩個或多個模型元素之間語義上的關系。它只將模型元素本身連接起來而不需要用一組實例來表達它的意思。它表示了這樣一種情形,提供者的某些變化會要求或指示依賴關系中客戶的變化。
根據(jù)這個定義,關聯(lián)和泛化都是依賴關系,但是它們有更特別的語義,故它們有自己的名字和詳細的語義。我們通常用依賴這個詞來指其他的關系。 表 4–3 列出了 UML 基本模型中的一些依賴關系。
依賴關系
功能
關鍵字
訪問
允許一個包訪問另一個包的內(nèi)容
access
綁定
為
模板參數(shù)指定值,以生成一個新的模型元素
bind
調(diào)用
聲明一個類調(diào)用其他類的操作的方法
call
派生
聲明一個實例可以從另一個實例導出
derive
友員
允許一個元素訪問另一個元素,不管被訪問的元素是否具有可見性
friend
輸入
允許一個包訪問另一個包的內(nèi)容并為被訪問包的組成部分增加別名
import
實例化
關于一個類的方法創(chuàng)建了另一個類的實例的聲明
instantiate
參數(shù)
一個操作和它的參數(shù)之間的關系
parameter
實現(xiàn)
說明和對這個說明的具體實現(xiàn)之間的映射關系
realize
精化
聲明具有兩個不同語義層次上的元素之間的映射
refine
發(fā)送
信號發(fā)送者和信號接收者之間的關系
send
跟蹤
聲明不同模型中的元素之間存在一些連接,但不如映射精確
trace
使用
聲明使用一個模型元素需要用到已存在的另一個模型元素,這樣才能正確實現(xiàn)使用者的功能(包括了調(diào)用、實例化、參數(shù)、發(fā)送)
use
依賴關系種類
依賴用一個從客戶指向提供者的虛箭頭表示,用一個構造型的關鍵字來區(qū)分它的種類,如 圖 4–11 所示。
類之間的關系
類之間的關系是類圖中比較復雜的內(nèi)容。有關聯(lián)、聚合、組合、范化、依賴。
關聯(lián)(associations):是模型元素之間的一種語義聯(lián)系,是類之間的一種很弱的聯(lián)系。關聯(lián)可以有方向,可以是單向關聯(lián),也可以是雙向關聯(lián)??梢越o關聯(lián)加上關聯(lián)名來描述關聯(lián)的作用。關聯(lián)兩端的類也可以以某種角色參與關聯(lián),角色可以具有多重性,表示可以有多少個對象參與關聯(lián)??梢酝ㄟ^關聯(lián)類進一步描述關聯(lián)的屬性、操作以及其他信息。關聯(lián)類通過一條虛線與關聯(lián)連接。對于關聯(lián)可以加上一些約束,以加強關聯(lián)的含義。如下圖所示:
聚合(aggregation):是一種特殊的關聯(lián),聚合表示整體與部分的關系。通常在定義一個整體類后,再去分析這個整體類的組成結構。從而找出一些組成類,該整體類和組成類之間就形成了聚合關系。例如艦隊是由一系列的艦船組成。需求描述中“包含”、“組成”、“分為….部分”等詞常意味著聚合關系。
組合(composition):也是一種特殊的關聯(lián),也表示類之間整體和部分的關系,但是組合關系中部分和整體具有統(tǒng)一的生存期。一旦整體對象不存在,部分對象也將不存在。部分對象與整體對象之間具有共生死的關系。
聚合和組合的區(qū)別:聚合關系是“has-a”關系,組合關系是“contains-a”關系;聚合關系表示整體與部分的關系比較弱,而組合比較強;聚合關系中代表部分事物的對象與代表聚合事物的對象的生存期無關,一旦刪除了聚合對象不一定就刪除了代表部分事物的對象。組合中一旦刪除了組合對象,同時也就刪除了代表部分事物的對象。
泛化(Generalization):定義了一般元素和特殊元素之間的分類關系,類之間的這種泛化關系也就是繼承關系。泛化關系是“a-kind-of”關系,定義一般元素和特殊元素之間的分類關系。下圖是一個泛化關系的例子。
依賴(dependencies):有兩個元素如果修改X的定義可能會導致對Y的定義,則認為Y依賴X。依賴關系可能由各種原因引起,如一個類向另一個類發(fā)送消息,或者一個類是另一個類的數(shù)據(jù)成員類型,或者一個類是另一個類的操作的參數(shù)類型等。有時依賴關系和關聯(lián)關系比較難區(qū)分。如果類A和類B有關聯(lián)關系,它們之間必然有依賴關系。如果兩個類之間有關聯(lián)關系時不用再表示出這兩個類之間的依賴關系。