憨厚生

          ----Java's Slave----
          ***Java's Host***

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            165 隨筆 :: 17 文章 :: 90 評論 :: 0 Trackbacks

          轉 http://www.aygfsteel.com/liuwentao253/archive/2008/08/01/219416.html
          一  :


          二 :





          三 :



          四 :



          五 :




          類與類之間的關系對于理解面向對象具有很重要的作用,存在以下關系:
          (1)泛化(Generalization)   :狗與動物  (空箭頭)
          (2)關聯(Association)       :公司與員工有特定的某種關系 (實線)
          (3)依賴(Dependency)    :人依賴螺絲刀 (虛線箭頭)
          (4)聚合(Aggregation)     : 電腦和CPU,主板 (菱形空間頭)







          詳細展開  :
          一 .泛化(Generalization)
           表示類與類之間的繼承關系,接口與接口之間的繼承關系,或類對接口的實現關系。
           一般泛化的關系是從子類指向父類的:
           父類 父類實例=new 子類()




          1/**
          2* 一個測試類
          3*/

          4public class Demo{    
          5    public void test() {
          6        //老虎的實例 也屬于動物類型 
          7        Animal animal = new Tiger();  
          8    }
              
          9}
           



          1/**
          2*  動物類
          3*/

          4public class Animal{
          5
          6}
              


          1/**
          2* 老虎類 
          3*/

          4public class Tiger extends Animal{
          5
          6}
            


          二 .依賴(Dependency)

          對于兩個相對獨立的對象,當一個對象(螺絲刀)負責構造另一個對象(人)的實例,或者一個對象(人)依賴另一個對象(螺絲刀)的服務時,這兩個對象之間主要體現為依賴關系。

          下面這個例子顯然屬于后者 :人要做一個擰螺絲的動作,他就要依賴于 螺絲刀對象,因為只有螺絲刀對象才提供擰螺絲的服務。



           1/**
           2 * 說明 :人 這個 類 
           3 */

           4public class Person {
           5    /**
           6     * 人擁有的一個  擰螺絲  的  動作 依賴于螺絲刀這個類
           7     * @param screwdriver :螺絲刀類
           8     */

           9     public void screw(Screwdriver screwdriver)
          10        //螺絲刀類提供了擰螺絲這個服務
          11        screwdriver.screw();    
          12    }
            
          13}


          三 .關聯(Association)
          對于兩個相對獨立的對象,當一個對象的實例與另一個對象的一些特定實例存在固定的對應關系時,這兩個對象之間為關聯關系。
          關聯關系是使用實例變量來實現
          比如客戶和訂單,每個訂單對應特定的客戶,每個客戶對應一些特定的訂單;再例如公司和員工,每個公司對應一些特定的員工,每個員工對應一特定的公司




           1/**
           2 * 公司
           3 */

           4public class Company{   
           5    //員工
           6    private Employee employee;
           7
           8    /**
           9     * 公司運作
          10      */

          11    public void run(){    
          12        employee.startWorking();    
          13    }

          14    
          15    public Employee getEmployee(){    
          16        return employee;    
          17    }
              
          18    public void setEmployee(Employee employee){    
          19        this.employee=employee;    
          20    }
            
          21}
           

          四 : 聚合(Aggregation)
          當對象A被加入到對象B中,成為對象B的組成部分時,對象B和對象A之間為聚集關系。聚合是關聯關系的一種,是較強的關聯關系,強調的是整體與部分之間的關系。
          [關聯與聚合的區別]
          (1)關聯關系所涉及的兩個對象是處在同一個層次上的。比如人和自行車就是一種關聯關系,而不是聚合關系,因為人不是由自行車組成的。
          聚合關系涉及的兩個對象處于不平等的層次上,一個代表整體,一個代表部分。比如電腦和它的顯示器、鍵盤、主板以及內存就是聚集關系,因為主板是電腦的組成部分。
          (2)對于具有聚集關系(尤其是強聚集關系)的兩個對象,整體對象會制約它的組成對象的生命周期。部分類的對象不能單獨存在,它的生命周期依賴于整體類的對象的生命周期,當整體消失,部分也就隨之消失。比如張三的電腦被偷了,那么電腦的所有組件也不存在了,除非張三事先把一些電腦的組件(比如硬盤和內存)拆了下來。



           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}
            
          posted on 2009-03-10 17:55 二胡 閱讀(192) 評論(0)  編輯  收藏 所屬分類: 設計相關
          主站蜘蛛池模板: 华亭县| 兴和县| 武强县| 布拖县| 宕昌县| 玛纳斯县| 南和县| 哈巴河县| 温宿县| 拉萨市| 县级市| 三江| 上饶市| 苏尼特左旗| 额尔古纳市| 岳普湖县| 横山县| 会昌县| 孝感市| 同仁县| 涿鹿县| 明水县| 铁力市| 保定市| 陕西省| 康保县| 武邑县| 龙陵县| 习水县| 杂多县| 古田县| 嵊泗县| 休宁县| 灵宝市| 邳州市| 溆浦县| 新巴尔虎右旗| 内丘县| 桑植县| 特克斯县| 湟中县|