UML 圖六種箭頭含義詳解:泛化、實現、依賴、關聯、聚合、組合

目錄

一、泛化(Generalization)

概念

表示方法

二、實現(Realization)

概念

表示方法

三、依賴(Dependency)

概念

表示方法

四、關聯(Association)

概念

表示方法

五、聚合(Aggregation)

概念

表示方法

六、組合(Composition)

概念

表示方法


在軟件開發和面向對象設計領域,UML(統一建模語言)圖是極為重要的工具,它能以可視化方式清晰展現系統結構和對象間關系。其中,UML 圖中的六種箭頭分別代表泛化、實現、依賴、關聯、聚合和組合關系,準確理解這些箭頭含義,對高效設計和開發軟件系統至關重要。

一、泛化(Generalization)

概念

泛化用于描述一般與特殊、一般與具體之間的關系。具體描述基于一般描述構建,并對其進行擴展。在 Java 等面向對象編程語言中,泛化體現為繼承關系。例如,“動物” 是一般概念,“狗”“貓” 等則是具體的特殊動物,“狗” 和 “貓” 繼承了 “動物” 的基本特征,如呼吸、移動等,同時又有各自特有的行為和屬性 。

表示方法

使用實線空心三角箭頭表示,箭頭從子類(特殊類)指向父類(一般類)。這種表示直觀地展示了子類對父類的繼承關系,清晰呈現了類的層次結構。

二、實現(Realization)

概念

實現表示類與接口之間的關系,意味著類實現了接口定義的所有特征和行為。在程序開發中,類通過實現接口來明確自身應具備的功能。比如,定義一個 “奔跑” 接口,“運動員” 類實現該接口,就必須提供 “奔跑” 接口所規定的具體實現邏輯。

表示方法

采用空心三角形箭頭的虛線,箭頭由實現類指向接口。這種表示方式清晰區分了類和接口,同時表明了類對接口的實現關系,方便開發者理解系統的功能實現結構。

三、依賴(Dependency)

概念

依賴是一種使用關系,即一個類的實現需要借助另一個類的協助。在 Java 中,當一個類的方法參數需要傳入另一個類的對象時,就表明該類依賴于被傳入對象的類。例如,“訂單” 類的計算總價方法需要傳入 “商品” 類對象獲取商品價格,“訂單” 類就依賴 “商品” 類。

表示方法

用虛線箭頭表示,箭頭從依賴類(使用協助的類)指向被依賴類(提供協助的類)。這種表示簡潔明了,幫助開發者快速識別類之間的依賴關系,在代碼維護和修改時,能準確把握一處改動可能對其他類產生的影響。

四、關聯(Association)

概念

關聯表示類與類之間的連接,使一個類能知曉另一個類的屬性和方法。與依賴關系相比,關聯關系更強,不是偶然或臨時的,通常是長期存在的。在 Java 中,若一個類的全局變量引用了另一個類,就表示這兩個類存在關聯關系。例如,“教師” 類和 “課程” 類,一位教師可以教授多門課程,“教師” 類中通過全局變量關聯 “課程” 類,用于記錄其所教授的課程信息。

表示方法

使用實線箭頭,箭頭從一個類指向另一個類。這種表示直觀展示了類之間的關聯方向和關系,有助于理解系統中不同類之間的交互和數據傳遞路徑。

五、聚合(Aggregation)

概念

聚合是關聯關系的特殊形式,屬于強關聯關系,用于表示整體和個體之間的關系,即 “has - a” 關系。整體與個體各自有獨立的生命周期,部分可以被多個整體對象共享。以 “學校” 和 “學生” 為例,一個學校包含多個學生,學生可以在不同學校間流動,學生的生命周期并不完全依賴于某一個學校。

表示方法

通過尾部為空心菱形的實線箭頭(也可以沒有箭頭)表示,箭頭從整體類指向部分類。這種表示在體現整體與部分關系的同時,強調了部分的獨立性和可共享性,方便開發者在設計系統時考慮對象的復用和管理。

六、組合(Composition)

概念

組合同樣是關聯關系的特例,也是整體與部分的關系,即 “contains - a” 關系,比聚合關系更強。部分與整體的生命周期緊密相連,整體生命周期結束時,部分的生命周期也隨之結束,且部分不能被多個整體共享。比如 “人體” 和 “四肢”,四肢是人體的一部分,人體不存在了,四肢也就失去了意義,且一個四肢只能屬于一個特定的人體。

