本文檔為xmind導出,可能存在缺少圖片等問題,建議下載思維導圖查看完整內容
鏈接: https://pan.baidu.com/s/17s-utC2C6Qg0tFp61Kw0ZQ?pwd=uq64 提取碼: uq64
概述
UML: Unified Modeling Language 統一建模語言
建模
-
定義
- 把不太理解的東西和一些已經較為理解、且十分類似的東西做比較,可以對這些不太理解的東西產生更深刻的理解,這種方法叫做建模
-
原因
-
不能完整地理解一個復雜的系統
-
為了成功開發復雜的軟件項目
-
-
四個目的
-
幫助我們按照需要對系統進行可視化
-
允許我們詳細說明系統的結構和行為
-
給出了一個指導我們構造系統的模板
-
對我們所做出的決策進行文檔化
-
-
四項原則
-
選擇要創建什么模型
-
每一種模型可以在不同的精度級別上表示
-
最好的模型是與現實相關聯的
-
單個模型是不充分的, 對每一個重要的系統最好用一組幾乎獨立的模型去處理
-
模型
-
建模產生的結果,就是模型
-
模型是對事物的一種抽象和簡化
-
每個模型都有一定的用途
-
模型有我們所關心的所有信息,足矣
術語
-
領域(Domain)
- 指要解決的問題在現實中所處的行業、位置、關系等
-
系統(System)
- 由為完成一定目的而組織起來的子系統組成
-
子系統(Subsystem)
- 是一組元素的集合,代表了系統的一個部分,它有清晰的接口,這個接口可作為一個單獨的構件來實現
-
模型(Model)
- 表示對現實的完整而又自我一致的簡化,可以更好地理解系統
-
視圖(View)
- 是對系統模型的組織和結構的投影,注重于系統的一個方面
-
圖(Diagram)
- 一組元素的圖形表示
UML特點
-
可視化語言
-
原因
- 與他人交流概念模型很容易出錯,除非每個人都說同一種語言
-
好處
-
顯式的模型有助于交流
-
可視化建模能夠清晰定義軟件架構
-
可視化建模能夠促進可重用性
-
可視化建模能夠處理復雜性
-
可視化建模能夠捕獲業務流程
-
-
-
說明語言
-
構建語言
-
文檔語言
UML組成
-
事物
-
結構事物
-
類(Class)
-
接口(Interface)
-
用例(Use case)
-
協作(Collaboration)
-
構件(Component)
-
主動類(Active class)
-
節點(Node)
-
制品(Artifact)
-
-
行為事物
-
交互(Interaction)
-
狀態機(State machine)
-
活動(Activity)
-
-
分組事物
- 包(Package)
-
注釋事物
- 注釋(Annotational thing)
-
-
關系
-
依賴
-
泛化
-
關聯
-
實現
-
-
圖
-
類圖
-
對象圖
-
用例圖
-
構件圖
-
順序圖
-
通信圖
-
時序圖
-
活動圖
-
制品圖
-
包圖
-
狀態圖
-
部署圖
-
交互概覽圖
-
關系
四種基本關系
-
依賴關系(dependency)
-
一個事物使用另一個事物的信息和服務
-
-
泛化關系(generalization)
-
一般事物(稱為超類或父類)和該事物的較為特殊的種類(稱為子類)之間的關系
-
-
關聯關系(association)
-
一個事物的對象與另一個事物的對象間的聯系
-
自身關聯(reflexive association)
- 同一個類的不同對象之間有連接
-
-
實現關系(realization)
關聯關系的修飾
-
名稱及其方向
-
角色
-
在關聯的每一端,表明相連的類在該關聯關系中的作用
-
-
多重性(Multiplicity)
- 對于關聯關系另一端的類的每個對象,本端的類可能有多少個對象出現
-
聚合/組合(aggregation/composition)
-
聚合
-
整體有管理部分的特有的職責
-
聚合可以替代多繼承
-
繼承的好處是代碼重用,子類直接繼承了父類的功能。帶來的負面影響是為了繼承父類的某些功能,需要承載整個繼承樹的負荷,有時會使原本簡單的系統復雜化。
-
組合/聚合則比較靈活,在需要的時候把其他模塊的功能集成到自己的系統。
-
-
-
組合
- 整體擁有部分的生命
-
關聯類(Association Class)
-
問題
- 在多對多關系中,一些屬性沒有辦法放在任何一個類中
連接Link
-
連接是關聯的實例
-
連接的是對象
-
對象的圖形表示
公共機制(Common Mechanism)
定義
- 是UML中適用于各種建模元素的公共建模方法
修飾(adornments)
-
可見性
-
private: -
-
protected: #
-
public: +
-
implementation: ~
-
-
注解(Note)
-
用文字對一個(組)UML建模元素進行解釋、約束
-
并不會影響注解的建模元素本身
-
擴展機制(extensibility mechanisms)
-
構造型(stereotype)
-
目的
-
在各種不同的應用領域,用標準的建模元素無法充分表達所需內容
-
需要在現有的建模元素的基礎上進行擴充,產生對特定建模問題特有的建模元素
-
-
定義
- 類似于已有的UML建模元素,但又是對特定的問題領域具有特殊含義的新的建模元素
-
三種形式
-
記名的構造型(named stereotype)
-
構造型的圖標形式(stereotyped element as icon)
-
帶有圖標的記名構造型(named stereotype with icon)
-
-
圖形表示
-
-
標記值(tagged value)
-
目的
- 出于某種原因需要增加一個新的構成以表達建模元素的某種特性
-
圖形表示
-
標記值的字符串由標記值的名字、取值、及分隔符組成
-
-
-
約束(constraint)
-
目的
-
約束用來擴充UML建模元素的語義,以便增加新的規則或修改已有的規則
-
對于一個完備的模型而言,此建模對象必須使該條件被滿足
-
-
圖形表示
-
用大括弧內的字符串表達式表示
-
可以附加在表元素、依賴關系或注釋上
-
-
用例模型
從用戶的角度,面向用戶的需求,對產品外部功能的建模
需求分類
-
Functional
- 系統做的事情
-
Non-functional
- 系統的質量和屬性
-
動態行為
系統邊界
-
用戶角度
- 外部特性:軟件系統通過其邊界呈現給用戶產品的特性
-
開發者角度
-
需要分析軟件產品與外界環境的聯系
-
與軟件交互的對象
-
軟件影響的對象
-
-
-
立足于當前要解決的問題領域,系統邊界描述了系統內部與外部之間交互的集合
模型元素
-
參與者
-
代表位于系統之外并和系統進行交互的一類事物(人、物、其他軟件子系統等)
-
軟件系統的使用者
-
直接和軟件系統交互的軟件系統賴以運行的軟/硬件
-
與軟件系統有信息交換的計算機外部設備
-
通過它,可以對軟件系統與外界發生的交互進行分析和描述
-
-
圖形表示
-
參與者是人
-
參與者是系統
-
-
如何尋找參與者
-
誰使用系統
-
誰安裝系統、維護系統
-
誰啟動系統、關閉系統
-
誰從系統中獲取信息,誰提供信息給系統
-
在系統交互中,誰扮演了什么角色
-
系統會與哪些其他系統相關聯
-
內/外部定時器
-
-
-
用例
-
系統為響應參與者引發的一個事件而執行的一系列的處理/動作,而這些處理應該為參與者產生一種有價值的結果
-
要點
-
用例是一項功能,而不是一個動作
-
名稱必須是短小精悍的動名詞,如修改密碼
-
-
元素關系
-
參與者與用例
- 關聯關系
-
參與者與參與者
- 泛化關系
-
用例與用例
-
泛化關系
-
包含關系
-
基用例必須包含子用例,基用例才能正常進行
-
可以用于整理出多個用例的共同行為
-
-
擴展關系
-
基用例在一定條件下,可以引入子用例
-
-
用例描述
-
事件流描述
-
使用建模元素
-
標注
-
交互圖和活動圖
-
-
-
主次事件流
-
主事件流
-
次要事件流
-
-
用例描述形式
類
概念
-
對象
- 擁有數據和行為的一個實體
-
類
-
具有相同屬性和行為的一組對象的描述符
-
類的選擇依賴于應用領域
-
類的語義是為了描繪此對象代表的事物的性質
-
-
多態(Polymorphic)
- 同一類族的不同對象,可以用不同的行為處理同一條消息
-
繼承(Inheritance)
-
一種將兩個類關聯起來的方法,以便一個類可以使用另一個類的成員而無需重新定義它們
-
繼承和泛化是一樣的
-
-
封裝(Encapsulation)
- 隱藏對象實現細節的過程
-
接口(Interface)
- 特定類或組件的服務的操作集合
-
抽象(abstract)
圖形表示
-
在顯示時,只有類名 是必須的,其余部分均可以隱藏(模型中仍然存在,但不顯示)
-
類名
-
簡單名字
-
復雜名字
-
簡單名字前面加上一個包含該類所在的模型包的名字
-
這兩個名字之間用雙冒號(::)隔開
-
-
-
對象
-
UML的隱藏原則
- 隱藏一些對表達問題不重要的屬性或操作
實例
概念
-
抽象概念的具體存在
-
一個抽象概念可以對應多個實例
-
一個實例可以與一個或多個抽象概念對應
表示
-
命名
-
具名實例
-
孤體實例
-
省略類型名
-
-
匿名實例
-
-
類型
-
路徑名
交互
概念
-
在任何有意義的系統中,對象都不是孤立存在的,它們之間通過傳遞消息進行交互
-
對象之間為實現某一功能,必須實施的協作過程、動態行為,稱為交互
交互的建模元素
-
對象
-
參與者
-
消息
-
一個對象以某種方式啟動另一個對象的活動
-
調用(call):啟動某個對象的操作
-
操作是對象所實現的服務
-
對象也可以給自己發送消息
-
-
返回(return):操作向調用者返回一個值
-
發送(send):向一個對象發送一個信息
-
同步消息
-
異步消息
-
-
創建(create):此消息的發送導致目標對象被創建。
-
銷毀(destroy):此消息的發送導致目標對象被銷毀
-
消息的發送是有順序的
在順序圖垂直方向上,由上而下順序執行
因此每一消息都有一順序號
-
交互的約束
-
Association
- 說明對應的對象通過關聯是可見的
-
Self
- 說明對應的對象, 因為是本操作的調遣者,所以是可見的
-
global
- 說明對應的對象在全局范圍內可見
-
local
- 說明對應的對象在局部范圍內可見
-
parameter
- 說明對應的對象 因為是一個參數,所以是可見的
-
因為連接是關聯的實例,多重性不能用于連接
交互圖
順序圖 Sequence diagram
強調消息的時間順序
-
對象
-
參與者
-
消息
-
對象生存線
代表一個對象在一個時間段內的存在 -
控制焦點
長條矩形
代表一個對象直接地或通過一個子過程間接地執行一個動作的那段時間- 嵌套
-
結構化控制(Frame、Fragment)
-
可選執行 (標簽: opt)
-
條件執行 (標簽:alt)
-
并行執行 (標簽:par)
-
循環(迭代)執行 (標簽:loop)
-
通信圖 Communication diagram
強調接收和發送消息的對象的組織結構
-
對象
-
連接
-
在此連接上傳遞的消息
類圖 – 交互圖 :建模過程是相互補充的過程!
代碼與SD映射
public class Sale {
private Payment payment;
public void makePayment( Money cashTendered ) {
payment = new Payment( cashTendered );
//…
} //
…
}
活動圖
概念
-
活動activity 與動作action
-
一個活動是 一個業務過程中進行的、非原子的執行單元
-
活動的執行最終延伸為一些獨立動作(Action)的執行
-
動作是原子的
-
動作不能被分解
-
-
-
活動圖是 頂點和弧的集合,顯示從活動到活動的流
-
活動節點
-
流
-
對象值
-
注解和約束
-
-
活動節點:是活動的組織單元
-
用一個兩頭為圓形的方框來表示
-
可以有一個名字
-
可以是一種偽代碼描述
-
放大一個活動節點,可以看到另一個活動圖
-
活動節點會持續一段時間來完成
-
-
動作
-
動作是一個特別的活動節點,它不能被細分
-
在圖形表示上,活動節點和動作沒有區別
-
-
控制流
-
用叉箭頭來表示控制流 從一個節點傳到另一個節點
-
-
分支
-
用一個菱形來表示分支
-
一個分支可以有一個進入流和多個離去流
-
在每個離去流上必須設置一個監護條件!!
-
條件放在方括號里
-
條件不能重疊,以免二義性
-
可以有 [else] 分支
-
-
兩個控制路徑可以重新合并,無需監護條件
- 分支節點有兩個輸出流,布爾類型詞語前綴表示不同的選擇條件- 合并節點是條件分支的結束
-
迭代可以用分支節點來實現
-
-
分岔 和 匯合 (Forking and Joining )
-
在UML中,用同步棒來說明并行控制流的分岔和匯合
同步棒是一條水平或垂直的粗線條 -
一分多,多合一
-
分岔和匯合條表示并發控制流 concurrent :
-
多重性指標指明有多少并發的行為必須被處理
-
-
-
泳道 Swimlanes
-
將一個活動圖中的活動分組,每一組表示某個業務組織負責的活動集
-
每個組被稱為一個泳道
用一條垂直的實線把它們分開 -
每個活動嚴格地屬于一個泳道
轉移可以跨越泳道
同步棒可以跨越泳道 -
泳道是包(package)的一種
- 分門別類的組織活動
-
-
對象流
-
用活動圖描述某個對象時,可以把所涉及的對象放置在活動圖上,并用一個依賴將這些對象連接到對它們進行創建、撤銷和修改的活動轉移上。
這種包括依賴關系和對象的應用被稱為對象流 -
活動可以創建 對象
-
活動可以 修改對象的狀態
-
-
活動節點的嵌套
- 當活動被激發或退出時,有可能包含布爾表達式
對系統的動態方面建模的五種圖中之一
- 用例圖活動圖 / 順序圖/通信圖 /狀態圖
一張活動圖從本質上說是一個流程圖,顯示從活動到活動的控制流
動圖中還有一類特殊的狀態,用于表示活動的開始和結束
-
起始狀態(start state)
-
終止狀態(end state)
轉移表示對象將在當前狀態中執行動作,并在某個特定事件發生或某個特定的條件滿足時進入后繼狀態。
狀態圖
比較:順序圖 也是對 對象的動態行為進行建模,區別何在?
- 一個是對象之間的協作 、(比較)一個是單個對象的動態行為
概念
-
考察單個實體的動態行為,從不同的視點(ViewPoint)可有不同的選擇
-
狀態(state)
-
是對象的生命期中的一個條件或狀況
-
在此期間,對象可以響應事件、執行某活動等
-
-
狀態機(state machine)
-
是一種行為,
-
說明對象在它的生命期中, 響應事件所經歷的狀態序列 以及它們對每個事件的響應
-
-
狀態圖(state diagram)
-
狀態機可以用狀態圖來可視化。
-
狀態圖顯示了一個狀態機,它強調從狀態到狀態的控制流
-
-
狀態無關
- 簡單、獨立的行為,或當前的行為并不依賴它們的過去時,不需要用一個狀態機建模
-
狀態依賴
-
對象的當前行為依賴于過去
- 如,手機對于按下某個按鈕的反應,依賴于手機當前的狀態
-
或者它的行為必須響應異步消息
-
-
狀態組成
-
1)名稱(name)
- 每個單詞首字母大寫
-
2)進入/退出動作(entry/exit action)
-
3)內部遷移(internal transition)
- Transitions that are handled without causing a change in state
-
4)子狀態 (substate)
-
5)延遲事件 (deferred event)
-
-
事件
-
是對一個在時間和空間上占有一定位置的、有意義的事情的描述
-
在狀態機的語境中,一個事件是一個激勵的發生,它能夠觸發一個狀態遷移
-
4種事件
-
參量變化 change event
- 布爾表達式值變化、定時器、溢出:是內部事件
-
信號 signal (異步)
-
調用 call (同步)
-
時間事件 time event
-
時間事件 是表示一段時間的推移
-
用關鍵字after 后面跟著時間表達式
-
用關鍵字at 表示某個絕對時間點上發生的時間事件
-
-
變化事件 表示狀態的一個變化或某些條件得到滿足的事件
- 用關鍵字 when后跟一個布爾表達式。當條件滿足,則引發變化事件
-
-
-
-
遷移
-
A滿足一定狀態轉移到B
-
5部分組成
-
源狀態 source state
-
事件觸發器 event trigger (觸發事件名稱)
-
觸發條件 guard condition
-
效應(effect) (或稱,遷移動作)
-
目標狀態
-
-
特殊的遷移
-
自身遷移 self transition
- 從狀態A 遷移到狀態A
-
內部遷移 internal transition
- 在狀態A內部 行為
-
-
圖形
-
狀態
-
一般狀態:圓角矩形
-
初始狀態:實心圓
-
結束狀態:“牛眼” (bull’s eye)
-
-
事件
-
觸發事件名[觸發條件]/遷移動作
-
這三個部分都是可以省略的,但至少有一部分
-
事件依附于表示遷移的箭線
-
-
-
遷移
- 叉形箭頭實線,從初始狀態指向目標狀態
狀態圖建模注意事項
-
不允許孤立的狀態存在
-
不允許只進不出的狀態遷移 (“黑洞”)
-
不允許只出不進的狀態遷移 (“奇跡”)
-
不允許沒有事件發生的遷移或者“遷移” 沒有指明具體的事件
狀態圖與交互圖、活動圖的比較
-
交互
-
對共同工作的 對象群體的 行為 建模
-
動態行為
-
-
狀態機
-
對 單個對象的 行為 建模
-
有時,可以對單個“完整系統”的行為建模
-
說明對象在它的生命期中響應事件所 經歷的狀態序列以及對那些事件的 響應
-
-
動態行為建模
-
-
活動圖
-
強調 從活動到活動的控制流、多個業務角色
-
狀態圖是強調 對象潛在的狀態和這些狀態之間的遷移
-
子狀態機
-
子狀態是嵌套在另一個狀態中的狀態
-
并發(正交,orthogonal)子狀態
-
在一個語境中,并發地執行兩個或多個狀態機
-
如 ‘等人’和‘看書’是相交的
-
-
順序(非正交)子狀態:轉態不相交,一次只能處于一個子系統
-
分岔和匯合
-
分岔:從一個外部狀態直接遷移到一個或多個正交狀態
-
從帶有正交區域的組合狀態內的任一狀態離開的遷移導致控制離開所有的其它正交區域
-
如,發生錯誤,從而迫使所有并行計算都被中斷
-
-
高級類
作用域
-
實例作用域
-
類目作用域(static)
- 類圖中體現為屬性加下劃線
抽象類
-
斜體名字
-
不會被實例化,一般是基類,他的導出類會被實例化;定義了公共的屬性和方法(可以是純虛函數)
葉子類(leaf class)是沒有任何導出類的類
- 類名下加約束{leaf}
根類(root)是沒有任何基類的類
- 類名下加約束{root}
- aBoy:string[1…2]=xxx{constraint}
- methodA(x:int=123):void{constraint}
特性約束
-
isQuery(query):它表明被修飾的操作是一個用于查詢的操作,此操作執行結束之后不會改變類的狀態
-
Sequential:
- 表明被修飾的操作在其對象內不能同時有兩個以上的控制流。而這一點必須由操作的調用者來保證,對象本身不存在禁止兩個控制流被同時啟動的機制。 如果此操作的兩個或兩各以上的控制流在對象的交互中被啟動,則此操作的語義和完整性將不被保證
-
guarded:
-
調用者可以同時啟動此操作的多個控制流,但這些控制流被對象自身轉換為順序執行的控制流。
-
這意味著當多個控制流被同時啟動時,此操作的控制流或者正常執行,或者被自我阻塞,直至沒有其它控制流在正常執行為止
-
-
concurrent(并行的):操作可以有多個控制流被同時啟動,且正常的控制流可以同時運行,但操作的語義和完整性仍可保證
模版類
四種標準擴充
-
《metaclass》定義類的類,它的對象是類
-
《powertype》說明一個類目。其對象是給定父類的子類
-
《stereotype》
-
《utility》
導出依賴 : 《derive》導出依賴是依賴關系的變體
-
在許多情形下,經常有一個類的兩個屬性是互不獨立的
-
例如:有一個類Person,它代表一個人的相關信息,其中有一個屬性是生日BirthDate, 另一個屬性是年齡Age,
-
顯然,Age是可以從BirthDate計算出的
允許《permit》:表示源從目標獲得特定的可見性
約束
-
有序{order}
- 表示關聯一端的對象是顯示有序的
-
集合{set}
- 對象唯一,不可以重復
-
袋{bag}
- 對象不唯一,可以重復
-
有序集合{order set}
- 對象唯一且有序
-
表{list} 或序列 {sequence}
- 對象有序但可以重復
接口
接口為構件指定外部行為特征,從而能夠實現軟件系統的構件化,即,遵循同一個接口的構件可以互相替換
接口只能擁有操作,不能擁有屬性
供接口/需接口
-
包
簡單名字
- 模型包名字的字符串內不包含路徑限定符(:😃
路徑名字
- 名字字符串內包含有路徑限定符
Active Class 主動類
是一個類,其實例是主動對象,擁有一個或者多個進程|線程
其實例可以獨立運作、決定自己的行為
Active Object 主動對象
- 是一個對象,擁有一個進程、或線程,并能夠啟動控制活動
構件
定義了良好接口的物理實現單元,它是系統中可替換的部分
用于描述軟件構件以及構件之間的組織和依賴關系
面向對象系統的物理方面建模時使用的兩種圖之一(另一種圖是部署圖)
構件和類
-
構件在許多方面都與類相同
-
二者都有名稱
-
都可以實現一組接口
-
都可以參與依賴、泛化和關聯關系;
-
都可以被嵌套;都可以有實例;都可以參與交互。
-
-
構件和類之間也有一些顯著的差別:
-
類表示邏輯抽象,而構件表示存在于計算機中的物理抽象
-
構件表示的是物理模塊而不是邏輯模塊,與類處于不同的抽象級別
-
類可以直接擁有屬性和操作;而一般情況下,構件僅擁有只能通過其接口訪問的操作
-
端口和連接件
部署圖
計算節點《processor》
設備節點《device》
對象圖
描述在某一個時間點上一組對象的狀態以及它們之間的關系
分析:對象圖與通信圖之間的異同
-
同:都是 對象之間的組織關系,都用到了 連接(Link)
-
異:
-
通信圖是動態圖,反映對象之間的交互,消息標簽依附于連接
-
對象圖是靜態圖,反映某一瞬間,每個對象的屬性取值(狀態)
-
對象圖可以看作通信圖在某一瞬間的快照
-
制品
制品為一個或者多個構件提供了物理承載(manifestation 表示、承載)
- 比如,一個JAR文件