UML(一) 類圖及類間關係

来源:http://www.cnblogs.com/jasongj/archive/2016/08/10/5755275.html
-Advertisement-
Play Games

在UML 2.*的13種圖形中,類圖是使用頻率最高的UML圖之一,它表示了類與類之間的關係,幫助開發人員理解系統。它是系統分析和設計階段的重要產物,也是系統編碼和測試的重要模型依據。本文詳細介紹了類間的依賴關係,關聯關係(聚合、組合等),實現關係以及繼承關係的UML表示形式及其在代碼中的實現方式。 ...


原創文章,同步發自作者個人博客http://www.jasongj.com/uml/class_diagram/

UML類圖

UML類圖介紹

在UML 2.*的13種圖形中,類圖是使用頻率最高的UML圖之一。類圖用於描述系統中所包含的類以及它們之間的相互關係,幫助開發人員理解系統,它是系統分析和設計階段的重要產物,也是系統編碼和測試的重要模型依據。

類的UML圖示

在UML類圖中,類使用包含類名、屬性和方法且帶有分隔線的長方形來表示。如一個Employee類,它包含private屬性age,protected屬性name,public屬性email,package屬性gender,public方法work()。其UML類圖表示如下圖所示。
Class in Class Diagram

屬性及方法表示形式

UML規定類圖中屬性的表示方式為

可見性 名稱 : 類型 [=預設值]

方法表示形式為

可見性 方法名 [參數名 : 參數類型] : 返回值類型

方法的多個參數間用逗號隔開,無返回值時,其類型為void

屬性及方法可見性

  • public+表示
  • private-表示
  • protected#表示
  • package~表示

介面的UML圖示

Class in Class Diagram

介面的表示形式與類類似,區別在於介面名須以尖括弧包裹,同時介面無屬性框,方法可見性只可能為public,這是由介面本身的特性決定的。

類間關係

依賴關係

依賴關係說明

依賴關係是一種偶然的、較弱的使用關係,特定事物的改變可能影響到使用該事情的其它事物,在需要表示一個事物使用另一個事物時使用依賴關係。

依賴關係UML表示

UML中使用帶箭頭的虛線表示類間的依賴(Dependency)關係,箭頭由依賴類指向被依賴類。下圖表示Dirver類依賴於Car類
Class in Class Diagram

依賴關係的表現形式

  • B類的實例作為A類方法的參數
  • B類的實例作為A類方法的局部變數
  • A類調用B類的靜態方法

關聯關係

關聯(Association)關係是一種結構化關係,用於表示一類對象與另一類對象之間的聯繫。在Java中實現關聯關係時,通常將一個類的對象作為另一個類的成員變數。

在UML類圖中,用實線連接有關聯關係的類,並可在關聯線上標註角色名或關係名。

在UML中,關聯關係包含如下四種形式

雙向關聯

預設情況下,關聯是雙向的。例如資料庫管理員(DBA)管理資料庫(DB),同時每個資料庫都被某位管理員管理。因此,DBA和DB之間具有雙向關聯關係,如下圖所示。

Dual Association

從上圖可看出,雙向關聯的類的實例,互相持有對方的實例,並且可在關聯線上註明二者的關係,必須同時註明兩種關係(如上圖中的manage和managed by)。

單向關聯

單向關聯用帶箭頭的實線表示,同時一方持有另一方的實例,並且由於是單向關聯,如果在關聯線上註明關係,則只可註明單向的關係,如下圖所示。

One-way Association

自關聯

自關聯是指屬性類型為該類本身。例如在鏈表中,每個節點持有下一個節點的實例,如下圖所示。

Self Association

多重性關聯

多重性(Multiplicity)關聯關係,表示兩個對象在數量上的對應關係。在UML類圖中,對象間的多重性可在關聯線上用一個數字或數字範圍表示。常見的多重性表示方式如下表所示。

表示方式
1..1
0..*
1..*
0..1
m..n

例如一個網頁可能沒有可點擊按鈕,也可能有多個按鈕,但是該頁面中的一個按鈕只屬於該頁面,其關聯多重性如下圖所示。
Multiplicity

聚合關係

聚合(Aggregation)關係表示整體與部分的關係。在聚合關係中,部分對象是整體對象的一部分,但是部分對象可以脫離整體對象獨立存在,也即整體對象並不控制部分對象的生命周期。從代碼實現上來講,部分對象不由整體對象創建,一般通過整體類的帶參構造方法或者Setter方法或其它業務方法傳入到整體對象,並且有整體對象以外的對象持有部分對象的引用。

在UML類圖中,聚合關係由帶箭頭的實線表示,並且實線的起點處以空心菱形表示,如下圖所示。
Aggregation

Java設計模式(六)代理模式 vs. 裝飾模式》一文中所述裝飾模式中,裝飾類的對象與被裝飾類的對象即為聚合關係。

組合關係

組合(Composition)關係也表示類之間整體和部分的關係,但是在組合關係中整體對象控製成員對象的生命周期,一旦整體對象不存在了,成員對象也即隨之消亡。

從代碼實現上看,一般在整體類的構造方法中直接實例化成員類,並且除整體類對象外,其它類的對象無法獲取該對象的引用。

在UML類圖中,組合關係的表示方式與聚合關係類似,區別在於實線以實心菱形表示。
Composition

Java設計模式(六)代理模式 vs. 裝飾模式》一文中所述代理模式中,代理類的對象與被代理類的對象即為組合關係。

