UML建模圖文詳解教程——類圖


版權聲明

  • 本文原創作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl
  • 本文參考資料:《UML面向對象分析、建模與設計(第2版)》呂云翔,趙天宇 著

在這里插入圖片描述

類圖概述

類圖用來描述系統內各種實體的類型以及不同的實體之間是如何彼此關聯的,顯示了系統的內部靜態結構,因此類圖的描述對于系統的整個生命周期都是有效的。如果說用例圖是系統的“面子”,那么類圖就是系統的“里子”。類圖不僅包含了系統定義的各種類,還包含了各種關系,如關聯、泛化和依賴等。類圖大部分涉及對系統的詞匯建模、對協作建模或對模式建模。作為面向對象系統的建模中最常見的圖,類圖是組件圖與部署圖的基礎,它不僅對結構模型的可視化、詳述和文檔化很重要,而且對通過正向與逆向工程構造可執行的系統也很重要。

類圖(class diagram)是顯示一組類、接口、協作以及它們之間關系的圖。一個類圖主要通過系統中的類以及各個類之間的關系來描述系統的靜態結構。

類圖主要包含七種元素:類、接口、協作、依賴關系、泛化關系、實現關系和關聯關系類圖中還可以含有包或子系統,用來把模型元素聚集成更大的組塊。與其他 UML 圖類似類圖同樣可以創建約束和注釋等。

核心知識點

請務必熟悉并掌握以下核心知識點。

類(class)是一組擁有相同的屬性、操作、方法、關系和行為的對象描述符。

在UML中,類表達成一個有三個分隔區的矩形。其中,頂端顯示類名(name),中間顯示類的屬性(attribute),尾端顯示類的操作(operation)。

示例如下:
在這里插入圖片描述

接口

接口(interface)是一個被命名的操作集合,用于描述類或組件的一個服務。接口不同于任何類或類型,它不描述任何結構,因此不包含任何屬性;也不描述任何實現,因此不包含任何實現操作的方法。一個接口可以有多個操作,每個操作都是公共的。一個類可以實現多個接口。為了顯示接口中的操作,接口可以表示為帶有<< interface >>構造型的類。

示例如下:

在這里插入圖片描述

類圖中的關系

類圖中涉及了 UML 中最常用的四種關系,即關聯關系、泛化關系、依賴關系和實現關系。

關聯關系

關聯關系是兩個或多個類元之間的關系,它描述了這些類元的實例間的連接。

多重性

多重性(multiplicity)放在靠近關聯端的部分,表示在關聯關系中源端的一個對象可以與目標類的多少個對象之間有關聯。在 UML中,多重性的格式為“min…max”。其中,min 和 max分別表示該端最少和最多可以有多少對象與另一端關聯。常用的多重性有0,1,0…1(0或1)、0…*(0或更多)、1…*(1或更多)、* (0 或更多)等。

例如,Student 類與 School類的關聯關系的多重性,即一個學校可以有一個或更多個學生,而一個學生可能在 0所或更多所學校中學習。

在這里插入圖片描述

導航性

導航性(navigation)是一個布爾值,用來說明運行時刻是否可能穿越一個關聯。對于二元關聯,當對一個關聯端(目標端)設置了導航性就意味著可以從另一端(源端)指定類型的一個值得到目標端的一個或一組值(取決于關聯端的多重性)。

例如,一個訂單可以獲取到該訂單的一份產品列表,但一個產品卻無法獲取到哪些訂單包括了該產品。

在這里插入圖片描述

聚合與組合

聚合與組合是特殊的關聯。

有時候我們需要對“整體-部分”的關系建模,即一個描述整體的對象由一些描述部分的對象組成,這種關系稱為聚合(aggregation)。聚合關系是一種特殊形式的關聯關系,用來表示一個“整體-部分”的關系。在聚合關系中,“部分”可以獨立于“整體”存在。在 UML中,通過在關聯路徑上靠近表示“整體”的類的一端上使用一個小空心菱形來表示。

例如,ClassRoom(教室)類與 Desk(課桌)類之間構成一個聚合關系即教室中有許多課桌,當教室對象不存在時課桌同樣可以作為其他用途,二者是獨立存在的。

在這里插入圖片描述

