五分鐘看懂UML類圖與類的關係詳解

来源:https://www.cnblogs.com/sevencutekk/archive/2019/09/11/11508871.html
-Advertisement-
Play Games

在畫類圖的時候,理清類和類之間的關係是重點。類的關係有泛化(Generalization)、實現(Realization)、依賴(Dependency)和關聯(Association)。其中關聯又分為一般關聯關係和聚合關係(Aggregation),合成關係(Composition)。下麵我們結合實 ...


在畫類圖的時候,理清類和類之間的關係是重點。類的關係有泛化(Generalization)、實現(Realization)、依賴(Dependency)和關聯(Association)。其中關聯又分為一般關聯關係和聚合關係(Aggregation),合成關係(Composition)。下麵我們結合實例理解這些關係。

基本概念

類圖(Class Diagram): 類圖是面向對象系統建模中最常用和最重要的圖,是定義其它圖的基礎。類圖主要是用來顯示系統中的類、介面以及它們之間的靜態結構和關係的一種靜態模型。

類圖的3個基本組件:類名、屬性、方法。

五分鐘看懂UML類圖與類的關係詳解

 

泛化(generalization):表示is-a的關係,是對象之間耦合度最大的一種關係,子類繼承父類的所有細節。直接使用語言中的繼承表達。在類圖中使用帶三角箭頭的實線表示,箭頭從子類指向父類。

五分鐘看懂UML類圖與類的關係詳解

 

實現(Realization):在類圖中就是介面和實現的關係。這個沒什麼好講的。在類圖中使用帶三角箭頭的虛線表示,箭頭從實現類指向介面。

五分鐘看懂UML類圖與類的關係詳解

 

依賴(Dependency):對象之間最弱的一種關聯方式,是臨時性的關聯。代碼中一般指由局部變數、函數參數、返回值建立的對於其他對象的調用關係。一個類調用被依賴類中的某些方法而得以完成這個類的一些職責。在類圖使用帶箭頭的虛線表示,箭頭從使用類指向被依賴的類。

五分鐘看懂UML類圖與類的關係詳解

 

關聯(Association) : 對象之間一種引用關係,比如客戶類與訂單類之間的關係。這種關係通常使用類的屬性表達。關聯又分為一般關聯、聚合關聯與組合關聯。後兩種在後面分析。在類圖使用帶箭頭的實線表示,箭頭從使用類指向被關聯的類。可以是單向和雙向。

五分鐘看懂UML類圖與類的關係詳解

 

聚合(Aggregation) : 表示has-a的關係,是一種不穩定的包含關係。較強於一般關聯,有整體與局部的關係,並且沒有了整體,局部也可單獨存在。如公司和員工的關係,公司包含員工,但如果公司倒閉,員工依然可以換公司。在類圖使用空心的菱形表示,菱形從局部指向整體。

五分鐘看懂UML類圖與類的關係詳解

 

組合(Composition) : 表示contains-a的關係,是一種強烈的包含關係。組合類負責被組合類的生命周期。是一種更強的聚合關係。部分不能脫離整體存在。如公司和部門的關係,沒有了公司,部門也不能存在了;調查問卷中問題和選項的關係;訂單和訂單選項的關係。在類圖使用實心的菱形表示,菱形從局部指向整體。

五分鐘看懂UML類圖與類的關係詳解

 

多重性(Multiplicity) : 通常在關聯、聚合、組合中使用。就是代表有多少個關聯對象存在。使用數字..星號(數字)表示。如下圖,一個割接通知可以關聯0個到N個故障單。

五分鐘看懂UML類圖與類的關係詳解

 

聚合和組合的區別

這兩個比較難理解,重點說一下。聚合和組合的區別在於:聚合關係是“has-a”關係,組合關係是“contains-a”關係;聚合關係表示整體與部分的關係比較弱,而組合比較強;聚合關係中代表部分事物的對象與代表聚合事物的對象的生存期無關,一旦刪除了聚合對象不一定就刪除了代表部分事物的對象。組合中一旦刪除了組合對象,同時也就刪除了代表部分事物的對象。

實例分析

聯通客戶響應OSS。系統有故障單、業務開通、資源核查、割接、業務重保、網路品質性能等功能模塊。現在我們抽出部分需求做為例子講解。

大家可以參照著類圖,好好理解。

