posts - 82, comments - 269, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          From: http://blog.csdn.net/cs271080/archive/2008/05/26/2483912.aspx

          結(jié)合關(guān)系(association)是一種靜態(tài)結(jié)構(gòu)上的關(guān)系,換言之,它偏向于數(shù)據(jù)關(guān)系。所以,兩類別之間放置結(jié)合關(guān)系,同時意味著這個關(guān)系必須被保存起來,這也是為何UML類別圖中最常出現(xiàn)的是結(jié)合關(guān)系。比方說,顧客跟訂單之間的關(guān)系,就會使用結(jié)合關(guān)系,因為我們希望系統(tǒng)可以保存兩者之間的關(guān)系。
           
          結(jié)合關(guān)系的兩端通常是平等的,如果要表達(dá)整體-部分(whole-part)意涵時,就可以改用聚合關(guān)系(aggregate,空心菱形),或是組合關(guān)系(composite,實心菱形)。特別注意的是:
           
          1. 聚合與組合都是一種結(jié)合關(guān)系,只是額外具有整體-部分的意涵。
           
          2. 聚合關(guān)系中,整件(whole object)不會擁有部件(part object)的生命周期,所以整件刪除時,部件不會被刪除。再者,多個整件可以共享同一個部件。
           
          3. 組合關(guān)系中,整件擁有部件的生命周期,所以整件刪除時,部件一定會跟著刪除。而且,多個整件不可以同時間共享同一個部件。
           
          至于,實務(wù)上倒底要采用聚合關(guān)系還是組合關(guān)系,不決定于真實,而是決定于企業(yè)規(guī)則。比方說,訂單與細(xì)項之間的關(guān)系,通常采用組合關(guān)系,一旦訂單被刪掉時,底下的細(xì)項也會同時被刪除。但是,這是比較常見的企業(yè)規(guī)則,試想,或許有些領(lǐng)域的交易是可以拆單的,訂單被取消時,原先的細(xì)項可以被并入別的訂單中,若是如此,就適合使用聚合關(guān)系了。
           
          一般化(generalization)是兩類別之間的關(guān)系,不同于上述的結(jié)合、聚合或組合關(guān)系,它是一種分類關(guān)系。或者說,針對某一概念或事物,其個體可區(qū)分為一般類(父類別)與特殊類(子類別)時,兩者之間便可以放置一般化關(guān)系。舉例來說,我們會說無線鼠標(biāo)和有線鼠標(biāo)(它們都是特殊類別/子類別)都是一種鼠標(biāo)(一般類別/父類別)。
           
          依賴關(guān)系又與上列幾種關(guān)系不同,先說明為何許多UML書上會說它是短暫關(guān)系,其實這是相對于結(jié)合(聚合、組合)關(guān)系,前面有我們有提到,結(jié)合關(guān)系是一種靜態(tài)結(jié)構(gòu)關(guān)系,是需要被保存下來的。相較之下,依賴關(guān)系并不需要被儲存起來,所以才會說它是短暫關(guān)系。
           
          最常見的依賴關(guān)系(dependency)是一種使用關(guān)系,譬如顧客類別里頭有一個計算年度交易總額操作好了,在這個操作中必須連到一群當(dāng)年度的交易對象,并且呼叫交易對象取得交易金額進(jìn)行累加,才能計算出年度交易總額。在這個例子中,顧客類別與交易類別就有短暫的依賴關(guān)系。
           
          再度提醒的是,到底使用結(jié)合、聚合、組合、一般化或依賴關(guān)系,無關(guān)乎真實現(xiàn)象,而是與企業(yè)規(guī)則,或者與設(shè)計者想要表達(dá)什么樣的設(shè)計有關(guān),所以兩類別之間具有什么樣的關(guān)系并無固定答案,端看設(shè)計而定。
          主站蜘蛛池模板: 大石桥市| 镇康县| 察隅县| 德庆县| 西林县| 治多县| 邵阳县| 彰化市| 五大连池市| 民和| 婺源县| 嘉义县| 隆化县| 洪湖市| 龙山县| 嵩明县| 洛隆县| 册亨县| 那曲县| 高清| 陈巴尔虎旗| 嘉鱼县| 南昌市| 廊坊市| 葵青区| 武胜县| 远安县| 固阳县| 江华| 汶上县| 万荣县| 津市市| 东乡族自治县| 吉木乃县| 连平县| 清镇市| 大洼县| 古田县| 陆丰市| 平江县| 嵩明县|