【軟件工程】一篇入門UML建模圖(狀態圖、活動圖、構件圖、部署圖)

🌈?個人主頁:十二月的貓-CSDN博客
🔥?系列專欄:?🏀軟件開發必練內功_十二月的貓的博客-CSDN博客

💪🏻?十二月的寒冬阻擋不了春天的腳步,十二點的黑夜遮蔽不住黎明的曙光?

目錄

1. 前言

2. UML概述

2.1?UML的分類與功能

2.2 UML的語法與各圖關系??

3. 四種圖的概述

3.1 狀態圖

3.2?活動圖(Activity Diagram)

3.3?構件圖(Component Diagram)

3.4 部署圖(Deployment Diagram)

4. 狀態圖

4.1?狀態圖概要

4.2?狀態圖中的事物及解釋

4.3?狀態的可選活動表?

4.4 實例?

(1)網上銀行登錄系統?

5. 活動圖?

5.1?活動圖概要

5.2 活動圖和狀態圖的關系

5.3?活動圖事物?編輯

5.4?活動圖關系

5.5?實例

?編輯

6.?構件圖

6.1?構件圖概要

6.2?構件圖中的事物及解釋

6.3?構件圖中的關系及解釋

6.4 實例

實例1

實例2

7.?部署圖

7.1?部署圖概要

?7.2?部署圖中的事物及解釋?編輯

7.3?部署圖中的關系及解釋

7.4 實例

實例1

實例2

7.5??部署圖與構件圖的關系

8. 總結?


1. 前言

2. UML概述

所謂UML(Unified Modeling Language,統一建模語言),一種用來對軟件密集系統進行可視化建模的語言。

這樣的概念大概解釋了UML是什么,不過還不夠直觀。

我們可以換個問題,UML做到了什么,讓人們愿意為之喝彩?

答案就是,它統一了各種方法對不同類型的系統、不同開發階段以及不同內部概念的不同觀點,從而有效的消除了各種建模語言之間不必要的差異。它是一種通用的建模語言,可以為許多面向對象建模方法的用戶廣泛使用。

如此一來,UML的本質也就呼之欲出了。UML的本質就是為了交流

一句話:一個UML就能完成整個軟件開發中的交流需要

2.1?UML的分類與功能

UML2.0一共有12種圖形(UML1.5定義了9種,2.0增加了3種)。

分別是:用例圖、類圖、對象圖、狀態圖、活動圖、順序圖、協作圖、構件圖、部署圖9種,包圖、組合結構圖、交互概覽圖3種。

?

“UML無用論”在很多年前就被提了出來,更是引發了業內不少爭議。有用戶將它捧上天,甚至“封神”,也有人斥之為垃圾,甚至稱其“反人類”。

那么問題來了,UML 真的無用嗎?或者用題主的話來說,UML 還有用嗎?

我想先說自己的判斷:UML 依然有用

之所以這么判斷,主要基于以下三點事實:

第一,圖比代碼更清晰

在復雜需求中,UML圖是非常必要的。

用例圖描述系統的外部交互、序列圖描述系統的內部交互、狀態圖描述系統的動態特性、部署圖描述系統的物理節點、類圖與對象圖描述依賴關系......

所有的圖都是協助團隊策劃稿能源更高效地厘清問題,掌握知識,高效解決問題的。

試問下,在敏捷開發中,如果沒有流程圖、序列圖、狀態圖進行輔助,你如何在代碼過程中保證業務流程、系統前后端、多個系統切換開發做到敏捷高效?

在敏捷開發時,面對稍復雜點的需求,如果要求團隊提前用UML圖厘清問題,后續填坑可以少很多。

?

第二,“假敏捷開發”太多

正如@蘿魏紫 所言,中國假敏捷太多了,以敏捷為借口少寫甚至不寫文檔,以至于大量項目在本不應出問題的溝通層面出現大量問題,沒有統一的標準,溝通不出問題才怪。

UML統一了各種方法對不同類型的系統、不同開發階段以及不同內部概念的不同觀點,從而有效的消除了各種建模語言之間不必要的差異。