表示方法

用尾部為實心菱形的實線箭頭(也可無箭頭)表示,箭頭從整體類指向部分類。這種表示突出了整體與部分之間緊密的包含關系和生命周期的一致性,幫助開發者準確把握對象之間的組成結構和生命周期管理。

掌握 UML 圖這六種箭頭代表的關系,能幫助開發者更高效地進行軟件系統設計、代碼編寫和維護。無論是分析現有系統結構,還是規劃新系統架構,準確運用這些關系都能使設計更合理、代碼更易讀且可維護性更強。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899261.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899261.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899261.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android Logcat總結

文章目錄 Android Logcat總結日志格式過濾日志正向過濾反向過濾正則過濾日志等級 Android Logcat總結 日志格式 用法: Log.e("TAG", "hello") Log.i("TAG", "hello") Log.d("TAG", "hello")依次為&…

Unity UGUI - 六大基礎組件

目錄 一、Canvas上 1. Canvas:復制渲染子UI控件 2. ?Canvas Scaler?:畫布分辨率自適應 3. Graphics Raycaster:射線事件響應 4. ?Rect Transform?:UI位置錨點對齊 二、Event System上 5. Event System 6. Standalone …

基于Springboot的網上訂餐系統 【源碼】+【PPT】+【開題報告】+【論文】

網上訂餐系統是一個基于Java語言和Spring Boot框架開發的Web應用,旨在為用戶和管理員提供一個便捷的訂餐平臺。該系統通過簡化餐飲訂購和管理流程,為用戶提供快速、高效的在線訂餐體驗,同時也為管理員提供完善的后臺管理功能,幫助…

css 實現閃爍光標

要實現閃爍光標&#xff08;比如文本輸入框內常見的閃爍效果&#xff09;&#xff0c;可以使用 CSS 動畫。下面是一個簡單的方法&#xff1a; 代碼示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta n…

從JVM底層揭開Java方法重載與重寫的面紗:原理、區別與高頻面試題突破

&#x1f31f;引言&#xff1a;一場由方法調用引發的"血案" 2018年&#xff0c;某電商平臺在"雙十一"大促期間遭遇嚴重系統故障。 技術團隊排查發現&#xff0c;問題根源竟是一個繼承體系中的方法重寫未被正確處理&#xff0c;導致訂單金額計算出現指數級…

詳解Spark executor

在 Apache Spark 中&#xff0c;Executor&#xff08;執行器&#xff09; 是運行在集群工作節點&#xff08;Worker Node&#xff09;上的進程&#xff0c;負責執行具體的計算任務并管理數據。它是 Spark 分布式計算的核心組件之一&#xff0c;直接決定了任務的并行度和資源利用…

適配器模式及其典型應用

引言 適配器模式&#xff08;Adapter Pattern&#xff09;是一種結構型設計模式&#xff0c;它允許不兼容的接口協同工作。適配器模式通過創建一個適配器類來轉換一個類的接口&#xff0c;使其能夠與另一個類的接口兼容。這種模式在實際開發中非常有用&#xff0c;特別是在需要…

如何在 Vue 項目中使用v - for指令進行列表渲染,如何優化其性能?

大白話如何在 Vue 項目中使用v - for指令進行列表渲染&#xff0c;如何優化其性能&#xff1f; 在Vue項目里&#xff0c;咱們常常會碰到要把一組數據渲染成列表的狀況。這時候&#xff0c;v-for指令就派上大用場啦&#xff01;它能讓咱們輕松地把數據數組里的每個元素渲染成對…

qt QQuaternion詳解

1. 概述 QQuaternion 是 Qt 中用于表示三維空間中旋轉的四元數類。它包含一個標量部分和一個三維向量部分&#xff0c;可以用來表示旋轉操作。四元數在計算機圖形學中廣泛用于平滑的旋轉和插值。 2. 重要方法 默認構造函數 QQuaternion::QQuaternion(); // 構造單位四元數 (1…

如何將爬取的評論數據存儲到數據庫?

