詳解:UML類圖符號、各種關係說明以及舉例

2021-02-19 程序猿DD

點擊上方藍色「程序猿DD」,選擇「設為星標」

回復「資源」獲取獨家整理的學習資料!

作者 | duanxz

來源 | https://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.htmlUML中描述對象和類之間相互關係的方式包括:依賴(Dependency),關聯(Association),聚合(Aggregation),組合(Composition),泛化(Generalization),實現(Realization)等。依賴**(Dependency)**:元素A的變化會影響元素B,但反之不成立,那麼B和A的關係是依賴關係,B依賴A;類屬關係和實現關係在語義上講也是依賴關係,但由於其有更特殊的用途,所以被單獨描述。uml中用帶箭頭的虛線表示Dependency關係,箭頭指向被依賴元素。泛化(Generalization:通常所說的繼承(特殊個體 is kind of 一般個體)關係,不必多解釋了。uml中用帶空心箭頭的實線線表示Generalization關係,箭頭指向一般個體。實現(Realize:元素A定義一個約定,元素B實現這個約定,則B和A的關係是Realize,B realize A。這個關係最常用於接口。uml中用空心箭頭和虛線表示Realize關係,箭頭指向定義約定的元素。關聯(Association:元素間的結構化關係,是一種弱關係,被關聯的元素間通常可以被獨立的考慮。uml中用實線表示Association關係,箭頭指向被依賴元素。聚合(Aggregation:關聯關係的一種特例,表示部分和整體(整體 has a 部分)的關係。uml中用帶空心菱形頭的實線表示Aggregation關係,菱形頭指向整體。組合(Composition:組合是聚合關係的變種,表示元素間更強的組合關係。如果是組合關係,如果整體被破壞則個體一定會被破壞,而聚合的個體則可能是被多個整體所共享的,不一定會隨著某個整體的破壞而被破壞。uml中用帶實心菱形頭的實線表示Composition關係,菱形頭指向整體。1.1.1    依賴(Dependency):虛線箭頭表示1、依賴關係也是類與類之間的聯結2、依賴總是單向的。(#add 注意,要避免雙向依賴。一般來說,不應該存在雙向依賴。)3、依賴關係在 Java 或 C++ 語言中體現為局部變量、方法的參數或者對靜態方法的調用。(軟體開發中,往往會設計一些公用類,供別的類調用,如果這些公用類出問題了,那調用這些公用類的類都會因此而出問題。兩個元素之間的一種關係,其中一個元素(提供者)的變化將影響另一個元素(客體),或向它提供所需信息顯示一個類引用另一個類)
public class Person
{
    void buy(Car car)
   {
       ...
    }
}