組合關系(composition)描述的也是整體與部分的關系,它是一種更強形式的聚合關系,又被稱為強聚合。與聚合關系的區別在于,在組合關系中的部分要完全依賴于整體。這種依賴性主要表現在兩個方面:部分對象在某一特定時刻只能屬于一個組合(整體)對象組合對象與部分對象具有重合的生命周期,組合對象銷毀的時候,所有從屬部分必須同時銷毀。

例如,Window(窗口)類與 Frame(架)類之間構成組合關系,Frame必須附加在 Window 中存在當一個 Window 被刪除時其中的 Frame 部分也必須被刪除。

在這里插入圖片描述

泛化關系

泛化關系描述了一種“is-a-kind-of”(是··…·.的一種)關系,它的使用有利于簡化有些類的描述,可以不必重復添加大量相同的屬性和操作等特性而是通過泛化對應的繼承機制使子類共享父類的屬性和操作。在 UML 中,泛化關系通過一個由子類指向父類的空心三角形箭頭表示。

例如,Tiger類和 Bird類繼承了Animal類的屬性和操作,還添加了屬于自己的某些屬性和操作。

在這里插入圖片描述
在最簡單的情況下,每個類最多能擁有一個父類,這稱為單繼承。而在更復雜的情況中,子類可以有多個父類并繼承了所有父類的結構、行為和約束。這被稱為多重繼承(或多重泛化)。

在這里插入圖片描述

依賴關系

依賴關系表示的是兩個元素之間語義上的連接關系。對于兩個元素 X和 Y,如果元素X的變化會引起對另一個元素 Y 的變化,則稱元素Y 依賴于 X。其中,X 被稱為提供者,Y被稱為客戶。依賴關系使用一個指向提供者的虛線箭頭來表示。

在這里插入圖片描述

由于依賴關系語義的寬泛性,在類圖中要標記出所有的依賴關系是一件費時費力的事情并且會降低模型的可讀性。因此建議在類圖中盡量不使用依賴關系。

實現關系

實現關系用來表示類與實現之間的關系。一個類可以實現多個接口,一個接口也可以被多個類實現。在 UML中實現關系表示為一條指向提供規格說明的元素的虛線三角形箭頭。

例如, Wall類實現了 Measurable 接口。即,在 Wall類中要實現接口中聲明的三個操作。

在這里插入圖片描述

分析類

分析類是一個主要用于開發過程中的概念,用來獲取系統中主要的“職責簇”,代表系統的原型類,是帶有某些構造型的類元素。分析類包括邊界類(boundary)、控制類(control)和實體類(entity)三種。

在這里插入圖片描述
邊界類是一種用于對系統外部環境與其內部運作之間的交互進行建模的類。這種交互包括轉換事件,并記錄系統表示方式中的變更。一般來說,邊界類的實例可以是窗口、通信協議、外部設備接口、傳感器、終端等。總之,在兩個有交互的關鍵對象之間都應當考慮建立邊界類。

控制類是一種對一個或多個用例所特有的控制行為進行建模的類。控制類的實例稱為控制對象,用來控制其他對象,體現出應用程序的執行邏輯。

實體類是用于對必須存儲的信息和相關行為建模的類。簡單來說,實體類就是對來自現實世界的具體事物的抽象。實體類的主要職責是存儲和管理系統內部的信息,它也可以有行為,但這些行為必須與它所代表的實體對象密切相關。

航空購票系統類圖

根據業務需求,我們應該確定出系統主要可以包括哪些類在航空購票系統類圖中可以歸結出用戶User、管理員Administrator、機場Airport、航班Flight與機票Ticket幾個實體類,還應該包括有一個系統控制類TicketManagement來控制整個系統。由于分析階段尚未進行用戶界面設計,因此類圖中暫時不涉及邊界類,需要在設計階段再對類圖進一步完善。

與創建用例圖類似,請在Model中創建類圖;圖示如下:

在這里插入圖片描述
創建完畢,圖示如下:

在這里插入圖片描述
在類圖上右鍵選擇添加圖,在彈出的窗口中選擇UML Structural,在圖的類型中選擇Class;再單擊確定;圖示如下:

在這里插入圖片描述
創建完畢,圖示如下:

在這里插入圖片描述
此時,點擊工具箱就可以看到與類圖相關的工具。如果沒有與類圖相關的工具,那么可以點擊右上角更多的工具…即可;圖示如下:

