<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 134,comments - 22,trackbacks - 0

    此文為轉(zhuǎn)載文章:http://zjzkiss.cnblogs.com/
    世界是普遍聯(lián)系的,因此程序世界中的類,也不可能是孤立的。UML為我們定義了它們之間的關(guān)系,就是:依賴、關(guān)聯(lián)、聚合、組合還有泛化。

           泛化關(guān)系比較好理解,就是表示類之間的繼承關(guān)系。容易混淆的是依賴、關(guān)聯(lián)、聚合和組合的關(guān)系。這里做一些甄別:

           1、 依賴和關(guān)聯(lián)的顛倒顛

           在網(wǎng)上查找了一下依賴和關(guān)聯(lián)的區(qū)別,有說(shuō)“關(guān)聯(lián)本身即是一種依賴”,亦有說(shuō)“依賴是一種弱關(guān)聯(lián)”,其實(shí)說(shuō)來(lái)說(shuō)去是一檔子事。依賴和關(guān)聯(lián)都是說(shuō)一個(gè)類用到了另一個(gè)類。其區(qū)別在于一個(gè)是使用,一個(gè)是擁有。

          依賴:具有某種偶然性。比如說(shuō)我要過(guò)河,沒(méi)有橋怎么辦,我就去借來(lái)一條小船渡過(guò)去。我與小船的關(guān)系僅僅是使用(借用)的關(guān)系。表現(xiàn)在代碼上,為依賴的類的某個(gè)方法以被依賴的類作為其參數(shù)?;蛘呤莄lass A 的某個(gè)方法創(chuàng)造了 class B 的實(shí)例抑或?qū)lass B的靜態(tài)方法的調(diào)用。如果A依賴于B,那意味著B的變化可能要求A也發(fā)生變化;

           這是uml圖表示的依賴關(guān)系:
           
    代碼表現(xiàn):

     

    1public class Person{    
    2    /** 劃船 */   
    3    public void oarage (Boat boat){    
    4        boat.oarage();    
    5 }
        
    6}
     
    7


     

    關(guān)聯(lián):有名的客戶和訂單的關(guān)系以及公司和員工的關(guān)系,都是關(guān)聯(lián)關(guān)系。還有就是我和我的單車的例子,他們都是一種“擁有”的關(guān)系。表現(xiàn)在代碼上,就是一個(gè)類包含另一個(gè)類的實(shí)例,通常表現(xiàn)為被關(guān)聯(lián)類以類屬性的形式出現(xiàn)在關(guān)聯(lián)類的類定義中,也可以表現(xiàn)為關(guān)聯(lián)類引用了一個(gè)類型為被關(guān)聯(lián)類的全局變量。關(guān)聯(lián)可以使單向的,也可以使雙向的。

    從網(wǎng)上找到的公司和員工的UML圖和代碼 :


    公司和員工的關(guān)聯(lián)關(guān)系

     1public class Company{    
     2    private Employee employee;    
     3    public Employee getEmployee(){    
     4        return employee;    
     5    }
        
     6    public void setEmployee(Employee employee){    
     7        this.employee=employee;    
     8    }
        
     9    //公司運(yùn)作    
    10    public void run(){    
    11        employee.startWorking();    
    12    }
        
    13}
      
    14


     

    可見依賴于與關(guān)聯(lián)亦有動(dòng)靜之別,關(guān)聯(lián)的類“靜態(tài)”地引用了被關(guān)聯(lián)類的實(shí)例變量,而依賴的偶然性也正說(shuō)明了它的動(dòng)態(tài)性。

          2、 聚合與組合同出而異體

          聚合與組合其實(shí)都是關(guān)聯(lián)的特例,都是整體和部分的關(guān)系。他們的區(qū)別在于聚合的兩個(gè)對(duì)象之間是可分離的,他們具有各自的生命周期。而組合往往表現(xiàn)為一種唇齒相依的關(guān)系。

    聚合:一種容納或曰包含的關(guān)系,如同機(jī)場(chǎng)和飛機(jī),汽車和輪胎的關(guān)系。其實(shí)仔細(xì)想想,前面的公司和員工的關(guān)系也有聚合的味道在里面。

    組合:也可稱之為強(qiáng)聚合,整體和部分是不可分的,整體的生命周期結(jié)束時(shí)也就是部分的生命周期到頭時(shí)。很有名的就是桌子和桌子腿的關(guān)系。

          聚合的UML圖:

    組合的UML圖:




     

    然而,聚合與組合的代碼表現(xiàn)形式是一樣的,都可以表現(xiàn)為以下的形式,它們僅僅具有語(yǔ)義上的區(qū)別。

    網(wǎng)上找到的電腦和CPU的關(guān)系的代碼表現(xiàn):

     

     1public class Computer{    
     2    private CPU cpu;    
     3    public CPU getCPU(){    
     4        return cpu;    
     5    }
        
     6    public void setCPU(CPU cpu){    
     7        this.cpu=cpu;    
     8    }
        
     9    //開啟電腦    
    10    public void start(){    
    11        //cpu運(yùn)作    
    12        cpu.run();    
    13    }
        
    14}
      
    15
    posted on 2010-05-28 14:16 何克勤 閱讀(629) 評(píng)論(0)  編輯  收藏 所屬分類: 設(shè)計(jì)模式

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产精品高清视亚洲精品| 亚洲午夜福利717| 亚洲va成无码人在线观看| 无码日韩精品一区二区三区免费 | 亚洲一线产品二线产品| 免费H网站在线观看的| 亚洲精品自拍视频| 色片在线免费观看| 亚洲欧美日韩国产精品一区| 国内外成人免费视频| 国产精品亚洲专区在线播放| 免费a级毛片网站| 一级毛片免费不卡| 亚洲精品乱码久久久久久自慰| 免费看一区二区三区四区| 亚洲AV综合色区无码另类小说 | 亚洲AV成人影视在线观看| 国产一精品一AV一免费孕妇| 亚洲人成电影网站免费| 四虎影视精品永久免费| 国产精品无码永久免费888| 亚洲成av人影院| 亚洲精品国产免费| 亚洲国产精华液2020| 亚洲国产精品视频| 日本亚洲欧洲免费天堂午夜看片女人员 | 成在线人直播免费视频| 狠狠色伊人亚洲综合成人| 久久免费公开视频| 久久亚洲国产最新网站| 亚洲国产小视频精品久久久三级| 91视频精品全国免费观看| 亚洲国产精品专区| 亚洲福利精品一区二区三区| 中文字幕日本人妻久久久免费| 亚洲成a人不卡在线观看| 免费一级毛片在线播放| 无码免费一区二区三区免费播放 | jizz免费在线影视观看网站| 99ri精品国产亚洲| 四虎永久免费观看|