在使用Python爬蟲獲取1688商品評論后&#xff0c;將這些數據存儲到數據庫中是一個常見的需求。這樣可以方便后續的數據分析、查詢和管理。本文將詳細介紹如何將爬取的評論數據存儲到數據庫中&#xff0c;包括MySQL和SQLite兩種常見的數據庫。 一、準備工作 1. 安裝必要的Pytho…

Maven中為什么有些依賴不用引入版本號

先給出一個例子&#xff1a; <parent><artifactId>sky-take-out</artifactId><groupId>com.sky</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>sky-s…

Nginx相關漏洞解析

一、CRLF注入漏洞 原理&#xff1a;Nginx將傳入的url進行解碼&#xff0c;對其中的%0a%0d替換成換行符&#xff0c;導致后面的數據注入至頭部&#xff0c;造成CRLF 注入漏洞 1、開環境 2、訪問網站&#xff0c;并抓包 3、構造請求頭 %0ASet-cookie:JSPSESSID%3D1 這樣就可以…

RUBY報告系統

我們常用GFP及其變體如RFP、YFP、mCherry等作為基因表達的報告蛋白——需要熒光顯微鏡制片觀察&#xff1b;此外還有GUS或熒光素酶作為報告酶——需要添加底物。 RUBY報告系統則與眾不同&#xff0c;其作用原理是&#xff1a;將酪氨酸轉化為鮮艷的紅色甜菜堿&#xff0c;無需使…

[力扣每日一練]關于MySQL和pandas的正則表達式應用

一&#xff1a;題目要求 表&#xff1a;Users-------------------------- | Column Name | Type | -------------------------- | user_id | int | | email | varchar | -------------------------- (user_id) 是這張表的唯一主鍵。 每一行包含用…

office_word中使用宏以及DeepSeek

前言 Word中可以利用DeepSeek來生成各種宏&#xff0c;從而生成我們需要各種數據和圖表&#xff0c;這樣可以大大減少我們手工的操作。 1、Office的版本 采用的是微軟的office2016&#xff0c;如下圖&#xff1a; 2、新建一個Word文檔 3、開啟開發工具 這樣菜單中的“開發工具…

深度學習框架PyTorch——從入門到精通(10)PyTorch張量簡介

這部分是 PyTorch介紹——YouTube系列的內容&#xff0c;每一節都對應一個youtube視頻。&#xff08;可能跟之前的有一定的重復&#xff09; 創建張量隨機張量和種子張量形狀張量數據類型 使用PyTorch張量進行數學與邏輯運算簡單介紹——張量廣播關于張量更多的數學操作原地修改…

Oracle 10G DG 修復從庫-磁盤空間爆滿導致從庫無法工作

一、背景 由于近期在做應用升級和系統改造&#xff0c;導致幾天沒怎么觀察DG庫的狀態。這幾天歸檔日志暴漲導致磁盤空間用盡&#xff0c;從庫無法接收主庫的歸檔日志&#xff0c;且從庫無法工作。經過檢查&#xff0c;發現從庫所需要的日志在主庫均存在。所以當前文檔使用歸檔…

【踩坑系列】使用httpclient調用第三方接口返回javax.net.ssl.SSLHandshakeException異常

1. 踩坑經歷 最近做了個需求&#xff0c;需要調用第三方接口獲取數據&#xff0c;在聯調時一直失敗&#xff0c;代碼拋出javax.net.ssl.SSLHandshakeException異常&#xff0c; 具體錯誤信息如下所示&#xff1a; javax.net.ssl.SSLHandshakeException: sun.security.validat…

算法基礎——模擬

目錄 1 多項式輸出 2.蛇形方陣 3.字符串的展開 模擬&#xff0c;顧名思義&#xff0c;就是題?讓你做什么你就做什么&#xff0c;考察的是將思路轉化成代碼的代碼能?。這類題?般較為簡單&#xff0c;屬于競賽??的簽到題&#xff08;但是&#xff0c;萬事?絕對&#xff…

PrimeTime生成.lib竟暗藏PG添加Bug

在primeTime里生成lib&#xff0c;如何能帶上相關的pg信息&#xff1f; 這是一位群友的發問&#xff0c;就這個問題總結了下可能的原因和解決步驟&#xff1a; 概念 PrimeTime是Synopsys的靜態時序分析工具&#xff0c;通常用于在設計的各個階段進行時序驗證。 1&#xff09…