泛化關係/繼承關係

泛化(Generalization)關係,用於描述父類與子類之間的關係,父類又稱作超類或者其類,子類又稱為派生類。註意,父類和子類都可為抽象類或者具體類。

在Java中,我們使用面向對象的三大特性之一——繼承來實現泛化關係,具體來說會用到extends關鍵字。

在UML類圖中,泛化關係用帶空心三角形(指向父類)的實線表示。並且子類中不需要標明其從父類繼承下來的屬性和方法,只須註明其新增的屬性和方法即可。
Generalization

實現關係

很多面向對象編程語言(如Java)中都引入了介面的概念。介面與介面之間可以有類與類之間類似的繼承和依賴關係。同時介面與類之間還存在一種實現(Realization)關係,在這種關係中,類實現了介面中聲明的方法。

在UML類圖中,類與介面間的實現關係用帶空心三角形的虛線表示。同時類中也需要列出介面中所聲明的所有方法(這一點與類間的繼承關係表示不同)。
Realization

UML類圖十萬個為什麼

聚合關係與組合關係都表示整體與部分的關係,有何區別?
聚合關係中,部分對象的生命周期獨立於整體對象的生命周期,或者整體對象消亡後部分對象仍然可以獨立存在,同時在代碼中一般通過整體類的帶參構造方法或Setter方法將部分類對象傳入整體類的對象,UML中表示聚合關係的實線以空心菱形開始。
組合關係中,部分類對象的生命周期由整體對象控制,一旦整體對象消亡,部分類的對象隨即消亡。代碼中一般在整體類的構造方法內創建部分類的對象,UML中表示組合關係的實線以實心菱形開始。
同時在組合關係中,部分類的對象只屬於某一個確定的整體類對象;而在聚合關係中,部分類對象可以屬於一個或多個整體類對象。
如同《Java設計模式(六)代理模式 vs. 裝飾模式》一文中所述代理模式中,代理類的對象與被代理類的對象即為組合關係。裝飾模式中,裝飾類的對象與被裝飾類的對象即為聚合關係。

聚合關係、組合關係與關聯關係有何區別和聯繫?
聚合關係、組合關係和關聯關係實質上是對象間的關係(繼承和實現是類與類和類與介面間的關係)。從語意上講,關聯關係中兩種對象間一般是平等的,而聚合和組合則代表整體和部分間的關係。而聚合與組合的區別主要體現在實現上和生命周期的管理上。

依賴關係與關聯關係的區別是?
依賴關係是較弱的關係,一般表現為在局部變數中使用被依賴類的對象、以被依賴類的對象作為方法參數以及使用被依賴類的靜態方法。而關聯關係是相對較強的關係,一般表現為一個類包含一個類型為另外一個類的屬性。


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

-Advertisement-
Play Games
更多相關文章
  • 1、絕對路徑 os.path.abspath("文件名"): 顯示的是一個文件的絕對路勁 eg: 2、相對路徑 os.path.dirname("文件名"): 顯示的是一個文件的相對路徑 eg: 3、總結 一般情況下,絕對路勁函數和相對路徑函數是結合起來用的,特別是在多個文件包之前相互導入 ①os. ...
  • (1)、模塊標準模塊、第三方模塊初識模塊:sys \ os一般標準庫存放路徑 C:\Users\Administrator\AppData\Local\Programs\Python\Python35\Lib第三方引用安裝庫存放路徑:C:\Users\Administrator\AppData\Lo ...
  • Structs2中的Bean預設的是單例,在整個程式運行期間,每個Bean只有一個實例,只要程式在運行,這個實例就一直存在。 對於Action來說,單例就容易出問題。如果客戶端每次提交的參數都是一樣的,後面提交的值把前面提交的值覆蓋了,那問題還不是很大。但是如果存在可選參數的情況,比如上次提交的是參 ...
  • 一、@ModelAttribute 註解 對方法標註 @ModelAttribute 註解,在調用各個目標方法前都會去調用 @ModelAttribute 標記的註解。本質上來說,允許我們在調用目標方法前操縱模型數據。 1.在 @ModelAttribute 標註的方法處向模型中存入數據 說明一下: ...
  • 模擬登陸系統主要練習文件的操作、條件語句、迴圈等 知識點: 1.str.strip([chars]): 刪除字元串前邊和後邊的所有空格,chars參數可以定製需要刪除的字元,可選。 input().strip()可以去除用戶輸入時帶入的空格,避免產生不必要的錯誤。 用法: account = inp ...
  • # # COMMON SPRING BOOT PROPERTIES## This sample file is provided as a guideline. Do NOT copy it in its# entirety to your own application. ^^^# # # COR ...
  • # 本文對正則知識不做詳細解釋,僅作入門級的正則知識目錄。 正則表達式的強大早有耳聞,大一時參加一次選拔考試,題目就是用做個HTML解析器,正則的優勢表現得淋漓盡致。題外話不多講,直接上乾貨: 1. 元字元: 與之對應的還有反義字元,大部分為小寫字母變大寫,例如\D表示匹配非數字的字元。 2. 重覆 ...
  • 回到目錄 關於Lind.DDD.Manager的培訓與學習 講解:張占嶺 花名:倉儲大叔 主要框架:Lind.DDD,Lind.DDD.Manager 關於Lind.DDD.Manager 由於數據模型,資料庫初始化(Code.First自動升級資料庫或者進行資料庫版本的遷移)控制器,View視圖, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...