網站首頁 編程語言 正文
一、概述
UML類圖用來定義系統中的類,包括描述類的結構和類之間的關系。類圖的主要作用于描述系統的靜態結構。
類圖的基本模型元素如下:
我們可以看到,一個類圖表示為長方形,分為3部分,最上面是類名,中間是類的屬性,下面是類的操作。描述信息使用?<< >>
?包裹。
類圖中的實體如下:
1、類名
正體字說明類是可被實例化的,斜體字說明類為抽象類。
2、屬性
如圖:
屬性一般通過如上的格式表示——<訪問權限><屬性名>:<屬性類型>=<初始值>
對于可見性?。骸 ?/p>
- +表示public,
- -表示private,
- #表示protected,
- 沒有符號表示默認包訪問權限
(如果一個屬性只在類的內部使用,一般稱為Attribute。若提供了相應的get、set方法,一般稱為Property)
3、方法
如圖:
方法一般通過如上格式表示——<訪問權限><方法名>:(<參數1名>:<參數1類型>,<參數2名>:<參數2類型>):<返回值類型>
靜態方法用下劃線表示。
抽象方法,整條操作都用斜體表示。
4、接口
接口是一系列操作的集合,它指定了提供的一系列服務。
- 接口
- 抽象類
抽象類和接口都是類名用斜體表示,接口還可以用一個圓圈表示。
二、關系
在UML類圖中,常見的有以下幾種關系:
- 依賴(Dependency)
- 關聯(Association)
- 聚合(Aggregation)
- 組合(Composition)
- 泛化(Generalization)
- 實現(Realization)
各種關系的強弱順序:
(耦合度依次增強)
依賴 < 關聯 <?聚合 < 組合?<?泛化 < 實現?
1. 依賴(Dependency)
依賴關系是一種使用的關系,即一個類的實現需要另一個類的協助,所以要盡量不使用雙向的互相依賴.(偶然的弱關系)
【代碼表現】:局部變量、方法的參數或者對靜態方法的調用
【箭頭及指向】:帶箭頭的虛線,指向被使用者
2. 關聯(Association)
關聯關系是一種擁有的關系,它使一個類知道另一個類的屬性和方法;如:老師與學生,丈夫與妻子關聯可以是雙向的,也可以是單向的。雙向的關聯可以有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。例如:學生擁有課程實例。
【代碼體現】:成員變量
【箭頭及指向】:帶普通箭頭的實心線,指向被擁有者
上圖中,老師與學生是雙向關聯,老師有多名學生,學生也可能有多名老師。但學生與某課程間的關系為單向關聯,一名學生可能要上多門課程,課程是個抽象的東西他不擁有學生。
下圖為自身關聯:
3. 聚合(Aggregation)
聚合關系是整體與部分的關系,且部分可以離開整體而單獨存在。如車和輪胎是整體和部分的關系,輪胎離開車仍然可以存在。(Has-A )
聚合關系是關聯關系的一種,是強的關聯關系;關聯和聚合在語法上無法區分,必須考察具體的邏輯關系。
【代碼體現】:成員變量
【箭頭及指向】:帶空心菱形的實心線,菱形指向整體
4. 組合(Composition)
組合關系是整體與部分的關系,但部分不能離開整體而單獨存在。如公司和部門是整體和部分的關系,沒有公司就不存在部門。。(Has-A )
組合關系是關聯關系的一種,是比聚合關系還要強的關系,它要求普通的聚合關系中代表整體的對象負責代表部分的對象的生命周期。
【代碼體現】:成員變量
【箭頭及指向】:帶實心菱形的實線,菱形指向整體
5. 泛化(Generalization)
泛化關系是一種繼承關系,表示一般與特殊的關系,它指定了子類如何特化父類的所有特征和行為。例如:老虎是動物的一種,即有老虎的特性也有動物的共性。(IS-A)
【箭頭指向】:帶三角箭頭的實線,箭頭指向父類
6. 實現(Realization)
實現關系是一種類與接口的關系,表示類是接口所有特征和行為的實現.例如:大燕是飛翔的關系。
【箭頭指向】:帶三角箭頭的虛線,箭頭指向接口
三、應用舉例
下面這張UML圖,比較形象地展示了各種類圖關系:
原文鏈接:https://www.cnblogs.com/springsnow/p/9389699.html
相關推薦
- 2022-05-06 SQL查看表字段信息如:字段名、字段類型、字段精度、字段大小、索引、主鍵等
- 2022-06-18 C語言?從根本上理解指針_C 語言
- 2023-02-10 docker容器間互相訪問(docker?bridge網絡)_docker
- 2023-03-23 Nginx實現http自動跳轉到https_nginx
- 2022-06-26 C++中declspec(dllexport)和declspec(dllimport)?的用法介紹_
- 2022-04-10 element input輸入框千分位無法回顯問題解決方法
- 2022-02-22 Uncaught RangeError: Maximum call stack size excee
- 2022-05-22 Python?IO文件管理的具體使用_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支