特點:當類與類之間有使用關係時就屬於依賴關係,不同於關聯關係,依賴不具有「擁有關係」,而是一種「相識關係」,只在某個特定地方(比如某個方法體內)才有關係。1) 使用依賴(Usage)表示客戶使用提供者提供的服務以實現它的行為,包括:使用<>--聲明使用一個類時需要用到已存在的另一個類。發送<>--聲明信號發送者和信號接收者之間的關係。實例化<>--聲明用一個類的方法創建了另一個類的實例。2) 抽象依賴(Abstraction)表示客戶與提供者之間用不同的方法表現同一個概念,通常一個概念更抽象,一個概念更具體。包括:跟蹤<>--聲明不同模型中的元素之間存在一些連接但不如映射精確。精化<>--聲明具有兩個不同語義層次上的元素之間的映射。3) 授權依賴(Permission)表達提供者為客戶提供某種權限以訪問其內容的情形。包括:導入<>--允許一個包訪問另一個包的內容並為被訪問包的組成部分增加別名。友元<>--允許一個元素訪問另一個元素,不管被訪問的元素是否具有可見性。4) 綁定依賴(Binding)較高級的依賴類型,用於綁定模板以創建新的模型元素,包括:綁定<>--為模板參數指定值,以生成一個新的模型元素。1.1.2    關聯(Association):實線箭頭表示1、關聯關係是類與類之間的聯結,它使一個類知道另一個類的屬性和方法。2、關聯可以是雙向的,也可以是單向的(#add還有自身關聯)。雙向的關聯可以有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。3、在 Java 或 c++ 中,關聯關係是通過使用成員變量來實現的。
public class 徒弟
{  

}

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

特徵:表示類與類或類與接口之間的依賴關係,表現為「擁有關係」;具體到代碼可以用實例變量來表示。(A類有一個成員變量保存的是B類的一個引用,也就是說由A類可以找到B類)1.1.3    聚合(Aggregation):帶空心菱形頭表示1、聚合關係是關聯關係的一種,是強的關聯關係。2、聚合是整體和部分之間的關係,例如汽車由引擎、輪胎以及其它零件組成。3、聚合關係也是通過成員變量來實現的。但是,關聯關系所涉及的兩個類處在同一個層次上,而聚合關係中,兩個類處於不同的層次上,一個代表整體,一個代表部分。4、關聯與聚合僅僅從 Java 或 C++ 語法上是無法分辨的,必須考察所涉及的類之間的邏輯關係。
public class 引擎
 {

 }
public class 輪胎
 {

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

特徵:屬於是關聯的特殊情況,體現部分-整體關係,是一種弱擁有關係;整體和部分可以有不一樣的生命周期;是一種弱關聯;1.1.4    組合(Composition):帶實心菱形頭的實線表示1、合成關係是關聯關係的一種,是比聚合關係還要強的關係。2、它要求普通的聚合關係中代表整體的對象負責代表部分的對象的生命周期。
class 肢
 {
 }
 class 人
 {
        protected:  肢   limb[4];
 }

特徵:屬於是關聯的特殊情況,也體現了體現部分-整體關係,是一種強「擁有關係」;整體與部分有相同的生命周期,是一種強關聯;1.1.5    泛化(Generalization):帶空心箭頭的實線線表示泛化(下圖)表示一個更泛化的元素和一個更具體的元素之間的關係。泛化是用於對繼承進行建模的UML元素。在Java中,用extends關鍵字來直接表示這種關係。泛化關係表示類與類之間的繼承關係,接口與接口之間的繼承關係。如下圖:img1.1.6    實現(Realization):空心箭頭和虛線表示實例(圖I)關係指定兩個實體之間的一個合同。換言之,一個實體定義一個合同,而另一個實體保證履行該合同。對Java應用程式進行建模時,實現關係可直接用implements關鍵字來表示。表達一種說明元素與實現元素之間的關係;圖I二、相互之間的區別(1)聚合與組合都是一種結合關係,只是額外具有整體-部分的意涵。聚合關係中,整件不會擁有部件的生命周期,所以整件刪除時,部件不會被刪除。再者,多個整件可以共享同一個部件。組合關係中,整件擁有部件的生命周期,所以整件刪除時,部件一定會跟著刪除。而且,多個整件不可以同時間共享同一個部件。(3)聚合關係是「has-a」關係,組合關係是「contains-a」關係。img「弱」包含表示如果部門沒有了,員工也可以繼續存在;在做軟體需求時,往往會將所有的包含關係畫成「弱」包含,後面發現某些關係可以表示為「強」包含是,才轉為實心菱形。(1)表現在代碼層面,和關聯關係是一致的,只能從語義級別來區分。(2)關聯和聚合的區別主要在語義上,關聯的兩個對象之間一般是平等的,例如你是我的朋友,聚合則一般不是平等的。(3)關聯是一種結構化的關係,指一種對象和另一種對象有聯繫。(4)關聯和聚合是視問題域而定的,例如在關心汽車的領域裡,輪胎是一定要組合在汽車類中的,因為它離開了汽車就沒有意義了。但是在賣輪胎的店鋪業務裡,就算輪胎離開了汽車,它也是有意義的,這就可以用聚合了。(1)關聯關係中,體現的是兩個類、或者類與接口之間語義級別的一種強依賴關係,比如我和我的朋友;這種關係比依賴更強、不存在依賴關係的偶然性、關係也不是臨時性的,一般是長期性的,而且雙方的關係一般是平等的。(2)依賴關係中,可以簡單的理解,就是一個類A使用到了另一個類B,而這種使用關係是具有偶然性的、臨時性的、非常弱的,但是B類的變化會影響到A。實現表示類對接口的實現關係,表示方式:用一條帶有空心三角箭頭的虛線指向接口。泛化表示類與類之間的繼承關係、接口與接口之間的繼承關係,表示方式一條帶有空心三角箭頭的實線指向基類(父接口)。這幾種關係都是語義級別的,所以從代碼層面並不能完全區分各種關係;但總的來說,後幾種關系所表現的強弱程度依次為:其中依賴(Dependency)的關係最弱,而關聯(Association),聚合(Aggregation),組合(Composition)表示的關係依次增強。換言之關聯,聚合,組合都是依賴關係的一種,聚合是表明對象之間的整體與部分關係的關聯,而組合是表明整體與部分之間有相同生命周期關係的聚合。而關聯與依賴的關係用一句話概括下來就是,依賴描述了對象之間的調用關係,而關聯描述了對象之間的結構關係。

我的星球是否適合你?

點擊閱讀原文看看我們都聊過啥?

相關焦點

  • 圖文並茂,詳細講解UML類圖符號、各種關係說明以及舉例
    依賴(Dependency):元素A的變化會影響元素B,但反之不成立,那麼B和A的關係是依賴關係,B依賴A;類屬關係和實現關係在語義上講也是依賴關係,但由於其有更特殊的用途,所以被單獨描述。uml中用帶箭頭的虛線表示Dependency關係,箭頭指向被依賴元素。
  • 淺談UML類圖
    類的UML圖表示    在UML類圖中,類使用包含類名、屬性和方法且帶有分隔線的長方形來表示,請看下圖使用類圖表示類信息的示例:我們通常將類圖表示的類分為三個部分:第一部分為類名,如果類名用正體書寫則說明這是可以實例化的普通類。如果類名用斜體書寫,則說明這是抽象類。
  • 深入剖析統一建模語言UML中的五類圖
    元模型為UML的所有元素在語法和語義上提供了簡單、一致、通用的定義性說明,使開發者能在語義上取得一致,消除了因人而異的***表達方法所造成的影響。此外UML還支持對元模型的擴展定義。(2)統一建模語言UML表示法定義UML符號的表示法,為開發者或開發工具使用這些圖形符號和文本語法為系統建模提供了標準。這些圖形符號和文字所表達的是應用級的模型,在語義上它是UML元模型的實例。
  • 區分四大UML類圖關係
    區分四大UML類圖關係 UML類圖關係你是否熟悉,本文就向大家簡單介紹一下幾種UML類圖關係的區別,希望通過本文的學習你對這幾種UML類圖關係的特點有一定的認識。
  • UML類圖
    UML 是一種開放的方法,用於說明、可視化、構建和編寫一個正在開發的、面向對象的、軟體密集系統的製品的開放方法。UML 展現了一系列最佳工程實踐,這些最佳實踐在對大規模,複雜系統進行建模方面,特別是在 軟體架構 層次已經被驗證有效。
  • UML實踐--UML用例圖和類圖解析
    類圖UML實踐中類圖Classdiagram通過顯示出系統的類以及這些類之間的關係來表示系統。類圖是靜態的-它們顯示出什麼可以產生影響但不會告訴你什麼時候產生影響。下面是一個顧客從零售商處預定商品的模型的類圖。中心的類是Order。連接它的是購買貨物的Customer和Payment。
  • 解析UML類圖關係中UML關聯和其他關係的區別和聯繫
    解析UML類圖關係中UML關聯和其他關係的區別和聯繫 在UML類圖關係中,UML關聯,依賴,聚集,組成的聯繫十分緊密,不容易區分,本文試圖用通俗的語言來講解這四種關係的區別。
  • 專家指導 如何區分UML類圖關係
    專家指導 如何區分UML類圖關係 UML類圖關係中的」關聯關係「、」聚合關係「、」合成關係「和」依賴關係「不是很容易區分清楚,本文就向大家簡單介紹一下這些關係之間的區別。
  • 產品經理必學UML:類圖
    本篇文章主要介紹了UML靜態視圖中的類圖,包括類圖的概念、用途及相關元素,供大家一起參考和學習。一、概念類圖(Class Diagrame)是描述類、接口、協作以及它們之間關係的圖,用來顯示系統中各個類的靜態結構。類圖包含7個元素:類、接口、協作、依賴關係、泛化關係、實現關係以及關聯關係。
  • UML類圖幾種關係的總結
    在UML類圖中,常見的有以下幾種關係:泛化(Generalization), 實現(Realization)
  • UML精粹 UML類圖全面剖析
    UML精粹-類圖一直覺得自己對UML的理解還遠遠不夠深刻,最近在畫即時消息系統核心模塊的類圖時越有這種感覺。急忙找來老馬的<<UML精粹>>很補一下下。***篇,是關於UML類圖的:一、區分操作operation和方法method操作是對對象提出的事情(過程說明),而方法則是過程體。
  • 怎麼看懂UML中的類圖?
    UML 從目標系統的不同角度出發,定義了用例圖、類圖、對象圖、狀態圖、活動圖、時序圖、協作圖、構件圖、部署圖等 9 種圖。本文並不會對所有圖進行分析。主要介紹開發中常用的類圖 時序圖 狀態圖。類圖類(Class)是指具有相同屬性、方法和關係的對象的抽象,它封裝了數據和行為,是面向對象程序設計(OOP)的基礎,具有封裝性、繼承性和多態性等三大特性。在 UML 中,類使用包含類名、屬性和操作且帶有分隔線的矩形來表示。
  • 專家推薦 經典UML類圖教程
    (5)依賴關係有兩個元素X、Y,如果修改元素X的定義可能會引起對另一個元素Y的定義的修改,則稱元素Y依賴(Dependency)於元素X。在類中,依賴由各種原因引起,如:一個類向另一個類發消息;一個類是另一個類的數據成員;一個類是另一個類的某個操作參數。如果一個類的界面改變,它發出的任何消息可能不再合法。
  • 產品經理必看:常用的UML建模詳解
    二、類圖裝逼的講,類圖(Class diagram)是顯示了模型的靜態結構,特別是模型中存在的類、類的內部結構以及它們與其他類的關係等。那它其實就是用來幫助我們識別出人、事、物和業務的概念,並理清它們的關係的一種方法。2.1 類圖的基礎知識在聊類圖之前先讓我們理清幾個概念。首先,什麼是類?
  • UML科普文,一文章掌握14種UML圖!
    什麼是類圖?【概念】類圖是一切面向對象方法的核心建模工具。類圖描述了系統中對象的類型以及它們之間存在的各種靜態關係。【目的】用來表示類、接口以及它們之間的靜態結構和關係。❝在類圖中,常見的有以下幾種關係。❞泛化(Generalization)【泛化關係】是一種繼承關係,表示子類繼承父類的所有特徵和行為。
  • 產品經理需要使用的UML繪圖流程圖是什麼?
    是PMdiss(pmdiss.com):B端垂直產品經理社群,是JD.com,阿里,美團等網際網路人士學習交流的平臺..我們不僅對CRM、ERP、OMS、WMS、TMS、OA等系統進行了演示研究,而且還擁有各種B側產品的垂直彈藥庫,包括產品規格、操作手冊、白皮書、業務需求說明、系統說明以及適用於
  • 看懂UML類圖和時序圖
    一起學習、成長、溫情的熱愛生活圖丨pexels這裡不會將UML的各種元素都提到,我只想講講類圖中各個類之間的關係;能看懂類圖中各個類之間的線條、箭頭代表什麼意思後,也就足夠應對日常的工作和交流;同時,我們應該能將類圖所表達的含義和最終的代碼對應起來
  • 全面認識九種基本的UML模型圖
    2類圖UML模型圖中類圖描述系統的靜態體系結構,構成系統的類,還有類之間的關係.類圖用於描述描述類模型,系統總體結構的設計直至代碼的實現.類模型類似於數據模型,要開發一個面向職責的類模型.類是指一些具有相同屬性和行為的對象.對象是人們對現實世界中各種事物或概念的一種高度抽象.任何事物都可以看作是具有某些屬性和動態行為的對象.類與類之間有著多種不同的聯繫
  • 揭秘UML九種視圖用法
    UML九種視圖中用例圖表示了角色和用例以及它們之間的關係。2)類圖(ClassDiagram)是最常用的一種圖,類圖可以幫助我們更直觀的了解一個系統的體系結構。通過關係和類表示的類圖,可以圖形化的方式描述一個系統的設計部分。
  • UML各種圖形的建立步驟專家指導
    UML各種圖形的建立步驟專家指導 UML統一建模語言共有五類圖,對於UML各種圖形的建立步驟你是否熟悉,這裡就向大家介紹一下,相信通過本文的介紹你對UML各種圖的建立一定會有全面的認識。