<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    圖解UML類與類之間的六中關系

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    大話設計模式上的一個圖,我用EA畫出來的:
     大話設計模式類圖

    UML中的6大關系相關英文及音標:

     依賴關系

     

    dependency

     

    [di'pend?nsi]  關聯關系

     

    association

     

     [?,s?u?i'ei??n]  聚合關系

     

    aggregation

     

     [?ægr??ge???n]  組合關系 composition  [,k?mp?'zi??n]  實現

     

    realization

     

     [,ri:?l?'ze???n]  泛化

     

    generalization

     

     [,d?en?r?l?'ze???n]

     

    UML中的6大關系簡單解釋:

    1. 關聯:連接模型元素及鏈接實例,用一條實線來表示;
    2. 依賴:表示一個元素以某種方式依賴于另一個元素,用一條虛線加箭頭來表示;
    3. 聚合:表示整體與部分的關系,用一條實線加空心菱形來表示;
    4. 組成:表示整體與部分的有一關系,用一條實線加實心菱形來表示;
    5. 泛化(繼承):表示一般與特殊的關系,用一條實線加空心箭頭來表示;
    6. 實現:表示類與接口的關系,用一條虛線加空心箭頭來表示;

    注意:泛化關系和實現關系又統稱為一般關系;
    總之:一般關系表現為繼承或實現(is a),關聯關系、聚合關系、合成/組合關系表現為成員變量(has a),依賴關系表現為函數中的參數(use a);

    UML中的6大關系詳細說明:

    1、關聯關系:
      含義:類與類之間的連結,關聯關系使一個類知道另外一個類的屬性和方法;通常含有“知道”,“了解”的含義
    體現:在C#中,關聯關系是通過成員變量來實現的;
    方向:雙向或單向;
    圖示:實線 + 箭頭;箭頭指向被關聯的類;
    舉例:“漁民”需要知道“天氣”情況才能夠出海
       //公司關聯雇員
    public class Company
    {
        private Employee employee;
        public Employee GetEmployee()
        {
            return employee;
        }
        public void SetEmployee(Employee employee)
        {
            this.employee = employee;
        }
        //公司運作    
        public void Run()
        {
            employee.StartWorking();
        }
    }

    //A關聯B
    class A
    {
        B b = new B();
    }
    class B
    {
    }

    它體現的是兩個類、或者類與接口之間語義級別的一種強依賴關系,比如我和我的朋友;這種關系比依賴更強、不存在依賴關系的偶然性、關系也不是臨時性的,一般是長期性的,而且雙方的關系一般是平等的、關聯可以是單向、雙向的;表現在代碼層面,為被關聯類B以類屬性的形式出現在關聯類A中,也可能是關聯類A引用了一個類型為被關聯類B的全局變量;

     

    2、依賴關系:
      含義:是類與類之間的連接,表示一個類依賴于另外一個類的定義;依賴關系僅僅描述了類與類之間的一種使用與被使用的關系;
    體現:在C#中體現為局部變量、方法/函數的參數或者是對靜態方法的調用;
    方向:單向;
    圖示:虛線 + 箭頭;
    舉例:人依賴于水和空氣;汽車依賴汽油
        //人劃船,人依賴于船
    public class Person
    {
        //劃船
        public void Oarage(Boat boat)
        {
            boat.Oarage();
        }


    //A依賴于B
    class A
    {
        public void Function(B b)
        { }
    }
    class B
    {
    }

    可以簡單的理解,就是一個類A使用到了另一個類B,而這種使用關系是具有偶然性的、、臨時性的、非常弱的,但是B類的變化會影響到A;比如某人要過河,需要借用一條船,此時人與船之間的關系就是依賴;表現在代碼層面,為類B作為參數被類A在某個method方法中使用;

     

    3、聚合關系:
      含義:是關聯關系的一種,是一種強關聯關系;聚合關系是整體和個體/部分之間的關系;關聯關系的兩個類處于同一個層次上,而聚合關系的兩個類處于不同的層次上,一個是整體,一個是個體/部分;在聚合關系中,代表個體/部分的對象有可能會被多個代表整體的對象所共享;
    體現:C++中,聚合關系通過將被聚合者的(數組)指針作為內部成員來實現的;
    方向:單向;
    圖示:空心菱形 + 實線 + 箭頭;箭頭指向被聚合的類,也就是說,箭頭指向個體/部分;
    舉例:鴨群與鴨子具有聚合關系;汽車由引擎、輪胎以及其它零件組成,因為汽車壞掉了,沒有壞掉的引擎,輪胎和其他零件還可以繼續使用。

    聚合是關聯關系的一種特例,他體現的是整體與部分、擁有的關系,即has-a的關系,此時整體與部分之間是可分離的,他們可以具有各自的生命周期,部分可以屬于多個整體對象,也可以為多個整體對象共享;比如計算機與CPU、公司與員工的關系等;表現在代碼層面,和關聯關系是一致的,只能從語義級別來區分;

     

    4、組合關系:
      含義:它也是關聯關系的一種,但它是比聚合關系更強的關系.組合關系要求聚合關系中代表整體的對象要負責代表個體/部分的對象的整個生命周期;組合關系不能共享;在組合關系中,如果代表整體的對象被銷毀或破壞,那么代表個體/部分的對象也一定會被銷毀或破壞,而聚在合關系中,代表個體/部分的對象則有可能被多個代表整體的對象所共享,而不一定會隨著某個代表整體的對象被銷毀或破壞而被銷毀或破壞;
    體現:在C#中,組合關系是通過成員變量來實現的;
    方向:單向;
    圖示:實心菱形 + 實線 + 箭頭;箭頭指向代表個體/部分的對象,也就是被組合的類的對象;
    舉例:一個人由頭、四肢、等各種器官組成,因為人與這些器官具有相同的生命周期,人死了,這些器官也掛了;

    組合也是關聯關系的一種特例,他體現的是一種contains-a的關系,這種關系比聚合更強,也稱為強聚合;他同樣體現整體與部分間的關系,但此時整體與部分是不可分的,整體的生命周期結束也就意味著部分的生命周期結束;比如你和你的大腦;表現在代碼層面,和關聯關系是一致的,只能從語義級別來區分;

     

    5、泛化關系:
      含義:它表示一個更泛化的元素和一個更具體的元素之間的關系;也就是通常所說的類的繼承關系;
    體現:在C#中,泛化關系通過類的繼承來實現的;
    方向:單向;子類繼承父類;
    圖示:空心箭頭 + 實線;箭頭指向父類;
    舉例:動物下面可以分為哺乳動物,脊椎動物,爬行動物等

    指的是一個類(稱為子類、子接口)繼承另外的一個類(稱為父類、父接口)的功能,并可以增加它自己的新功能的能力,繼承是類與類或者接口與接口之間最常見的關系;在Java中此類關系通過關鍵字extends明確標識,在設計時一般沒有爭議性;

     

    6、實現關系:
      含義:它指定了兩個實體之間的一份合同;即:一個實體定義一份合同,另外一個實體則保證履行該合同;
    體現:在C#中,實現關系通過類實現接口來實現的,即:一個類實現某個接口;
    方向:單向;子類實現接口;
    圖示:空心箭頭 + 虛線;箭頭指接口向接口;
    舉例:唐老鴨(對象)會說話(接口),因為一般鴨子不會說話,所以不會將說話這個方法給一般的鴨子帶上;超人(對象)會飛(接口)

    指的是一個class類實現interface接口(可以是多個)的功能;實現是類與接口之間最常見的關系;在Java中此類關系通過關鍵字implements明確標識,在設計時一般沒有爭議性;

     

    總結:對于繼承、實現這兩種關系沒多少疑問,他們體現的是一種類與類、或者類與接口間的縱向關系;其他的四者關系則體現的是類與類、或者類與接口間的引用、橫向關系,是比較難區分的,有很多事物間的關系要想準備定位是很難的,前面也提到,這幾種關系都是語義級別的,所以從代碼層面并不能完全區分各種關系;但總的來說,后幾種關系所表現的強弱程度依次為:組合>聚合>關聯>依賴。

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全