在這里插入圖片描述
我們先來繪制User類。請左鍵單擊Class,鼠標挪至繪圖區彈出類的配置界面。請設置類的名字;圖示如下:

在這里插入圖片描述

單擊確定后,圖示如下:

在這里插入圖片描述

接下來在項目瀏覽器中右鍵單擊User實體再選擇屬性,圖示如下:

在這里插入圖片描述
此處,可以為User實體添加屬性和操作。

先添加userID、password、info等三個屬性;圖示如下:

在這里插入圖片描述

接下來為User實體添加login、register、searchMyFlight、bookMyTicket、cancleMyTicket、browserTicket、構造函數User等操作。這些操作的參數和返回值均設置為空;圖示如下:

在這里插入圖片描述

User實體繪制完成,圖示如下:

在這里插入圖片描述

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

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

相關文章

Unsupervised MVS論文筆記

Unsupervised MVS論文筆記 摘要1 引言2 相關工作3 實現方法 Tejas Khot and Shubham Agrawal and Shubham Tulsiani and Christoph Mertz and Simon Lucey and Martial Hebert. Tejas Khot and Shubham Agrawal and Shubham Tulsiani and Christoph Mertz and Simon Lucey and …

JAVA小游戲拼圖

第一步是創建項目 項目名自擬 第二部創建個包名 來規范class 然后是創建類 創建一個代碼類 和一個運行類 代碼如下&#xff1a; package heima; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import …

10、信息打點——APP小程序篇抓包封包XP框架反編譯資產提取

APP信息搜集思路 外在——抓包封包——資產安全測試 抓包&#xff08;Fiddle&茶杯&burp&#xff09;封包&#xff08;封包監聽工具&#xff09;&#xff0c;提取資源信息 資產收集——資源提取——ICO、MAD、hash——FOFA等網絡測繪進行資產搜集 外在——功能邏輯 內在…

國際版Amazon Lightsail的功能解析

Amazon Lightsail是一項易于使用的云服務,可為您提供部署應用程序或網站所需的一切,從而實現經濟高效且易于理解的月度計劃。它是部署簡單的工作負載、網站或開始使用亞馬遜云科技的理想選擇。 作為 AWS 免費套餐的一部分&#xff0c;可以免費開始使用 Amazon Lightsail。注冊…

【Python進階】近200頁md文檔14大體系第4篇:Python進程使用詳解(圖文演示)

本文從14大模塊展示了python高級用的應用。分別有Linux命令&#xff0c;多任務編程、網絡編程、Http協議和靜態Web編程、htmlcss、JavaScript、jQuery、MySql數據庫的各種用法、python的閉包和裝飾器、mini-web框架、正則表達式等相關文章的詳細講述。 Python全套筆記直接地址…

PostgreSQL10安裝postgis插件

1.安裝pgsql10 2.下載插件&#xff0c;以Windows為例&#xff0c;地址&#xff1a;Index of /postgis/windows/pg10/ 3.安裝插件&#xff0c;直接安裝&#xff0c;和pgsql的目錄相同即可&#xff0c;一直下一步 4.安裝之后&#xff0c;需要執行sql打開 CREATE EXTENSION po…

028 - STM32學習筆記 - ADC結構體學習(二)

028 - STM32學習筆記 - 結構體學習&#xff08;二&#xff09; 上節對ADC基礎知識進行了學習&#xff0c;這節在了解一下ADC相關的結構體。 一、ADC初始化結構體 在標準庫函數中基本上對于外設都有一個初始化結構體xx_InitTypeDef&#xff08;其中xx為外設名&#xff0c;例如…

Redis設計與實現-數據結構(建設進度17%)

Redis數據結構 引言數據結構stringSDS數據結構原生string的不足 hash 本博客基于《Redis設計與實現》進行整理和補充&#xff0c;該書依賴于Redis 3.0版本&#xff0c;但是Redis6.0版本在一些底層實現上仍然沒有明顯的變動&#xff0c;因此本文將在該書的基礎上&#xff0c;對于…

PostgreSQL基本操作

1.查詢某個表的所在磁盤大小 select pg_size_pretty(pg_relation_size(grb_grid)); 2.插入point類型的記錄 insert into tb_person ("name", "address", "location", "create_time", "area", "girls") values …

Java 兩個線程交替打印1-100

