<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          詳解:UML類圖符號、各種關(guān)系說明以及舉例

          共 6876字,需瀏覽 14分鐘

           ·

          2020-08-28 15:28

          點(diǎn)擊上方藍(lán)色“程序猿DD”,選擇“設(shè)為星標(biāo)”

          回復(fù)“資源”獲取獨(dú)家整理的學(xué)習(xí)資料!

          作者 | duanxz

          來源 | https://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.html
          UML中描述對象和類之間相互關(guān)系的方式包括:依賴(Dependency),關(guān)聯(lián)(Association),聚合(Aggregation),組合(Composition),泛化(Generalization),實(shí)現(xiàn)(Realization)等。
          • 依賴**(Dependency)**:元素A的變化會影響元素B,但反之不成立,那么B和A的關(guān)系是依賴關(guān)系,B依賴A;類屬關(guān)系和實(shí)現(xiàn)關(guān)系在語義上講也是依賴關(guān)系,但由于其有更特殊的用途,所以被單獨(dú)描述。uml中用帶箭頭的虛線表示Dependency關(guān)系,箭頭指向被依賴元素。
          • 泛化(Generalization:通常所說的繼承(特殊個體 is kind of 一般個體)關(guān)系,不必多解釋了。uml中用帶空心箭頭的實(shí)線線表示Generalization關(guān)系,箭頭指向一般個體。
          • 實(shí)現(xiàn)(Realize:元素A定義一個約定,元素B實(shí)現(xiàn)這個約定,則B和A的關(guān)系是Realize,B realize A。這個關(guān)系最常用于接口。uml中用空心箭頭和虛線表示Realize關(guān)系,箭頭指向定義約定的元素。
          • 關(guān)聯(lián)(Association:元素間的結(jié)構(gòu)化關(guān)系,是一種弱關(guān)系,被關(guān)聯(lián)的元素間通常可以被獨(dú)立的考慮。uml中用實(shí)線表示Association關(guān)系,箭頭指向被依賴元素。
          • 聚合(Aggregation:關(guān)聯(lián)關(guān)系的一種特例,表示部分和整體(整體 has a 部分)的關(guān)系。uml中用帶空心菱形頭的實(shí)線表示Aggregation關(guān)系,菱形頭指向整體。
          • 組合(Composition:組合是聚合關(guān)系的變種,表示元素間更強(qiáng)的組合關(guān)系。如果是組合關(guān)系,如果整體被破壞則個體一定會被破壞,而聚合的個體則可能是被多個整體所共享的,不一定會隨著某個整體的破壞而被破壞。uml中用帶實(shí)心菱形頭的實(shí)線表示Composition關(guān)系,菱形頭指向整體。

          1.1.1    依賴(Dependency):虛線箭頭表示

          1、依賴關(guān)系也是類與類之間的聯(lián)結(jié) 2、依賴總是單向的。(#add 注意,要避免雙向依賴。一般來說,不應(yīng)該存在雙向依賴。) 3、依賴關(guān)系在 Java 或 C++ 語言中體現(xiàn)為局部變量、方法的參數(shù)或者對靜態(tài)方法的調(diào)用。
          (軟件開發(fā)中,往往會設(shè)計一些公用類,供別的類調(diào)用,如果這些公用類出問題了,那調(diào)用這些公用類的類都會因此而出問題。兩個元素之間的一種關(guān)系,其中一個元素(提供者)的變化將影響另一個元素(客體),或向它提供所需信息 顯示一個類引用另一個類)
          方法參數(shù)示例:

          
             
          public class Person
          {
              void buy(Car car)
             {
                 ...
              }
          }


          表示方法:虛線加箭頭
          特點(diǎn):當(dāng)類與類之間有使用關(guān)系時就屬于依賴關(guān)系,不同于關(guān)聯(lián)關(guān)系,依賴不具有“擁有關(guān)系”,而是一種“相識關(guān)系”,只在某個特定地方(比如某個方法體內(nèi))才有關(guān)系。
          依賴關(guān)系可以分為以下四類:
          1) 使用依賴(Usage)表示客戶使用提供者提供的服務(wù)以實(shí)現(xiàn)它的行為,包括:
          • 使用< >--聲明使用一個類時需要用到已存在的另一個類。
          • 調(diào)用< >--聲明一個類調(diào)用其他類的操作的方法。
          • 參數(shù)< >--聲明一個操作和它的參數(shù)之間的關(guān)系。
          • 發(fā)送< >--聲明信號發(fā)送者和信號接收者之間的關(guān)系。
          • 實(shí)例化< >--聲明用一個類的方法創(chuàng)建了另一個類的實(shí)例。
          2) 抽象依賴(Abstraction)表示客戶與提供者之間用不同的方法表現(xiàn)同一個概念,通常一個概念更抽象,一個概念更具體。包括:
          • 跟蹤< >--聲明不同模型中的元素之間存在一些連接但不如映射精確。
          • 精化< >--聲明具有兩個不同語義層次上的元素之間的映射。
          • 派生< >--聲明一個實(shí)例可以從另一個實(shí)例導(dǎo)出。
          3) 授權(quán)依賴(Permission)表達(dá)提供者為客戶提供某種權(quán)限以訪問其內(nèi)容的情形。包括:
          • 訪問< >--允許一個包訪問另一個包的內(nèi)容。
          • 導(dǎo)入< >--允許一個包訪問另一個包的內(nèi)容并為被訪問包的組成部分增加別名。
          • 友元< >--允許一個元素訪問另一個元素,不管被訪問的元素是否具有可見性。
          4) 綁定依賴(Binding)較高級的依賴類型,用于綁定模板以創(chuàng)建新的模型元素,包括:
          • 綁定< >--為模板參數(shù)指定值,以生成一個新的模型元素。

          1.1.2    關(guān)聯(lián)(Association):實(shí)線箭頭表示

          1、關(guān)聯(lián)關(guān)系是類與類之間的聯(lián)結(jié),它使一個類知道另一個類的屬性和方法。2、關(guān)聯(lián)可以是雙向的,也可以是單向的(#add還有自身關(guān)聯(lián))。雙向的關(guān)聯(lián)可以有兩個箭頭或者沒有箭頭,單向的關(guān)聯(lián)有一個箭頭。3、在 Java 或 c++ 中,關(guān)聯(lián)關(guān)系是通過使用成員變量來實(shí)現(xiàn)的。


          
             
          public class 徒弟
          {  

          }

          public class 唐僧
          {
               protected: list<徒弟> tdlist;
          }


          表示方法:實(shí)線箭頭
          特征:表示類與類或類與接口之間的依賴關(guān)系,表現(xiàn)為“擁有關(guān)系”;具體到代碼可以用實(shí)例變量來表示。(A類有一個成員變量保存的是B類的一個引用,也就是說由A類可以找到B類)

          1.1.3    聚合(Aggregation):帶空心菱形頭表示

          1、聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種,是強(qiáng)的關(guān)聯(lián)關(guān)系。2、聚合是整體和部分之間的關(guān)系,例如汽車由引擎、輪胎以及其它零件組成。3、聚合關(guān)系也是通過成員變量來實(shí)現(xiàn)的。但是,關(guān)聯(lián)關(guān)系所涉及的兩個類處在同一個層次上,而聚合關(guān)系中,兩個類處于不同的層次上,一個代表整體,一個代表部分。4、關(guān)聯(lián)與聚合僅僅從 Java 或 C++ 語法上是無法分辨的,必須考察所涉及的類之間的邏輯關(guān)系。


          
             
          public class 引擎
           {

           }
          public class 輪胎
           {

           }
          public class 汽車
          {
                  protected:引擎 engine;
                  protected:輪胎 tyre[4];
          }


          表示方法:空心菱形頭
          特征:屬于是關(guān)聯(lián)的特殊情況,體現(xiàn)部分-整體關(guān)系,是一種弱擁有關(guān)系;整體和部分可以有不一樣的生命周期;是一種弱關(guān)聯(lián);

          1.1.4    組合(Composition):帶實(shí)心菱形頭的實(shí)線表示

          1、合成關(guān)系是關(guān)聯(lián)關(guān)系的一種,是比聚合關(guān)系還要強(qiáng)的關(guān)系。2、它要求普通的聚合關(guān)系中代表整體的對象負(fù)責(zé)代表部分的對象的生命周期。


          
             
          class 肢
           {
           }
           class 人
           {
                  protected:  肢   limb[4];
           }


          表示方法:一般是實(shí)心菱形加實(shí)線箭頭表示
          特征:屬于是關(guān)聯(lián)的特殊情況,也體現(xiàn)了體現(xiàn)部分-整體關(guān)系,是一種強(qiáng)“擁有關(guān)系”;整體與部分有相同的生命周期,是一種強(qiáng)關(guān)聯(lián);

          1.1.5    泛化(Generalization):

          帶空心箭頭的實(shí)線線表示

          泛化(下圖)表示一個更泛化的元素和一個更具體的元素之間的關(guān)系。泛化是用于對繼承進(jìn)行建模的UML元素。在Java中,用extends關(guān)鍵字來直接表示這種關(guān)系。
          泛化關(guān)系表示類與類之間的繼承關(guān)系,接口與接口之間的繼承關(guān)系。如下圖:
          img

          1.1.6    實(shí)現(xiàn)(Realization):空心箭頭和虛線表示

          實(shí)例(圖I)關(guān)系指定兩個實(shí)體之間的一個合同。換言之,一個實(shí)體定義一個合同,而另一個實(shí)體保證履行該合同。對Java應(yīng)用程序進(jìn)行建模時,實(shí)現(xiàn)關(guān)系可直接用implements關(guān)鍵字來表示。表達(dá)一種說明元素與實(shí)現(xiàn)元素之間的關(guān)系;
          圖I

          二、相互之間的區(qū)別

          1.聚合與組合
          (1)聚合與組合都是一種結(jié)合關(guān)系,只是額外具有整體-部分的意涵。
          (2)部件的生命周期不同
          聚合關(guān)系中,整件不會擁有部件的生命周期,所以整件刪除時,部件不會被刪除。再者,多個整件可以共享同一個部件。組合關(guān)系中,整件擁有部件的生命周期,所以整件刪除時,部件一定會跟著刪除。而且,多個整件不可以同時間共享同一個部件。
          (3)聚合關(guān)系是“has-a”關(guān)系,組合關(guān)系是“contains-a”關(guān)系。
          img
          • “弱”包含表示如果部門沒有了,員工也可以繼續(xù)存在;
          • “強(qiáng)”包含表示如果部門沒有了,員工也不再存在;
          在做軟件需求時,往往會將所有的包含關(guān)系畫成“弱”包含,后面發(fā)現(xiàn)某些關(guān)系可以表示為“強(qiáng)”包含是,才轉(zhuǎn)為實(shí)心菱形。
          2.關(guān)聯(lián)和聚合
          (1)表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語義級別來區(qū)分。
          (2)關(guān)聯(lián)和聚合的區(qū)別主要在語義上,關(guān)聯(lián)的兩個對象之間一般是平等的,例如你是我的朋友,聚合則一般不是平等的。
          (3)關(guān)聯(lián)是一種結(jié)構(gòu)化的關(guān)系,指一種對象和另一種對象有聯(lián)系。
          (4)關(guān)聯(lián)和聚合是視問題域而定的,例如在關(guān)心汽車的領(lǐng)域里,輪胎是一定要組合在汽車類中的,因?yàn)樗x開了汽車就沒有意義了。但是在賣輪胎的店鋪業(yè)務(wù)里,就算輪胎離開了汽車,它也是有意義的,這就可以用聚合了。
          3.關(guān)聯(lián)和依賴
          (1)關(guān)聯(lián)關(guān)系中,體現(xiàn)的是兩個類、或者類與接口之間語義級別的一種強(qiáng)依賴關(guān)系,比如我和我的朋友;這種關(guān)系比依賴更強(qiáng)、不存在依賴關(guān)系的偶然性、關(guān)系也不是臨時性的,一般是長期性的,而且雙方的關(guān)系一般是平等的。
          (2)依賴關(guān)系中,可以簡單的理解,就是一個類A使用到了另一個類B,而這種使用關(guān)系是具有偶然性的、臨時性的、非常弱的,但是B類的變化會影響到A。
          4.泛化和實(shí)現(xiàn)
          實(shí)現(xiàn)表示類對接口的實(shí)現(xiàn)關(guān)系,表示方式:用一條帶有空心三角箭頭的虛線指向接口。
          泛化表示類與類之間的繼承關(guān)系、接口與接口之間的繼承關(guān)系,表示方式一條帶有空心三角箭頭的實(shí)線指向基類(父接口)。
          5.綜合比較
          這幾種關(guān)系都是語義級別的,所以從代碼層面并不能完全區(qū)分各種關(guān)系;但總的來說,后幾種關(guān)系所表現(xiàn)的強(qiáng)弱程度依次為:
          組合>聚合>關(guān)聯(lián)>依賴
          其中依賴(Dependency)的關(guān)系最弱,而關(guān)聯(lián)(Association),聚合(Aggregation),組合(Composition)表示的關(guān)系依次增強(qiáng)。換言之關(guān)聯(lián),聚合,組合都是依賴關(guān)系的一種,聚合是表明對象之間的整體與部分關(guān)系的關(guān)聯(lián),而組合是表明整體與部分之間有相同生命周期關(guān)系的聚合。
          而關(guān)聯(lián)與依賴的關(guān)系用一句話概括下來就是,依賴描述了對象之間的調(diào)用關(guān)系,而關(guān)聯(lián)描述了對象之間的結(jié)構(gòu)關(guān)系。


          往期推薦

          Spring Cloud 常見面試題及答案

          HTTP協(xié)議無狀態(tài)中的 "狀態(tài)" 到底指的是什么?

          啥是指標(biāo)陷阱?很多就出現(xiàn)在你的身邊!

          云原生落地難的五個痛點(diǎn)與解決方法

          史無前例,160買400的硬核書,當(dāng)當(dāng)這波羊毛別忘薅!


          星球限時拼團(tuán)優(yōu)惠進(jìn)行中


          我的星球是否適合你?

          點(diǎn)擊閱讀原文看看我們都聊過啥?

          瀏覽 42
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色婷婷免费在线 | 亚洲AV成人无码一区二区三区 | 日韩三级麻豆 | 特黄特色A | 亚洲无码在线高清 |