posts - 19, comments - 53, trackbacks - 0, articles - 283
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          類之間關(guān)系的層次

          Posted on 2009-07-12 23:13 Gavin.lee 閱讀(569) 評(píng)論(0)  編輯  收藏 所屬分類: 類的設(shè)計(jì)

          1.首先類之間的關(guān)系從宏觀上可以分為:關(guān)聯(lián)、依賴、繼承,而其中關(guān)聯(lián)又有兩種特例:聚合和組合,不過在UML2.X中聚合和組合合成一種關(guān)系了。

          2.從使用的頻率來看,關(guān)聯(lián)(包括聚合和組合)關(guān)系是使用最為廣泛的;其次是依賴和繼承

          3.關(guān)聯(lián)和依賴的區(qū)別:
          A:從類之間關(guān)系的強(qiáng)弱程度來分,關(guān)聯(lián)表示類之間的很強(qiáng)的關(guān)系;依賴表示類之間的較弱的關(guān)系;

          B:從類之間關(guān)系的時(shí)間角度來分,關(guān)聯(lián)表示類之間的“持久”關(guān)系,這種關(guān)系一般表示一種重要的業(yè)務(wù)之間的關(guān)系,需要保存的,或者說需要“持久化”的,或者說需要保存到數(shù)據(jù)庫中的。比如學(xué)生管理系統(tǒng)中的Student類和Class(班級(jí))類,一個(gè)Student對(duì)象屬于哪個(gè)Class是一個(gè)重要的業(yè)務(wù)關(guān)系,如果這種關(guān)系不保存,系統(tǒng)就無法管理。另外,依賴表示類之間的是一種“臨時(shí)、短暫”關(guān)系,這種關(guān)系是不需要保存的,比如Student類和StuEditScreen(學(xué)生登錄界面)類之間就是一種依賴關(guān)系,StuEditScreen類依賴Student類,依賴Student對(duì)象的信息來顯示編輯學(xué)生信息。

          C:設(shè)計(jì)類之間的關(guān)系是遵循的原則:首先判斷類之間是否是一種“關(guān)聯(lián)”關(guān)系,若不是再判斷是否是“依賴關(guān)系”,一般情況下若不是關(guān)聯(lián),就是依賴關(guān)系

          D:依賴一般情況下是以下幾種情況之一:a、ClassA中某個(gè)方法的參數(shù)類型是ClassB;這種情況成為耦合;b、ClassA中某個(gè)方法的參數(shù)類型是ClassB的一個(gè)屬性;這種情況成為緊耦合;c、ClassA中某個(gè)方法的實(shí)現(xiàn)實(shí)例化ClassB;d、ClassA中某個(gè)方法的返回值的類型是ClassB;如果出現(xiàn)了上述四種情況之一,兩個(gè)類很有可能就是“依賴”關(guān)系。

          E:依賴關(guān)系(Dependency):是類與類之間的連接,依賴總是單向的。依賴關(guān)系代表一個(gè)類依賴于另一個(gè)類的定義。下面的例子中class A 依賴與class B、C、D。

              public class A{   
                  
          public B getB(C c, D d){   
                  E e 
          = new E();   
                  B b 
          = new B(c, d, e);   
                  }
             
              }
           


          F:關(guān)聯(lián)是一種結(jié)構(gòu)關(guān)系,說明一個(gè)事物的對(duì)象與另一個(gè)事物的對(duì)象相聯(lián)系。給定一個(gè)連接兩各類的關(guān)聯(lián),可以從一個(gè)類的對(duì)象導(dǎo)航到另一個(gè)類的對(duì)象。
          關(guān)聯(lián)可以有方向,即導(dǎo)航。一般不作說明的時(shí)候,導(dǎo)航是雙向的,不需要在線上標(biāo)出箭頭。大部分情況下導(dǎo)航是單向的,可以加一個(gè)箭頭表示。關(guān)聯(lián)在代碼中一般表示為屬性(成員變量),例如下面例子中 class A與B關(guān)聯(lián)
           
          public class A{  
              private B b;  
          }  
          如果B也關(guān)聯(lián)到A,那么它們就是雙向的關(guān)聯(lián)。
          public class B{  
              private A a;  


          G:聚合關(guān)系(Aggregation):是關(guān)聯(lián)關(guān)系的一種,是強(qiáng)的關(guān)聯(lián)關(guān)系。聚合是整體與個(gè)體之間的關(guān)系。如汽車類與引摯類,輪胎類之間的關(guān)系就是整體與個(gè)體的關(guān)系。
          與關(guān)聯(lián)關(guān)系一樣,聚合關(guān)系也是通過實(shí)例變量來實(shí)現(xiàn)的。

          ***關(guān)聯(lián)關(guān)系所涉及的兩個(gè)類是處于同一層次上的,而在聚合關(guān)系中,兩個(gè)類處在不平等的層次上的,一個(gè)代表整體,一個(gè)代表部分。(關(guān)聯(lián)與聚合僅僅從語法上是區(qū)分不開的,需要察所涉及的類之間的邏輯關(guān)系。)

          H:組成關(guān)系(Composition):是關(guān)聯(lián)關(guān)系的一種,是比聚合關(guān)系強(qiáng)的關(guān)系。它要求普通的聚合關(guān)系中代表的對(duì)象負(fù)責(zé)代表部分的對(duì)象的生命周期,合成關(guān)系是不能共享的。
          代表整體的對(duì)象需要負(fù)責(zé)保持對(duì)象的存活,在一些情況下負(fù)責(zé)將代表部分的對(duì)象湮滅掉。代表整體的對(duì)象可以將代表部分的對(duì)象傳遞給另一個(gè)對(duì)象,由后者負(fù)責(zé)此對(duì)象的生命周期。換言之,

          *******代表部分的對(duì)象在每一個(gè)時(shí)刻只能與一個(gè)對(duì)象發(fā)生合成關(guān)系,由后者排它的負(fù)責(zé)其生命周期。


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 桂阳县| 伊宁县| 伊金霍洛旗| 台东县| 垣曲县| 邓州市| 华亭县| 三门县| 蒙阴县| 株洲市| 德江县| 盐池县| 临夏市| 股票| 淮阳县| 常熟市| 鄢陵县| 兴安盟| 和龙市| 章丘市| 莱阳市| 容城县| 博白县| 颍上县| 萨嘎县| 江永县| 墨江| 电白县| 和政县| 鄂托克旗| 桂东县| 壶关县| 新密市| 德钦县| 佛教| 深水埗区| 商丘市| 界首市| 石狮市| 射阳县| 庄河市|