中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

UML類圖五種關(guān)系與代碼的對應(yīng)關(guān)系

五種關(guān)系的耦合強弱比較:依賴<關(guān)聯(lián)<聚合<組合<繼承
一、依賴關(guān)系:

慈溪網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)2013年開創(chuàng)至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)

        1.說明:虛線+剪頭,可描述為Use a        
         依賴是類的5種關(guān)系中耦合最小的一種關(guān)系,因為在生成代碼的時候,這兩個關(guān)系類都不會增加屬性
        2.依賴關(guān)系圖與代碼的對應(yīng)關(guān)系
        UML類圖五種關(guān)系與代碼的對應(yīng)關(guān)系
  1. Public class Animal()  
  2. {  
  3.         Public Animal(){}  
  4. }  
  5.   
  6. Public class Water()  
  7. {  
  8.         public Water(){}  
  9. }  
        可以看到生成的兩個類的代碼中什么都沒有添加
        3.思考
        Animal類是如何使用Water類的呢?或者說依賴關(guān)系到底是如何體現(xiàn)的呢?
  • water類是全局的,則animal類可以調(diào)用它
  • water類是animal類的某個方法中的變量,則animal類可以調(diào)用它
  1. Public class Animal {  
  2.       Public void Grownup() {  
  3.                Water water =null;  
  4.       }  
  5. }  
        注意1:water類的生命后期,它是當(dāng)animal類的grounUp類方法被調(diào)用時才被實例化
        注意2:持有water類的是animal的一個方法而不是animal類
  • water類是作為animal類中某個方法的參數(shù)或者返回值
  1. Public Animal {  
  2.    Public Water Grownup(Waterwater) {  
  3.               return null;  
  4.       }  
  5. }  
二、關(guān)聯(lián)關(guān)系
        1.說明:
        實線+箭頭 可以描述為has a
        關(guān)聯(lián)關(guān)系用實線,表示類之間的耦合度比依賴強。在生成代碼的時候,關(guān)聯(lián)關(guān)系的類會增加屬性
        2.關(guān)聯(lián)關(guān)系和代碼的對應(yīng)關(guān)系
        UML類圖五種關(guān)系與代碼的對應(yīng)關(guān)系        
  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.關(guān)聯(lián)的種類
        關(guān)聯(lián)有單向關(guān)聯(lián)和雙向關(guān)聯(lián)
        單向關(guān)聯(lián):water類和Climate類單向關(guān)聯(lián),則water類稱為源類,Climate類稱為目標類。源類了解目標類的所有屬性和方法,但目標類并不了解類的信息
        UML類圖五種關(guān)系與代碼的對應(yīng)關(guān)系
        雙向關(guān)聯(lián):源類和目標類互相了解彼此的信息,如將water類和Climate類之間改為雙向關(guān)聯(lián)
        UML類圖五種關(guān)系與代碼的對應(yīng)關(guān)系        
  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.思考:
        依賴關(guān)聯(lián)和關(guān)聯(lián)關(guān)系的區(qū)別在哪里?
        (1)從類的屬性是否增加的角度看:
            發(fā)生依賴關(guān)系的兩個類都不會增加屬性,其中的一個類作為另一個類的方法的參數(shù)或者返回值,或者是某個方法的變量而已。
            發(fā)生關(guān)聯(lián)關(guān)系的兩個類,其中的一個類稱為另一個類的屬性,而屬性是一種更為緊密的耦合,更為長久的持有關(guān)系。
        (2)從關(guān)系的生命周期角度看:
            依賴關(guān)系是僅當(dāng)類的方法被調(diào)用時而產(chǎn)生的,伴隨著方法的結(jié)束而結(jié)束了。
            關(guān)聯(lián)關(guān)系是當(dāng)類實例化的時候即產(chǎn)生,當(dāng)類銷毀的時候,關(guān)系結(jié)束。相對依賴來說,關(guān)聯(lián)關(guān)系的生存周期更長
        5.關(guān)聯(lián)關(guān)系的細化:聚合和組合
        (1)聚合:用空心菱形+箭頭
                組合:用實心菱形+箭頭,類之間的耦合比聚合強
        (2)聚合和組合生成的代碼
            UML類圖五種關(guān)系與代碼的對應(yīng)關(guān)系        
            (PS:此圖表明雁群類是由大雁類聚合而成)
  1. Public class GooseGroup {  
  2.     public Goose goose;  
  3.     Public GooseGroup(Goose goose) {  
  4.               this.goose = goose;  
  5.        }  
  6. }  

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

網(wǎng)頁標題:UML類圖五種關(guān)系與代碼的對應(yīng)關(guān)系
本文URL:http://www.rwnh.cn/article24/jcjpce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)微信小程序、電子商務(wù)企業(yè)網(wǎng)站制作、網(wǎng)頁設(shè)計公司服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
兴隆县| 孝义市| 元朗区| 交城县| 昌图县| 佛学| 阿拉善左旗| 长葛市| 潞城市| 安顺市| 乳山市| 聊城市| 长岭县| 张家界市| 抚顺县| 西乌| 新宁县| 太谷县| 许昌市| 清远市| 桐庐县| 龙川县| 凉城县| 桐城市| 五寨县| 米泉市| 文水县| 瑞安市| 乌恰县| 磐安县| 佛教| 方正县| 濉溪县| 南澳县| 独山县| 乐都县| 英吉沙县| 东安县| 如东县| 麦盖提县| 泊头市|