不過,我們也必須注意到,UML不是萬能的,但是在系統研發中的溝通作用,效果還是比較好的。

第三,UML 在業界依然在被應用

UML的實際應用例子,大家在這個問答中可以找到不少:

比如,@Milo Yip 表示,“騰訊沒有統一、從上而下的軟件工程方法論,畢竟業務差異很大。但在各種文檔及簡報中也經常以 UML 圖來呈現一些信息,算是一種輔助溝通的方法。”另外,“我在面試時會讓候選人做一些簡單設計,用 UML 最好,不會的也可用他熟悉的編程語言表示。”

@fantiny 也舉了自己前公司產品ExchangeUSE的例子,據介紹,當時UML在前期需求分析和架構設計階段起到一定的作用,包括需求分析與共通化整理,系統模塊化分析工具,架構設計的交流工具,實現合理性的分析工具。?

2.2 UML的語法與各圖關系?

各圖關系:?

?

UML語法描述:?

3. 四種圖的概述

? ? ? ?這一部分先對 狀態圖、活動圖、構件圖和部署圖 做一個簡單的概述。

3.1 狀態圖

? ? ? ?狀態圖是一個類對象所可能經歷的所有歷程的模型圖。狀態圖由對象的各個狀態和連接這些狀態的轉換組成。

狀態圖描述對象:一個類對象

狀態圖組成:一個類對象的各種狀態、狀態轉化動作

?

3.2?活動圖(Activity Diagram)

  1. 活動圖是狀態圖的一個變體,用來描述執行算法的工作流程中涉及的活動
  2. 活動圖描述了一組順序的或并發的活動

?

狀態圖和活動圖:

? ? ? ? 1、狀態圖針對每一個類

? ? ? ? 2、活動圖針對整合算法系統

3.3?構件圖(Component Diagram)

? ? ? ?構件圖為系統的構件建模型—構件即構造應用的軟件單元—還包括各構件之間的依賴關系,以便通過這些依賴關系來估計對系統構件的修改給系統可能帶來的影響。??

構件圖(Component Diagram) 是 UML(統一建模語言)中用于描述系統物理構件及其相互關系的圖。它展示了系統中各個“構件”(如可執行程序、庫、模塊等)之間的關系,以及它們如何通過接口進行交互。構件圖通常用于描述系統的靜態結構,尤其是關注系統的物理實現層次。

構件圖的主要元素:

  1. 構件(Component):表示系統中的一個物理模塊或部件,它是一個可執行的或可部署的單位。構件可以是程序文件、庫文件、Web 服務、數據庫、或者任何其他具有獨立功能的部分。

    • 符號:構件通常用一個矩形表示,矩形的右上角有一個小的折角。
  2. 接口(Interface)構件之間的交互通常通過接口完成。接口定義了構件提供的服務或其所需的服務。

    • 符號:接口通常是一個小圓圈或帶有名字的“半圓”。
  3. 依賴關系(Dependency):構件圖中,構件之間可能有依賴關系,這表示一個構件依賴于另一個構件的功能或服務。

    • 符號:依賴關系通常用帶箭頭的虛線表示,箭頭指向被依賴的構件。
  4. 端口(Port):端口是構件和外界進行交互的地方,通常用來定義通過接口暴露的功能。

    • 符號:端口通常表示為構件矩形的一部分,形狀如小小的矩形或圓圈。

3.4 部署圖(Deployment Diagram)

? ? ? ?部署視圖描述位于節點實例上的運行構件實例的安排。節點是一組運行資源,如計算機、設備或存儲器。這個視圖允許評估分配結果和資源分配。?

4. 狀態圖

4.1?狀態圖概要

  • 說明對象在它的生命期中響應事件所經歷的狀態序列,以及它們對那些事件的響應
  • 揭示Actor、類、子系統和組件的復雜特性。 為實時系統建模。
  • 對象的狀態是指在這個對象的生命期中的一個條件或狀況,在此期間對象將滿足某些條件、執行某些活動,或等待某些事件。
  • 轉移是由一種狀態到另一種狀態的遷移。這種轉移由被建模實體內部或外部事件觸發。
  • 對一個類來說,轉移通常是調用了一個可以引起狀態發生重要變化的操作的結果。

