【關(guān)聯(lián)關(guān)系】
===================================================================
關(guān)聯(lián)關(guān)系是一種最簡單、最抽象的對象間關(guān)系描述。它只是描述了對象A于對象B之間存在一種業(yè)務(wù)上、概念上的邏輯關(guān)系,但是關(guān)聯(lián)關(guān)系的雙方不包含對方的屬性。
【聚合關(guān)系】
===================================================================
聚合關(guān)系是一種特殊的關(guān)聯(lián)關(guān)系,除了具備關(guān)聯(lián)關(guān)系的特性之外,還包括了以下的一些規(guī)則:
A. 對象A和對象B之間存在一種包含的關(guān)系
B. 對象A和對象B之間必有一方為“容器”,另外一方為“元素”。即“whole-part”關(guān)系
C. 容器方和元素方對象的生命周期是彼此獨立的,并不依賴于對方而存在,也就是說是一
種“松散”的關(guān)聯(lián)。容器和元素可以被獨立創(chuàng)建、銷毀,容器不存在了不影響元素的存在,元素不存在了容器可以依然存在
D. 容器方可以沒有元素,也可以有一個至多個元素
E. 元素方可以“被包含于”一個容器,也可以“被包含于”多個容器
F. 向容器添加元素,或者從容器中移除元素并不影響容器
【組合關(guān)系】
===================================================================
組合關(guān)系是一種特殊的聚合關(guān)系,除了具備關(guān)聯(lián)關(guān)系、聚合關(guān)系的特性之外,還包括了以下的一些規(guī)則:
A. 容器方和元素方對象的生命周期是互相依賴的。即元素依賴于容器而存在,一旦容器不存在了那么元素也就不可能存在。容器必須優(yōu)先于元素而被創(chuàng)建,元素必須優(yōu)先于容器而被銷毀。
B. 元素方只能“被包含于”一個容器
【舉例分析】
===================================================================
A. 關(guān)聯(lián)關(guān)系的例子分析:
學(xué)生 ------------- 成績
學(xué)生與成績之間就是一個關(guān)聯(lián)關(guān)系,你不能把學(xué)生的屬性寫到成績對象中去,同理不能把成績的屬性寫到學(xué)生對象中去,但兩者之間確實存在一種業(yè)務(wù)上的聯(lián)系,而且是固定的
B. 聚合關(guān)系的例子分析:
班級 ------------- 學(xué)生 / 汽車 ------------- 配件
班級與學(xué)生,汽車與配件之間的關(guān)系就是一個聚合關(guān)系。首先一個班級可以包含零至多個學(xué)生,一部汽車可以包含零(未組裝之前)至多個配件。
其次學(xué)生可以先被創(chuàng)建,然后創(chuàng)建班級,再向班級中添加,移除學(xué)生。配件可以先被創(chuàng)建并保存到倉庫,然后再組裝成汽車。在班級,汽車對象沒有形成之前,學(xué)生與配件的對
象可以已經(jīng)存在(即容器和元素對象的生命周期是獨立的)
C. 組合關(guān)系的例子分析:
基金賬戶 ------------- 單筆交易
基金賬戶與單筆交易就是一個組合關(guān)系。首先單筆交易必須依賴于基金賬戶而存在,也就是說我們必須先創(chuàng)建基金賬戶這個“容器方”,之后才能夠創(chuàng)建單筆交易這個“元素方”,然后再把單筆交易掛到(添加)基金賬戶下。沒有基金賬戶預(yù)先存在,我們不能執(zhí)行單筆交易。我們不能先創(chuàng)建單筆交易,再創(chuàng)建基金賬戶,然后再掛靠交易。
這一點就不同于上面的班級與學(xué)生,汽車與配件的存在關(guān)系了。
其次單筆交易只能掛靠在某一個特定的基金賬戶下,也就是說元素方只能“被包含于一個”容器
【延伸思考】
===================================================================
在對象和對象之間的關(guān)系中,有時會提到“依賴”關(guān)系,即對象A依賴于對象B而完成某項操作,那么這種關(guān)系是不是也屬于“關(guān)聯(lián)關(guān)系”呢?
個人認為這不屬于一種“關(guān)聯(lián)關(guān)系”。因為上面我們提到的三種關(guān)系中,每一種關(guān)系除了是固定的關(guān)系之外,還有一個重要的特點就是這些關(guān)系是需要“被持久化,被保存”起來的。
而依賴關(guān)系只是對象和對象之間的引用(或稱調(diào)用)關(guān)系,這種關(guān)系只發(fā)生在運行期間而不是業(yè)務(wù)上,概念上的聯(lián)系,并不需要被保存。所以“依賴關(guān)系”并不屬于UML中的對象關(guān)系。
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。