統一建模語言UML---類圖

来源:https://www.cnblogs.com/jilodream/archive/2022/09/14/16693511.html
-Advertisement-
Play Games

什麼是統一建模語言,來看看百科中的介紹統一建模語言(Unified Modeling Language,UML)是一種為面向對象系統的產品進行說明、可視化和編製文檔的一種標準語言,是非專利的第三代建模和規約語言。UML是面向對象設計的建模工具,獨立於任何具體程式設計語言。簡單來說UML就是脫離於具體 ...


什麼是統一建模語言,來看看百科中的介紹
統一建模語言(Unified Modeling Language,UML)是一種為面向對象系統的產品進行說明、可視化和編製文檔的一種標準語言,是非專利的第三代建模和規約語言。UML是面向對象設計的建模工具,獨立於任何具體程式設計語言。
簡單來說UML就是脫離於具體編程語言,以面向對象的形式,對產品進行說明的一種文檔語言。
我們今天這裡只說類圖:Class diagram
類圖是一種描述一個系統中類、介面的靜態結構,以及靜態關係的一種圖。是最常用也是唯一可以直接映射成面向對象語言的圖。
類圖主要分為兩部分:
1、類、介面的內部定義
2、類、介面之間的關係
這兩部分都簡單,我們逐一來看:(防盜連接:本文首發自http://www.cnblogs.com/jilodream/ )
(一)類、介面的內部定義
結構如圖:

主要分為三個部分:

類名、屬性(欄位)、方法(功能、能力)
類名:通暢採用大駝峰規範命名
屬性:一般用以下格式
可見性 屬性名稱: 屬性類型 [=預設值]
可見性如下表:

方法:一般用以下格式
可見性 方法名稱: 返回類型
可見性的表達方式和屬性的規範一樣。我們來舉個例子,如下圖:

(二)類、介面之間的關係
這種關係存在類和介面之間,介面和介面之間,類和類之間。
我們一般將關係分為六種類型:

繼承關係
實現關係

依賴
關聯

聚合
組合

我一般將這些分為三類

1、繼承和實現
這倆關係非常相像
繼承關係,代表的是父類和子類之間的關係,這種類關係的耦合程度是最強的。我們一般用“實線+空心三角”的形式標記,箭頭由子類指向父類。
實現關係,代表的是介面和實現類之間的關係,這種類關係的程度非常強,但是還是要弱於繼承關係,我們一般用“虛線+空心三角”的形式標記,箭頭由實現類指向介面。
如下圖:機械鍵盤類繼承自鍵盤類,鍵盤類實現了鍵盤介面。同時我們添加了UML的註釋文件,解釋了軸類型屬性。(防盜連接:本文首發自http://www.cnblogs.com/jilodream/ )

實現(鍵盤介面+鍵盤):

 

繼承(鍵盤+機械鍵盤):

 

2、聚合和組合
這倆關係也非常相近
都是代表一個類是另外一個類的組成部分,但是為了區分耦合的強弱關係,我們才進行區分:
聚合代表一個類是另外一個類的成員,但是可以獨立開來,比如課桌和教室,黑板和教室,他們都屬於教室的組成部分,但是可以獨立存在,即使教室不存在了,課桌仍然可以獨立存在,或者是用於其他教室。教室和課桌之間的依賴關係並不是共存亡,也就是相同生命周期的關係。
我們一般用“實線+空心菱心”的形式標記,菱形指向集合類。
組合形式則是更強的依賴關係。代表一個類是另外一個類的不可或缺的組成部分,如果缺失,那麼集合類也不能再稱之為該類,兩者的生命周期一般是同步的。例如太陽系是由太陽+行星組成。如果如果沒有太陽了,那麼太陽系只能算作是一個 星雲,不能再稱之為太陽系。兩者的生命周期是同步的。
再或者電腦是由顯示器鍵盤主機等器件組成的,如果 沒有主機,那麼就不能稱之為電腦,兩者的生命周期是同步的,沒有主機的一堆設備,不能稱之為電腦。我們一般用“實線+實心菱心”的形式標記,菱形指向組合類。
要註意組合和聚合 其實沒有特別明顯的界限,二者的界限是有些模糊的。

聚合(學校+老師):

組合(電腦+鍵盤):

3、依賴、關聯

這倆關係也非常相近
我們一般將非常弱,沒有直接耦合,只存在於某個方法中的耦合關係(臨時變數的使用)稱為依賴關係。比如某個方法需要獲取下時間,那麼對時間類就是依賴。所以這種關係是類與類之間最弱的一種耦合關係,它只存在於方法的依賴中,並不是對象之間直接依賴。我們用“虛線+箭頭”表示,箭頭指向被依賴的對象。
關聯關係是對象之間的直接飲用關係,這是類之間最常用的一種關係。我們一般將之稱為一般關聯關係、聚合關係、組合關係。上文中的說的聚合、組合關係就屬於這裡的關聯關係。關聯關係用“實線+箭頭”表示,箭頭指向被依賴的對象。如公司依賴員工,則公司指向員工,但是員工其實也可以同時在多加公司任職。所以員工可以也依賴不同公司,像這種互相依賴的我們稱之為雙向關聯。雙向關聯我們用一根實線來表示。除此之外還有一種特殊情況,就是自關聯,也就是一個類的某個屬性還是自身,我們需要用箭頭再指向自己。(防盜連接:本文首發自http://www.cnblogs.com/jilodream/ )

依賴(老師+書):

 

關聯(司機+車):

雙向關聯(老師+班級):

 

如果你覺得寫的不錯,歡迎轉載和點贊。 轉載時請保留作者署名jilodream/王若伊_恩賜解脫(博客鏈接:http://www.cnblogs.com/jilodream/


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

-Advertisement-
Play Games
更多相關文章
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 前段時間公司需要開發一個後臺管理系統,時間比較急迫,一兩天時間。想一想自己一點一點的搭建起來可能性不太大,就想著有沒有現成的可以改一改,就找到了基於Vue.js和iview組件庫的現成後臺,拿來改改就可以了 iview admin。 一、 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 一、效果圖 具體效果可參考iview官方界面iView - 一套高質量的UI組件庫 大波浪效果,使用的是three.js的官方例子,需要先安裝three.js支持 npm install --save three 具體可以看 three. ...
  • 每日3題 1 以下代碼執行後,控制臺中的輸出內容為? var company = { address: "chengdu", }; var obj = Object.create(company); delete obj.address; console.log(obj.address); 2 以下 ...
  • 終於,在漫長的等待下,容器查詢(CSS Container Queries)將在 Chrome 105 版本得到正式的支持! 而目前,我們也能在 Chrome Canary 版本中,或者在 Chrome 93~104 通過開啟 Enable CSS Container Queries 特性搶先體驗。 ...
  • 基於全屏iframe的微前端框架--擎天,解決了iframe UI不同步、URL不同步、數據不共用的難題,並充分發揮了iframe作為頁面容器的優勢,實現了父子應用非同步載入、子應用瞬間切換的能力,從而將微前端項目達到單體應用的體驗。 ...
  • 不知不覺,掘金關註者人數已經超過 1000 人,因此特地做了這個頁面紀念一下,感謝大家關註 🙇‍ ,希望博客園的粉絲也漲漲。後續也將繼續努力,持續輸出一些有價值的文章。本文內容涉及的技術棧為 React + Three.js + Stulus,本文中主要包含的知識點包括:圓錐幾何體 ConeGeo... ...
  • 一、系統架構的演變 1、技術架構發展歷史時間軸 ①單機垂直拆分:應用間進行瞭解耦,系統容錯提高了,也解決了獨立應用發佈的問題,存在單機計算能力瓶頸。 ②集群化負載均衡可有效解決單機情況下併發量不足瓶頸。 ③服務改造架構 雖然系統經過了垂直拆分,但是拆分之後發現有重覆的功能,比如,用戶註冊、發郵件等等 ...
  • 外觀模式(Facade Pattern)隱藏系統的複雜性,並向客戶端提供了一個客戶端可以訪問系統的介面。這種類型的設計模式屬於結構型模式,它向現有的系統添加一個介面,來隱藏系統的複雜性。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...