4.2?狀態圖中的事物及解釋

?

4.3?狀態的可選活動表?

4.4 實例?

(1)網上銀行登錄系統?

5. 活動圖?

5.1?活動圖概要

  • 描述系統的動態行為
  • 包含活動狀態(ActionState),活動狀態是指業務用例的一個執行步驟或一個操作,不是普通對象的狀態。
  • 活動圖適合描述在沒有外部事件觸發的情況下的系統內部的邏輯執行過程;否則,狀態圖更容易描述。
  • 類似于傳統意義上的流程圖。
  • 活動圖主要用于:
    + 業務建模時,用于詳述業務用例,描述一項業務的執行過程;
    + 設計時,描述操作的流程。

5.2 活動圖和狀態圖的關系

  • 活動圖和狀態圖都體現狀態在活動中變化。
  • 狀態圖是一個類對象在活動中狀態發生變化。
  • 活動圖是整個系統在活動中狀態發生變化。

5.3?活動圖事物

5.4?活動圖關系

5.5?實例

  • 本活動圖描述一個處理訂單的用例執行過
    (1)執行setup order
    (2)根據order的類型是執行不同的分支:
    - single order:執行assign seat、charge credit card
    - subscription:同時執行assignseats、debit account或 award bonus
    - single order與subscription兩步可同時進行

    (3) 最后mail packet。

6.?構件圖

6.1?構件圖概要

  • 構件圖用于靜態建模,是表示構件類型的組織以及各種構件之間依賴關系的圖。
  • 構件圖通過對構件間依賴關系的描述來估計對系統構件的修改給系統可能帶來的影響。

6.2?構件圖中的事物及解釋

  • 可替換的物理部分包括軟件代碼、腳本或命令行文件,也可以表示運行時的對象,文檔,數據庫等。
  • 節點(node)是運行時的物理對象,代表一個計算機資源。具體請參見教程“部署圖(deployment diagram)”部分。

6.3?構件圖中的關系及解釋

6.4 實例

實例1

  • 圖中的構件名稱是Dictionary字典。
  • 該構件向外提供兩個接口,即兩個服務Spell-check拼寫檢查、Synonyms同義詞。

實例2

  • 圖中“Planner計劃者”構件向外提供一個“update更新”接口服務。
  • 同時,該構件要求外部接口提供一個“Reservations預定”服務。

7.?部署圖

7.1?部署圖概要

  • 部署圖用于靜態建模,是表示運行時過程節點結構、構件實例及其對象結構的圖
  • 如果含有依賴關系的構件實例放置在不同節點上,部署視圖可以展示出執行過程中的瓶頸。
  • 部署圖的兩種表現形式:實例層部署圖和描述層部署圖(會在后面的實例中給出)。

?7.2?部署圖中的事物及解釋

7.3?部署圖中的關系及解釋

7.4 實例

實例1

  • 實例層部署圖描述各節點和它們之間的連接。
  • 本圖中的信息與上張描述層部署圖中的內容是相互對應的。
  • 圖中的關系是各個節點之間存在的通信關系。

實例2

  • 描述層部署圖表示了系統中的各節點和每個節點包含的構件。
  • 圖中包括的各種關系如下:
    • 通信鏈關系(不帶箭頭的直線)
      • TicketServe票服務器與Kiosk信息廳之間存在一對多的通信關聯;與SalesTerminal售票終端也存在一對多的通信關聯;
    • 依賴關系(帶箭頭的虛線)
      • TicketSeller售票構件依賴CreditCardCharges信用卡付款構件和TicketDB票數據庫構件提供的服務。

7.5??部署圖與構件圖的關系

部署圖(Deployment Diagram)構件圖(Component Diagram) 都是 UML 中用于描述系統的靜態結構,但它們關注的層次不同,功能上也有所區別。

  1. 構件圖 主要關注系統的邏輯結構和軟件層面,描述系統中的各個構件(如模塊、庫、服務等)及其相互關系,強調模塊間的依賴、接口和交互。

  2. 部署圖 主要關注系統的物理部署和硬件層面,展示節點(如服務器、工作站、設備等)之間的關系,并標明哪些構件部署到哪些節點上。

