簡單易懂的UML
活動圖
概述
- 活動圖是一種描述系統行為的圖,它用於展現參與行為的類所進行的各種活動的順序關係。
基本組成元素
動作狀態
動作狀態是指執行原子的、不可中斷的動作,並在此動作完成後通過完成轉換轉向另一個狀態的狀態。 特點是原子的,瞬時的,不可中斷的。在一張活動圖中可以多次出現。活動狀態
活動狀態可以分解成其他子活動或動作狀態,由於它是一組不可中斷的動作或操作的組合,所以可以被中斷。活動狀態可以有入口動作和出口動作,也可以有內部轉移。它是活動狀態的一個特例,如果某個活動狀態只包括一個動作,那麼它就是一個動作狀態。動作流
所有動作狀態之間的轉換流稱之為動作流。分支與合併
分支一般用於表示物件類所具有的條件行為。
一個分支有一個入轉換和兩個帶條件的出轉換,出轉換的條件應當是互斥的,這樣可以保證只有一條出轉換能夠被觸發。
一個合併有兩個帶條件的入轉換和一個出轉換,合併表示從對應的分支開始的條件行為的結束。分叉與匯合
分叉用於將動作流分為兩個或者多個併發執行的分支,而匯合則用於同步這些併發分支,以達到共同完成一項事務的目的。泳道
泳道將活動圖中的活動化分為若干組,並把每一組指定給負責這組活動的業務組織即物件。
泳道區分了負責活動的物件,明確地表示了哪些活動是由哪些物件進行的。
每個活動只能明確地屬於一個泳道。物件流
物件流是動作狀態或者活動狀態與物件之間的依賴關係,表示動作使用物件或者動作對物件的影響。
建模步驟
識別要對其工作流描述的類或物件。
確定工作流的初始狀態和終止狀態,明確工作流的邊界。
對動作狀態或活動狀態建模。
對動作流建模。
對物件流建模。
對建立的模型進行精化和細化。
舉例介紹
狀態圖
概述
- 狀態圖(Statechart Diagram)主要用於描述一個物件在其生存期間的動態行為,表現為一個物件所經歷的狀態序列,引起狀態轉移的事件(Event),以及因狀態轉移而伴隨的動作(Action)。一般可以用狀態機對一個物件的生命週期建模,狀態圖用於顯示狀態機(State Machine Diagram),重點在與描述狀態圖的控制流。
- 狀態有Opened、Closed、Locked。
- 事件有 Open、Close、Lock和Unlock。
基本組成元素
- 狀態(States)
- 轉移(Transitions)
- 事件標記(Trigger):是轉移的誘因,可以是一個訊號,事件、條件變化(a change in some condition)和時間表達式。
- 警界條件(Guard Condition):當警界條件滿足時,事件才會引發轉移(Transition)。
- 結果(Effect):物件狀態轉移後的結果。
- 自身轉移(Self-Transitions)
狀態可以有返回自身狀態的轉移,稱之為自身轉移(Self-Transitions)
組合狀態
巢狀在另外一個狀態中的狀態稱之為子狀態(sub-state),一個含有子狀態的狀態被稱作組合狀態(Compound States). 如下圖,【Check PIN】是組合狀態,【Enter PIN】是子狀態。
歷史狀態
歷史狀態是一個偽狀態(Pseudostate),其目的是記住從組合狀態中退出時所處的子狀態,當再次進入組合狀態,可直接進入這個子狀態,而不是再次從組合狀態的初態開始。
- 併發狀態
狀態圖可以分為區域,而區域又包括退出或者當前執行的子狀態。說明組合狀態在某一時刻可以同時達到多個子狀態。如下圖剎車系統,同時進入前剎車【Applying Front Brakes】狀態和後剎車【Applying Rear Brakes】狀態。
舉例介紹
以學生選課系統為例
1. 確定狀態圖的狀態實體————學生
2. 確定這個狀態實體都有哪些狀態。
3. 建立相關事件完成狀態圖。
時序圖
概述
時序圖(Sequence Diagram)是顯示物件之間互動的圖,這些物件是按時間順序排列的。時序圖中顯示的是參與互動的物件及其物件之間訊息互動的順序。時序圖中包括的建模元素主要有:物件(Actor)、生命線(Lifeline)、控制焦點(Focus of control)、訊息(Message)等等。
基本組成元素
角色(Actor)
系統角色,可以是人、及其甚至其他的系統或者子系統物件(Object)
物件包括三種命名方式:
第一種方式包括物件名和類名;
第二中方式只顯示類名不顯示物件名,即表示他是一個匿名物件;
第三種方式只顯示物件名不顯示類名。生命線(Lifeline)
生命線在順序圖中表示為從物件圖示向下延伸的一條虛線,表示物件存在的時間控制焦點(Focus of Control)
控制焦點是順序圖中表示時間段的符號,在這個時間段內物件將執行相應的操作。用小矩形表示,如下圖。
訊息(Message)
同步訊息=呼叫訊息(Synchronous Message)
訊息的傳送者把控制傳遞給訊息的接收者,然後停止活動,等待訊息的接收者放棄或者返回控制。用來表示同步的意義。非同步訊息(Asynchronous Message)
訊息傳送者通過訊息把訊號傳遞給訊息的接收者,然後繼續自己的活動,不等待接受者返回訊息或者控制。非同步訊息的接收者和傳送者是併發工作的。返回訊息(Return Message)
返回訊息表示從過程呼叫返回自關聯訊息(Self-Message)
表示方法的自身呼叫以及一個物件內的一個方法呼叫另外一個方法。
Combined Fragments
Ø Alternative fragment(denoted “alt”) 與 if…then…else對應
Ø Option fragment (denoted “opt”) 與 Switch對應
Ø Parallel fragment (denoted “par”) 表示同時發生
Ø Loop fragment(denoted “loop”) 與 for 或者 Foreach對應
舉例介紹
用例圖
概述
用例圖主要用來描述“使用者、需求、系統功能單元”之間的關係。它展示了一個外部使用者能夠觀察到的系統功能模型圖。
基本組成元素
參與者(Actor)
表示與您的應用程式或系統進行互動的使用者、組織或外部系統。用一個小人表示。
用例(Use Case)
用例就是外部可見的系統功能,對系統提供的服務進行描述。用橢圓表示。
子系統(Subsystem)
用來展示系統的一部分功能,這部分功能聯絡緊密。
用例圖中關係
用例圖中涉及的關係有:關聯、泛化、包含、擴充套件。
如下表所示:
- 關聯(Association)
表示參與者與用例之間的通訊,任何一方都可傳送或接受訊息。
【箭頭指向】:指向訊息接收方
泛化(Inheritance)
就是通常理解的繼承關係,子用例和父用例相似,但表現出更特別的行為;子用例將繼承父用例的所有結構、行為和關係。子用例可以使用父用例的一段行為,也可以過載它。父用例通常是抽象的。
【箭頭指向】:指向父用例
包含(Include)
包含關係用來把一個較複雜用例所表示的功能分解成較小的步驟。
【箭頭指向】:指向分解出來的功能用例
- 擴充套件(Extend)
擴充套件關係是指用例功能的延伸,相當於為基礎用例提供一個附加功能。
【箭頭指向】:指向基礎用例
舉例介紹
協作圖
概述
協作圖(Collaboration Diagram /Communication Diagram,也叫合作圖)是一種互動圖(interaction diagram),顯示某組物件如何為了由一個用例描述的一個系統事件而與另一組物件進行協作的,使用協作圖可以顯示物件角色之間的組織關係。
基本組成元素
協作圖的構成有角色,物件,連線,訊息。具體含義同時序圖。
協作圖表現的是物件在空間上的聯絡,所以不存在時序圖中的生命線和啟用器。
舉例介紹
相關推薦
簡單易懂的UML
活動圖 概述 活動圖是一種描述系統行為的圖,它用於展現參與行為的類所進行的各種活動的順序關係。 基本組成元素 動作狀態 動作狀態是指執行原子的、不可中斷的動作,並在此動作完成後通過完成轉換轉向另一個狀態的狀態。 特點是原子的,瞬時的,不
Ajax 基本使用的四大步驟,簡單易懂
表單 var cells send val fun nbsp x11 open ajax(異步javascript xml) 能夠刷新局部網頁數據而不是重新加載整個網頁。接下來通過本文給大家介紹Ajax的使用四大步驟,非常不錯,感興趣的朋友看下吧 什麽是ajax? a
如何使電商APP制作變得簡單易懂,容易上手?
如何使電商APP制作變得簡單易懂,容易上手? 乘著互聯網+的東風,大眾創業、萬眾創新正在蓬勃興起。但是,無論淘寶還是微商,都存在同質化嚴重的問題,想引人註目、脫穎而出困難重重。在人人手機不離手的移動互聯網時代,擁有一款量身定做的APP,一定會讓您的努力事半功倍。APIClo
簡單易懂的基數排序
關鍵字 tmp digi 神奇 font dig put tchar read 本蒟蒻最近在學習後綴數組,發現其需要借助基數排序來實現,於是便上網學習了一波,很簡單的排序,其主要思想是:把從低位到最高位依次作為關鍵字插入桶中,最後就有序了。它的代碼更是易懂簡單,下附代碼
vue.js路由參數簡單實例講解------簡單易懂
.com route 安裝 http git node clas span ont vue中,我們構建單頁面應用時候,一定必不可少用到vue-router vue-router 就是我們的路由,這個由vue官方提供的插件 首先在我們項目中安裝vue-router路由依賴
MVP 模式簡單易懂的介紹方式
之一 經驗 main 不同 nds mvc 是把 get 意圖 為什麽用Android MVP 設計模式? 當項目越來越龐大、復雜,參與的研發人員越來越多的時候,MVP 模式 的優勢就充分顯示出來了。 MVP 模式是 MVC 模式在 An
C# 事務處理 (簡單易懂)
操作 相互 用戶 因此 成功 綁定 執行 對數 序列 事務是並發控制單位,是用戶定義的一個操作序列(這些操作 要麽都做 要麽都不做)通過事務sql server 能將邏輯相關的一組操作綁定在一起,以便服務器保持數據的完整性特性:原子性(Atomicity)原子性是指事務包含
JS回調函數--簡單易懂有實例
out callback another parent sed 解釋 js回調函數 com 主函數 初學js的時候,被回調函數搞得很暈,現在回過頭來總結一下什麽是回調函數。 我們先來看看回調的英文定義:A callback is a function that is p
Model驗證簡單易懂
mail pass 不一致 conf user pre 密碼 expr message public bool UserSex { get; set; } //定義名字 [Display(Name = "年齡")] [Range(0, 150,
簡單搭建FastDFS分布式文件系統(簡單易懂)
module config 簡單 ble 視頻網站 mkdir -p pes 9.png target 一.什麽是FastDFS FastDFS一個開源的輕量級分布式文件系統,它對文件進行管理,充分考慮了冗余備份、負載均衡、線性擴容等機制,並註重高可用、高性能等指標,功
Java高級特性——註解,這也許是最簡單易懂的文章了
無需 nta exce 表示 字節碼 targe 運行 bsp 綁定 java註解是jdk1.5以後新出的特性,對於它的應用非常廣泛,我們首先來看一下註解的應用,百度百科上這樣說: 我們可以看到,註解的作用有三方面: 編寫doc文檔:這個就我們很常用的 @retur
【轉】求最短路徑長度--簡單易懂
最短路徑 href 弗洛伊德算法 clas 路徑 div bsp -- ref 求任意兩個節點之間的最短路徑長度(只給出路徑長度,不能求出路過的節點): 傻子也能看懂的弗洛伊德算法(轉) 求一個節點到其他節點的最短路徑長度: 傻子也能看懂的迪傑斯特拉算法(轉)【轉】求最短
如何用簡單易懂的例子解釋隱馬爾可夫模型?
target log question ont swe targe class 模型 clas 隱馬爾可夫(HMM)好講,簡單易懂不好講。 本文回答簡單易懂,https://www.zhihu.com/question/20962240/answer/33438846如何用
C#中對sqlserver進行增刪改查操作(簡單易懂)
uid 數據連接 net cti ade 密碼 logs where Go 1、添加引用using System.Data;using System.Data.SqlData;2、建立於數據庫的連接,建議將它做成一個方法,方便多次利用。string sqlconnectio
一個非常簡單易懂的WIFI密碼爆破python腳本
2.7.6 OS readline 錯誤 而且 學習 入庫 邏輯錯誤 api 摘要: 我得說明下這個東西一點都不高端,甚至看起來有點糟糕。而且用的是單線程~,因為過幾天要搬家了,於是。。 環境準備 python2.7 湊合的linux 差不多的無線網卡 pywifi模
【Linux】linux常用幾個基本命令 小白專區簡單易懂
ls -l 17. 命令補全 linu 刪除目錄 poweroff 環境 密碼 family 顯示日期的命令 date顯示日歷的命令 cal -s, --hctosys以硬件時鐘為準,校正系統時鐘hwclock,clock:顯示硬件時鐘 -w, --sy
用心剖析,詳解如何搭建百萬PV網站架構,簡單易懂!!!
socket cache sad nco sla tom 百萬 redis主從 debug 簡介: 本項目案例結合SVN、LNMP和MySQL三種環境,部署一個社交網站,本社交網站采用PHP語言開發,搭建SVN服務器進行版本控制和集中管理PHP程序員開發的代碼,以Nginx
[意識流]簡單易懂的AC自動機
分享圖片 ac自動機 clu alt c++ define hdu2222 image urn 為了一言不合就徒手敲AC自動機,決定看一下原理 於是花了一張圖, 參考HDU2222的樣例 於是看懂這張圖的你很快就敲出了如下代碼並且AC了 #include<bits/
kmp算法原理與應用(簡單易懂)
tex font http ont image inf csdn 簡單 算法 kmp算法原理與應用(簡單易懂)
單鏈表排序問題、簡單易懂
#include <iostream> #include <ctime> #define ERROR 0; typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode *next; }L