91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

UML類圖五種關系與代碼的對應關系

發布時間:2020-08-08 12:37:11 來源:ITPUB博客 閱讀:256 作者:634828354 欄目:建站服務器

五種關系的耦合強弱比較:依賴<關聯<聚合<組合<繼承
一、依賴關系:

        1.說明:虛線+剪頭,可描述為Use a        
         
依賴是類的5種關系中耦合最小的一種關系,因為在生成代碼的時候,這兩個關系類都不會增加屬性
        2.依賴關系圖與代碼的對應關系
        UML類圖五種關系與代碼的對應關系
  1. Public class Animal()  
  2. {  
  3.         Public Animal(){}  
  4. }  
  5.   
  6. Public class Water()  
  7. {  
  8.         public Water(){}  
  9. }  
        可以看到生成的兩個類的代碼中什么都沒有添加
        3.思考
        Animal類是如何使用Water類的呢?或者說依賴關系到底是如何體現的呢?

  • water類是全局的,則animal類可以調用它
  • water類是animal類的某個方法中的變量,則animal類可以調用它
  1. Public class Animal {  
  2.       Public void Grownup() {  
  3.                Water water =null;  
  4.       }  
  5. }  
        注意1:water類的生命后期,它是當animal類的grounUp類方法被調用時才被實例化
        注意2:持有water類的是animal的一個方法而不是animal類
  • water類是作為animal類中某個方法的參數或者返回值
  1. Public Animal {  
  2.    Public Water Grownup(Waterwater) {  
  3.               return null;  
  4.       }  
  5. }  
二、關聯關系
        1.說明:
        實線+箭頭 可以描述為has a
        關聯關系用實線,表示類之間的耦合度比依賴強。在生成代碼的時候,關聯關系的類會增加屬性
        2.關聯關系和代碼的對應關系
        
UML類圖五種關系與代碼的對應關系        
  1. Public class Water {  
  2.      public Climate m_Climate;  
  3.      public Water(){}  
  4. }  
  5.    
  6. Public class Climate {  
  7.      public Climate() {}  
  8. }  
        可見,生成的代碼中,water類的屬性中增加了Climate類
        3.關聯的種類
        關聯有單向關聯和雙向關聯
        單向關聯:water類和Climate類單向關聯,則water類稱為源類,Climate類稱為目標類。源類了解目標類的所有屬性和方法,但目標類并不了解類的信息
        UML類圖五種關系與代碼的對應關系
        雙向關聯:源類和目標類互相了解彼此的信息,如將water類和Climate類之間改為雙向關聯
        UML類圖五種關系與代碼的對應關系        
  1. Public class Water {  
  2.     public Climate m_Climate;  
  3.     public Water(){}  
  4. }  
  5. Public class Climate {  
  6.     public Water m_Water;  
  7.     public Climate() {}  
        可見,生成的代碼中,兩個類的屬性都添加了
        4.思考:
        依賴關聯和關聯關系的區別在哪里?
        (1)從類的屬性是否增加的角度看:
            發生依賴關系的兩個類都不會增加屬性,其中的一個類作為另一個類的方法的參數或者返回值,或者是某個方法的變量而已。
            發生關聯關系的兩個類,其中的一個類稱為另一個類的屬性,而屬性是一種更為緊密的耦合,更為長久的持有關系。
        (2)從關系的生命周期角度看:
            依賴關系是僅當類的方法被調用時而產生的,伴隨著方法的結束而結束了。
            關聯關系是當類實例化的時候即產生,當類銷毀的時候,關系結束。相對依賴來說,關聯關系的生存周期更長
        5.關聯關系的細化:聚合和組合
        (1)聚合:用空心菱形+箭頭
                組合:用實心菱形+箭頭,類之間的耦合比聚合強
        (2)聚合和組合生成的代碼
            UML類圖五種關系與代碼的對應關系        
            (PS:此圖表明雁群類是由大雁類聚合而成)
  1. Public class GooseGroup {  
  2.     public Goose goose;  
  3.     Public GooseGroup(Goose goose) {  
  4.               this.goose = goose;  
  5.        }  
  6. }  

        UML類圖五種關系與代碼的對應關系
            (PS:此圖表明大雁類是由翅膀類組合而成)            
  1. Public class Goose {  
  2.    public Wings wings;  
  3.    public Goose() {  
  4.        wings = new Wings();  
  5.     }  
  6. }  
        (3)構造函數不同
             聚合類的構造函數中包含了另外一個類作為參數,GooseGroup的構造函數中用到Goose作為參數傳遞進來,Goose可以脫離GooseGroup獨立存在
            組合類的構造函數中包含了一個類的實例化,表明大雁類在實例化之前,一定要先實例化Wings類,這兩個類緊密的耦合在一起,同生共滅。wings類是不可以脫離大雁類獨立存在的
       (4)信息的封裝性不同
            聚合關系中,客戶端可以同時了解GooseGroup和大雁類,因為他們是獨立的
            在組合關系中,客戶端只認識大雁類,根本就不知道wings類的存在,因為wings類被封裝在Goose類中
三、泛化
    1.說明:
        實線+箭頭 可描述為is a
        泛化也成繼承,子類將繼承父類的所有屬性和方法,并且可以根據需要對父類進行擴展
    2.泛化關系與代碼的對應關系
        UML類圖五種關系與代碼的對應關系
        PS:Bird類繼承了animal類
  1. Class  Bird :Animal{  
  2. }  
    3.思考:
        (1)子類繼承父類,真的是繼承了父類的所有屬性和方法嗎?
            子類確實繼承了父類的所有屬性和方法,只是對于父類的私有類型成員沒有訪問權限
        (2)泛化和繼承是一回事嗎?
            子類繼承父類,父類泛化子類,不同角度來解釋而已
        (3)為什么藥多用組合少用繼承?
            組合和繼承各有優缺點。
            類繼承是在編譯時刻靜態定義的,且可直接使用,類繼承可以較方便的改變父類的實現,但是類繼承也有一些不之處。首先,因為繼承在編譯時刻就定義了,所以無法再運行時刻改變父類繼承的實現。更糟的是,父類通常至少定義了子類的部分行為,父類的任何改變都可以影響子類的行為,如果繼承下來的實現不適合解決新的問題,則父類必須重寫或被其他更適合的替換。這種依賴關系限制了靈活性并最終限制了復用性。
            組合是通過獲取對其他對象的引用而在運行時刻動態定義的,由于組合要求具有良好定義的接口,而且,對象只能通過接口訪問,所以我們并不破壞封裝性;只要類型一致,運行時刻還可以用一個對象來替代另一個對象;更進一步,因為對象的實現是基于接口寫的,所以實現上存在較少的依賴關系。
四、實現
    1.說明:
        虛線+箭頭
        UML類圖五種關系與代碼的對應關系
        PS:Win的Goose類實現IFly接口
  1. Class WideGoose:Ifly{   
  2. }
    2.接口的定義:
        是一種特殊的抽象類,這種抽象類中值包含常量和方法的定義,而沒有變量和方法的實現
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

诸城市| 合肥市| 永新县| 天气| 高清| 龙胜| 柳林县| 永胜县| 淅川县| 唐山市| 商洛市| 都安| 上虞市| 英德市| 孟村| 抚顺县| 通州市| 湖口县| 淄博市| 汕头市| 鹤壁市| 汾阳市| 台中县| 阿勒泰市| 伊通| 韶关市| 新绛县| 潞西市| 白朗县| 海安县| 东方市| 高密市| 四平市| 社旗县| 三穗县| 山东省| 神木县| 晋中市| 东丰县| 青州市| 卫辉市|