關系:

  • 構件圖?描述的是系統的軟件組件及其內部結構,而?部署圖?描述的是這些組件如何在物理硬件上部署和運行。
  • 構件圖?中的構件通常會在?部署圖?中被映射到一個或多個節點上,顯示它們的實際部署情況。
  • 例如,構件圖中的業務邏輯組件可能會被部署到一個服務器節點上,而數據庫組件則可能被部署到另一臺數據庫服務器節點。

8. 總結?

本文到這里就結束啦~~

目前已經完成:

【軟件工程】一篇入門UML建模圖(類圖)_uml圖教程-CSDN博客

【軟件工程】一篇入門UML建模圖(用例圖、對象圖、順序圖與協作圖)-CSDN博客

本篇講述:狀態圖、活動圖、構件圖、部署圖

如果覺得對你有幫助,友友們可以點個贊,收個藏呀~

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

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

相關文章

【C語言】數組篇

目錄 引言一維數組數組的定義數組的初始化完全初始化部分初始化省略數組長度 數組元素的訪問 多維數組二維數組的定義二維數組的初始化完全初始化部分初始化省略第一維長度 二維數組元素的訪問 遍歷數組元素遍歷一維數組遍歷二維數組 數組作為函數參數一維數組作為函數參數二維…

OpenCV視頻解碼性能優化十連擊(實測幀率提升300%)

解密工業級視頻處理優化方案!從硬件加速到多線程榨干CPU/GPU性能,附RTSP流調優參數與內存泄漏排查技巧。 🔧 優化前準備 環境檢測腳本 import cv2# 驗證硬件加速支持 print("CUDA支持:", cv2.cuda.getCudaEnabledDeviceCount() &…

基于編譯器特性淺析C++程序性能優化

最近在惡補計算機基礎知識,學到CSAPP第五章的內容,在這里總結并且展開一下C程序性能優化相關的內容。 衡量程序性能的方式 一般而言,程序的性能可以用CPE(Cycles Per Element)來衡量,其指的是處理每個元素…

transformer模型介紹——大語言模型 LLMBook 學習(二)

1. transformer模型 1.1 注意力機制 **注意力機制(Attention Mechanism)**在人工智能中的應用,實際上是對人類認知系統中的注意力機制的一種模擬。它主要模仿了人類在處理信息時的選擇性注意(Selective Attention)&a…

word甲烷一鍵下標

Sub 甲烷下標()甲烷下標 宏Selection.Find.ClearFormattingSelection.Find.Replacement.ClearFormattingWith Selection.Find.Text "CH4".Replacement.Text "CHguoshao4".Forward True.Wrap wdFindContinue.Format False.MatchCase False.MatchWhole…

Dify 本地部署教程

目錄 一、下載安裝包 二、修改配置 三、啟動容器 四、訪問 Dify 五、總結 本篇文章主要記錄 Dify 本地部署過程,有問題歡迎交流~ 一、下載安裝包 從 Github 倉庫下載最新穩定版軟件包,點擊下載~,當然也可以克隆倉庫或者從倉庫里直接下載zip源碼包。 目前最新版本是V…

2.1 掌握XML基礎知識

本文介紹了結構化、半結構化和非結構化數據的概念與特點。結構化數據以固定格式存儲于數據庫,便于查詢與管理,常用于金融等領域。半結構化數據如XML、JSON,具有一定的組織形式但模式不固定,適用于Web內容和日志文件。非結構化數據…

Android Studio 配置國內鏡像源

Android Studio版本號:2022.1.1 Patch 2 1、配置gradle國內鏡像,用騰訊云 鏡像源地址:https\://mirrors.cloud.tencent.com/gradle 2、配置Android SDK國內鏡像 地址:Index of /AndroidSDK/

超過 37000 臺 VMwareESXi 服務器可能受到持續攻擊威脅

近日,威脅監測平臺影子服務器基金會(The Shadowserver Foundation)發布報告,指出超 3.7 萬個互聯網暴露的威睿(VMware)ESXi 實例存在嚴重安全隱患,極易受到 CVE-2025-22224 漏洞的攻擊。該漏洞屬…