線程題&#xff1a;交替打印1-100 這里演示兩個線程&#xff0c;一個打印奇數&#xff0c;一個打印偶數 方式一&#xff1a;synchronized FixedThreadPool public class example {private static int count 1;private static final Object lock new Object();public stat…

WPF基礎DataGrid控件

WPF DataGrid 是一個用于顯示和編輯表格數據的強大控件。它提供了豐富的功能&#xff0c;包括排序、篩選、分組、編輯、選擇等&#xff0c;使你能夠以類似電子表格的方式呈現和操作數據。 DataGrid 的布局主要由以下部分組成&#xff1a; 列定義 (Columns): DataGrid 列定義了…

YOLO目標檢測——衛星遙感多類別檢測數據集下載分享【含對應voc、coco和yolo三種格式標簽】

實際項目應用&#xff1a;衛星遙感目標檢測數據集說明&#xff1a;衛星遙感多類別檢測數據集&#xff0c;真實場景的高質量圖片數據&#xff0c;數據場景豐富&#xff0c;含網球場、棒球場、籃球場、田徑場、儲罐、車輛、橋、飛機、船等類別標簽說明&#xff1a;使用lableimg標…

2023年【上海市安全員C證】考試及上海市安全員C證找解析

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 2023年上海市安全員C證考試為正在備考上海市安全員C證操作證的學員準備的理論考試專題&#xff0c;每個月更新的上海市安全員C證找解析祝您順利通過上海市安全員C證考試。 1、【多選題】2017年9月頒發的《中共上海市委…

基于STM32的煙霧濃度檢測報警仿真設計(仿真+程序+講解視頻)

這里寫目錄標題 &#x1f4d1;1.主要功能&#x1f4d1;2.仿真&#x1f4d1;3. 程序&#x1f4d1;4. 資料清單&下載鏈接&#x1f4d1;[資料下載鏈接](https://docs.qq.com/doc/DS0VHTmxmUHBtVGVP) 基于STM32的煙霧濃度檢測報警仿真設計(仿真程序講解&#xff09; 仿真圖prot…

【數據結構】B : DS圖應用--最短路徑

B : DS圖應用–最短路徑 文章目錄 B : DS圖應用--最短路徑DescriptionInputOutputSampleInput Output 解題思路&#xff1a;初始化主循環心得&#xff1a; AC代碼 Description 給出一個圖的鄰接矩陣&#xff0c;再給出指定頂點v0&#xff0c;求頂點v0到其他頂點的最短路徑 In…

SkyWalking配置報警推送到企業微信

1、先在企業微信群里創建一個機器人&#xff0c;復制webhook的地址&#xff1a; 2、找到SkyWalking部署位置的alarm-settings.yml文件 編輯&#xff0c;在最后面加上此段配置 &#xff01;&#xff01;&#xff01;一定格式要對&#xff0c;不然一直報警報不出來按照網上指導…

JVM 堆外內存詳解

Java 進程內存占用除了JVM 運行時數據區&#xff0c;還有直接內存&#xff08;Direct Memory&#xff09;區域及 JVM 程序自身也會占用內存 直接內存&#xff08;Direct Memory&#xff09;區域&#xff1a;直接內存通過使用Native堆外內存來存儲數據&#xff0c;這意味著數據…

大數據平臺實踐之CDH6.2.1+spark3.3.0+kyuubi-1.6.0

前言&#xff1a;關于kyuubi的原理和功能這里不做詳細的介紹&#xff0c;感興趣的同學可以直通官網&#xff1a;https://kyuubi.readthedocs.io/en/v1.7.1-rc0/index.html 下載軟件版本 wget http://distfiles.macports.org/scala2.12/scala-2.12.16.tgz wget https://archi…

pikachu_php反序列化

pikachu_php反序列化 源代碼 class S{var $test "pikachu";function __construct(){echo $this->test;} }//O:1:"S":1:{s:4:"test";s:29:"<script>alert(xss)</script>";} $html; if(isset($_POST[o])){$s $_POST[…

基于python人臉性別年齡檢測系統-深度學習項目

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介簡介技術組成1. OpenCV2. Dlib3. TensorFlow 和 Keras 功能流程 二、功能三、系統四. 總結 一項目簡介 # Python 人臉性別年齡檢測系統介紹 簡介 該系統基…