<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類(lèi)圖符號(hào)、各種關(guān)系說(shuō)明以及舉例

          共 4509字,需瀏覽 10分鐘

           ·

          2020-09-05 05:45

          點(diǎn)擊上方“碼農(nóng)突圍”,馬上關(guān)注

          這里是碼農(nóng)充電第一站,回復(fù)“666”,獲取一份專(zhuān)屬大禮包

          真愛(ài),請(qǐng)?jiān)O(shè)置“星標(biāo)”或點(diǎn)個(gè)“在看”

          作者 |?duanxz
          來(lái)源 |?https://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.html
          UML中描述對(duì)象和類(lèi)之間相互關(guān)系的方式包括:依賴(lài)(Dependency),關(guān)聯(lián)(Association),聚合(Aggregation),組合(Composition),泛化(Generalization),實(shí)現(xiàn)(Realization)等。
          • 依賴(lài)**(Dependency)**:元素A的變化會(huì)影響元素B,但反之不成立,那么B和A的關(guān)系是依賴(lài)關(guān)系,B依賴(lài)A;類(lèi)屬關(guān)系和實(shí)現(xiàn)關(guān)系在語(yǔ)義上講也是依賴(lài)關(guān)系,但由于其有更特殊的用途,所以被單獨(dú)描述。uml中用帶箭頭的虛線表示Dependency關(guān)系,箭頭指向被依賴(lài)元素。
          • 泛化(Generalization:通常所說(shuō)的繼承(特殊個(gè)體 is kind of 一般個(gè)體)關(guān)系,不必多解釋了。uml中用帶空心箭頭的實(shí)線線表示Generalization關(guān)系,箭頭指向一般個(gè)體。
          • 實(shí)現(xiàn)(Realize:元素A定義一個(gè)約定,元素B實(shí)現(xiàn)這個(gè)約定,則B和A的關(guān)系是Realize,B realize A。這個(gè)關(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)系,箭頭指向被依賴(lài)元素。
          • 聚合(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)系,如果整體被破壞則個(gè)體一定會(huì)被破壞,而聚合的個(gè)體則可能是被多個(gè)整體所共享的,不一定會(huì)隨著某個(gè)整體的破壞而被破壞。uml中用帶實(shí)心菱形頭的實(shí)線表示Composition關(guān)系,菱形頭指向整體。

          1.1.1 ? ?依賴(lài)(Dependency):虛線箭頭表示

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

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


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

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

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


          public?class?徒弟
          {??

          }

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


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

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

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


          public?class?引擎
          ?{

          ?}
          public?class?輪胎
          ?{

          ?}
          public?class?汽車(chē)
          {
          ????????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)系中代表整體的對(duì)象負(fù)責(zé)代表部分的對(duì)象的生命周期。


          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í)線線表示

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

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

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

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

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

          最近熱文

          ? ?外包公司干了不到 3 個(gè)月,我離職了...(防坑指南)
          ???MATLAB被禁,中國(guó)重新開(kāi)發(fā)要多久?
          ???網(wǎng)傳互聯(lián)網(wǎng)公司加班表,排名第一的沒(méi)有懸念!
          ???查詢(xún)速度提升200倍,ClickHouse到底有多快?

          最近整理了一份大廠算法刷題指南,包括一些刷題技巧,在知乎上已經(jīng)有上萬(wàn)贊。同時(shí)還整理了一份6000頁(yè)面試筆記。關(guān)注下面公眾號(hào),在公眾號(hào)內(nèi)回復(fù)「刷題」,即可免費(fèi)獲??!回復(fù)「加群」,可以邀請(qǐng)你加入讀者群!



          明天見(jiàn)(??ω??)??

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  a∨在线免费看 | 日日日日人人人夜夜2022 | 成人精品18 | 一区二区无码 无修正 | 一级视频播放 |