npm終端執行時報錯

終端npm執行時報錯下錯誤: 報錯了,就來百度,報錯的原因是 1、這個錯誤是因為 PowerShell 的執行策略(Execution Policy)限制了腳本的運行 2、默認情況下,Windows 系統可能會禁止運行未簽名的腳本&#x…

JVM類加載器面試題及原理

JVM只會運行二進制文件,類加載器的作用就是將字節碼文件加載到JVM中,從而讓Java程序能夠啟動起來。 1. 類加載器的種類 啟動類加載器(BootStrap ClassLoader):加載JAVA_HOME/jre/lib目錄下的庫擴展類加載器&#xff…

C語言每日一練——day_3(快速上手C語言)

引言 針對初學者,每日練習幾個題,快速上手C語言。第三天。(會連續更新) 采用在線OJ的形式 什么是在線OJ? 在線判題系統(英語:Online Judge,縮寫OJ)是一種在編程競賽中用…

用Qt手搓AI助手,挑戰24小時開發DeepSeek Assistant!

一、項目需求分析與技術選型 DeepSeekAssistant是一款基于深度求索(DeepSeek)API的智能對話助手,核心需求包括: 用戶界面友好:支持多輪對話展示數據持久化:歷史記錄存儲與檢索異步網絡通信:AP…

Linux 環境變量快速上手指南

Linux 環境變量快速上手 1. 什么是環境變量 環境變量(Environment Variables)是操作系統中用于存儲配置信息的一種機制,可以在運行時被進程讀取和使用。常見環境變量示例: PATH: 存放可執行文件搜索路徑。HOME: 當前用戶的家目錄…

萬字技術指南STM32F103C8T6 + ESP8266-01 連接 OneNet 平臺 MQTT/HTTP

此博客為一份詳細的指南,涵蓋 STM32F103C8T6 通過 ESP8266-01 連接 OneNet 平臺,并使用 MQTT/HTTP 進行數據通信的完整流程。這份文檔包括: OneNet 平臺的介紹與功能概覽在 OneNet 上創建和配置設備的方法STM32CubeIDE 的開發環境搭建ESP826…

Go本地緩存設計與實現

本地緩存是一個項目中很常見的組件。在很多人的眼中就是一個簡單的key-value的map存儲即可實現,但實際上,設計一個本地緩存需要考慮的問題遠比你想象的多,比如說,本地緩存是將數據存儲在內存,若數據量激增突破了內存限…

深入解析 JavaScript 原型與原型鏈:從原理到應用

原型和原型鏈是 JavaScript 中實現對象繼承和屬性查找的核心機制。為了更深入地理解它們,我們需要從底層原理、實現機制以及實際應用等多個角度進行分析。 1. 原型(Prototype) 1.1 什么是原型? 每個 JavaScript 對象&#xff08…

FPGA時序約束的幾種方法

一,時鐘約束 時鐘約束是最基本的一個約束,因為FPGA工具是不知道你要跑多高的頻率的,你必要要告訴工具你要跑的時鐘頻率。時鐘約束也就是經常看到的Fmax,因為Fmax是針對“最差勁路徑”,也就是說,如果該“最差勁路徑”得到好成績,那些不是最差勁的路徑的成績當然比…

Visual Studio Code打開遠程服務器項目,打開服務器Android上百G源碼,SSH免密連接方式

Visual Studio Code打開遠程服務器項目 1,Visual Studio Code拓展中,安裝遠程插件 Remote Development 2,SSH免密連接,A電腦免密連接B,配置B電腦.ssh/authorized_keys A電腦的.ssh/id_rsa.pub中的公鑰內容,…

AWS云編排詳解-Cloud Formation

作者:私語茶館 1.關鍵概念 名詞 說明 軟件: CloudFormation 描述AWS 資源、配置值和互連關系。借助集成設施即代碼加快云部署 CloudFormation Designer 拖拽式圖形化模板編輯界面。 Amazon Simple Notification Service (SNS) SNS可通過電子郵件跟蹤堆棧的創建和刪除進度,…