五分鐘看懂UML類圖與類的關係詳解

 

1. 通知分為一般通知、割接通知、重保通知。這個是繼承關係。

2. NoticeService和實現類NoticeServiceImpl是實現關係。

3. NoticeServiceImpl通過save方法的參數引用Notice,是依賴關係。同時調用了BaseDao完成功能,也是依賴關係。

4. 割接通知和故障單之間通過中間類(通知電路)關聯,是一般關聯。

5. 重保通知和預案庫間是聚合關係。因為預案庫可以事先錄入,和重保通知沒有必然聯繫,可以獨立存在。在系統中是手工從列表中選擇。刪除重保通知,不影響預案。

6. 割接通知和需求單之間是聚合關係。同理,需求單可以獨立於割接通知存在。也就是說刪除割接通知,不影響需求單。

7. 通知和回覆是組合關係。因為回覆不能獨立於通知存在。也就是說刪除通知,該條通知對應的回覆也要級聯刪除。

經過以上的分析,相信大家對類的關係已經有比較好的理解了。大家有什麼其它想法或好的見解,歡迎拍磚。

我是小架,我們下篇文章見!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 學習Python的第一天,也是我第一次寫博客的一天,不怎麼會寫博客,也不怎麼會Python,也不怎麼會寫總結.在學Python的第一天發現自己腦子不是很好用,在學習過程中出現很多錯誤,錯誤錦集如下,哈哈哈哈,要加油.以後要註意不要再犯下麵的錯誤了,不然以後在工作中很難獨立完成,也容易出現很多錯誤,這 ...
  • 之前多篇文章從mysql的底層結構分析、sql語句的分析器以及sql從優化底層分析, 還有工作中常用的sql優化小知識點。面試各大互聯網公司必問的mysql鎖和事務隔離級別,這篇文章給你打神助攻,一飛衝天。 鎖定義 鎖是電腦協調多個進程或線程併發訪問某一資源的機制。 在資料庫中,除了傳統的計算資源 ...
  • 一、instanceof運算符 instanceof是Java語言中的一個二元運算符,它的作用是判斷一個引用類型的變數所指向的對象是否是一個類(或介面、抽象類、父類)的實例,即它左邊的對象是否是它右邊的類的實例該運算符返回boolean類型的數據。 常見的用法為:result=object inst ...
  • [TOC] 原文鏈接: "QRowTable表格控制項(四) 效率優化之 優化數據源" 一、開心一刻 一程式員第一次上女朋友家她媽板著臉問 :你想娶我女兒,有多少存款? 程式員低了下頭:五百! 她媽更鄙視了:才五百塊,買個廁所都不夠! 程式員忙說:不是人民幣! 她媽:就算是美元,還是不夠買廁所! 程式 ...
  • Java中時間API使用詳解 [TOC] 1. 時區概念 國際經度會議(又稱國際子午線會議)上,規定將全球劃分為24個時區(東、西各12個時區)。規定英國的格林尼治天文臺舊址為中時區(零時區)、東1 12區,西1 12區。每個時區橫跨經度15度,時間正好是1小時。最後的東、西第12區各跨經度7.5度 ...
  • 電腦基礎方面的知識,對於一些非科班出身的同學來講,一直是他們心中的痛,而對於科班出身的同學,很多同學在工作之後,也意識到自身所學知識的不足與欠缺,想回頭補補基礎知識。關於電腦基礎的課程很多,內容繁雜,但無論是相關書籍還是大學課程,都有點脫離工作。特別地,電腦基礎知識體系龐雜,想要從零學習或者復 ...
  • 剛剛開始寫微服務,這篇博客就紀念我第一個微服務吧。 1.新建工程 首先要搭建一個微服務環境,我用的是開發環境IDEA,詳細步驟如下: ①打開IDEA File->New->Project 選擇Spring lnitializr 然後點擊next。 填寫包名和項目名字,自己隨便寫,然後next。 進入 ...
  • 一、存儲引擎 1、InnoDB引擎 設計目標是面向線上事務(OLTP)處理的應用。 支持事務、行級鎖、通過多版本併發控制(MVCC)支持高併發、提供一致性非鎖定讀、next-key locking避免幻讀、主鍵聚集索引 2、MyISAM引擎 設計目標是面向OLAP應用。 不支持事務、不支持行鎖、表鎖 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...