<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

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

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

           1、 依賴和關聯的顛倒顛

           在網上查找了一下依賴和關聯的區別,有說“關聯本身即是一種依賴”,亦有說“依賴是一種弱關聯”,其實說來說去是一檔子事。依賴和關聯都是說一個類用到了另一個類。其區別在于一個是使用,一個是擁有。

          依賴:具有某種偶然性。比如說我要過河,沒有橋怎么辦,我就去借來一條小船渡過去。我與小船的關系僅僅是使用(借用)的關系。表現在代碼上,為依賴的類的某個方法以被依賴的類作為其參數。或者是class A 的某個方法創造了 class B 的實例抑或對class B的靜態方法的調用。如果A依賴于B,那意味著B的變化可能要求A也發生變化;

           這是uml圖表示的依賴關系:
           
    代碼表現:

     

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


     

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

    從網上找到的公司和員工的UML圖和代碼 :


    公司和員工的關聯關系

     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    //公司運作    
    10    public void run(){    
    11        employee.startWorking();    
    12    }
        
    13}
      
    14


     

    可見依賴于與關聯亦有動靜之別,關聯的類“靜態”地引用了被關聯類的實例變量,而依賴的偶然性也正說明了它的動態性。

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

          聚合與組合其實都是關聯的特例,都是整體和部分的關系。他們的區別在于聚合的兩個對象之間是可分離的,他們具有各自的生命周期。而組合往往表現為一種唇齒相依的關系。

    聚合:一種容納或曰包含的關系,如同機場和飛機,汽車和輪胎的關系。其實仔細想想,前面的公司和員工的關系也有聚合的味道在里面。

    組合:也可稱之為強聚合,整體和部分是不可分的,整體的生命周期結束時也就是部分的生命周期到頭時。很有名的就是桌子和桌子腿的關系。

          聚合的UML圖:

    組合的UML圖:




     

    然而,聚合與組合的代碼表現形式是一樣的,都可以表現為以下的形式,它們僅僅具有語義上的區別。

    網上找到的電腦和CPU的關系的代碼表現:

     

     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運作    
    12        cpu.run();    
    13    }
        
    14}
      
    15
    posted on 2010-05-28 14:16 何克勤 閱讀(620) 評論(0)  編輯  收藏 所屬分類: 設計模式

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产亚洲精品资在线| 四虎影视在线永久免费看黄| 国产亚洲精AA在线观看SEE| 有码人妻在线免费看片| 亚洲情侣偷拍精品| 中文字幕的电影免费网站| 亚洲国产成人五月综合网 | 一区二区免费在线观看| 亚洲国产精品一区二区三区久久| 色吊丝免费观看网站| 亚洲AV无码一区二区三区国产 | 中文字幕无码视频手机免费看| 亚洲专区中文字幕| 欧洲美熟女乱又伦免费视频| 免费人成在线观看播放a| 国产成人精品曰本亚洲79ren| a在线视频免费观看在线视频三区 a毛片成人免费全部播放 | 精品亚洲综合在线第一区| 三年片在线观看免费大全电影 | 亚洲欧美国产国产一区二区三区| 精品国产麻豆免费网站| 一个人看的免费视频www在线高清动漫| 国产日产亚洲系列最新| 91精品国产免费入口| 亚洲色欲色欲www在线播放| 免费一区二区视频| 免费福利电影在线观看| 亚洲最大的黄色网| 亚洲国产综合无码一区二区二三区| 很黄很污的网站免费| 亚洲人成小说网站色| 国产偷国产偷亚洲高清日韩 | 国产婷婷高清在线观看免费| 国产VA免费精品高清在线| 337p欧洲亚洲大胆艺术| 日本不卡在线观看免费v| 大地影院MV在线观看视频免费| 亚洲人成网站看在线播放| 中文字幕亚洲综合久久菠萝蜜| 国产啪精品视频网免费| 三级黄色免费观看|