作者 : 萬境絕塵
轉載請注明出處 : http://blog.csdn.net/shulianghan/article/details/17927131
動態圖概念 : 從靜態圖中抽取瞬間值的變化描述系統隨時間變化的行為, 動態圖包括交互圖活動圖狀態圖, 這篇博客研究交互圖 包括時序圖和協作圖;
-- 時序圖 : 顯示對象之間的關系, 強調對象之間消息的時間順序, 顯示對象之間的交互;
-- 協作圖 : 描述對象之間的交互關系;
一. 時序圖 (Sequence Diagram)
1.時序圖的概念
時序圖定義 : 描述了對象之間傳遞消息的時間順序, 用來表示用例中的行為順序, 是強調消息時間順序的交互圖;
時序圖描述的事物: 時序圖描述系統中類和類之間的交互, 將這些交互建模成消息交換, 時序圖描述了類以及類之間的交換以完成的期望行為的消息, 時序圖中每條消息都代表了類的一個操作 或者 引起狀態機改變的觸發事件;
時序圖表示 : 參與交互的對象在時序圖頂端水平排列, 每個對象的底端繪制了一條垂直虛線, 對象A像對象B發送消息, 用一條帶箭頭的實線表示, 該實線起始於對象A底部的虛線, 終止於對象B底部的虛線; 實線箭頭水平放置, 越靠近頂端越早被發送.
時序圖軌跡 : 時序圖提供了隨時間推移的, 清晰的 可視化的軌跡;
2. 時序圖組成
時序圖組成 : 時序圖包括四個元素 對象(Object), 生命線(Lifeline), 激活(Activation), 消息(Message);
(1) 對象(Object)
對象 : 時序圖中的對象在交互中扮演的角色就是對象;
對象的符號 : 時序圖中的對象與對象圖中的表示方法一樣, 使用矩形將對象名稱包含起來, 並且對象名稱下有下划線;
對象創建時機 : 對象可以在交互開始的時候創建, 也可以在交互過程中進行創建;
-- 處於頂部 : 如果對象的位置在時序圖頂部, 說明在交互開始的時候對象就已經存在了;
-- 不在頂部 : 如果對象的位置不在頂部, 那么對象在交互過程中創建的;
(2) 生命線(Lifeline)
生命線 : 生命線是一條垂直的虛線, 這條虛線表示對象的存在, 在時序圖中, 每個對象的底部都有生命線;
生命線作用 : 生命線是一個時間線, 從時序圖頂部一直到底部都存在, 其長度取決於交互的時間;
對象的生命線 : 對象與生命線結合在一起就是對象的生命線, 這個概念包含對象圖標 以及 對象下面的生命線圖標 如上圖;
(3) 激活(Activation)
激活(Activation) : 代表時序圖中對象執行一項操作的時期, 激活期可以理解為語義中 {} 中的內容, 表示該對象被占用以完成某個任務;
去激活(Deactivation) : 指對象處於空閑狀態, 在等待消息激活這個對象;
激活的表示 : 當對象處於激活時期, 生命線可以拓寬為矩形, 這個矩形條成為激活條;
激活去激活的時機 :
-- 激活 : 對象激活是在激活條的頂部激活;
-- 去激活 : 激活條的底部去激活, 通常發生在一個消息離開對象生命線;
(4) 消息
消息概念 : 定義 交互 和 協作 中 交換信息 的類, 對 對象之間的 通信內容 建模;
消息動作 :
-- 動作種類 : 消息允許在實體間傳遞信息 (傳遞參數), 允許實體請求其它服務, 對象之間通過 發送 和 接收 消息 進行通信;
-- 產生結果 : 消息可以觸發操作, 喚起信號, 或使目標對象創建 或 銷毀;
消息的異步和同步通信 :
-- 異步通信 : 消息是信號的時候, 發送信號之后, 等待對方觸發相應方法, 這是明確的 命名的 對象間的異步通信;
-- 同步通信 : 直接調用對象的方法, 執行方法返回結果, 這種具有返回控制機制的操作是同步通信;
時序圖和協作圖中消息的區別 : 時序圖中的消息強調順序, 協作圖中的消息強調交換消息的對象間的關系;
消息類型 :
-- : 兩個對象間繪制消息;
-- : 兩個對象之間的過程調用;
-- : 兩個對象之間的異步消息;
-- : 過程調用中返回的消息;
-- : 繪制反身消息;
3. 時序圖示例
示例簡介 :
-- 使用場景 : 汽車租賃公司;
-- 使用的對象 : Customer (客戶), Worker (工作人員), Order (請求), Record (記錄), Car (汽車);
-- 工作流程 : ① 客戶 向 工人 提出租車要求, ② 工人 檢查 請求, ③ 客戶 付款, ④ 工人 填寫 記錄, ⑤ 工人 取車;
時序圖 :
4. 對象的創建和撤銷
對象位置 :
-- 頂部 : 時序圖中對象的默認位置是在時序圖頂部, 這表明對象在交互開始之間就已經存在;
-- 中間 : 如果對象在時序圖中間部分, 說明對象時在交互過程中創建的;
交互過程中創建對象的方法 :
-- 消息指向對象 : 消息是構造方法, 箭頭指向對象所代表的的矩形;
-- 消息指向激活條 : 消息是構造方法, 箭頭指向對象下面的激活條;
撤銷對象 : 如果想要在時序圖中撤銷一個對象, 因為如果同時有幾個對象, 如果不進行特殊操作其生命周期將會一樣長;
-- 效果圖 : 下圖中將 Customer 和 Order 對象撤消了, 因為它們基本沒有參與后期的交互;
5. 時序圖建模技術
時序圖使用時機 : 對動態行為建模, 強調時間展開信息的次序的時候, 使用時序圖;
時序圖管理策略 :
-- 單一控制流 : 一個單獨的時序圖只能顯示一個控制流;
-- 多個時序圖 : 完整的控制流很復雜, 可以繪制多個時序圖, 一個主干時序圖, 多個分支時序圖, 使用包對這些時序圖進行管理;
時序圖建模策略 :
-- 設置交互語境 : 交互所在的環境, 包括哪些對象, 屬於什么系統, 子系統, 相關的操作 類 用例等;
-- 對象排列順序 : 根據對象重要性, 從左到右排列在時序圖中;
-- 對象生命線 : 對象通常存在於交互的整個過程, 也可以在交互過程中被創建和撤銷;
-- 消息排列 : 引發交互信息之后, 消息按照時間順序從上向下畫出, 先發出的消息 在 后發出的消息上面;
-- 激活期設置 : 可以將實際操作發生的 時間點 消息 明確的顯示出來;
-- 時間空間約束 : 每個消息都可以附加合適的時間 和 空間約束;
-- 前置后置條件 : 每條消息可以附加 前置 或 后置 條件;
6. Rational Rose 時序圖 操作
(1) 創建時序圖
新建時序圖 : 在 視圖瀏覽器 中 右鍵點擊 Logical View (邏輯視圖), 選擇 New(新建) -> Sequence Diagram(時序圖);
(2) 添加對象
添加對象 : 時序圖中有兩種對象, 一種是參與者Actor, 一種是普通的對象;
-- 參與者對象 : 在類圖中創建一個對象, 將其 Stereotype 修改為 Actor, 就變成了參與者, 然后在 視圖瀏覽器中將這個元素拖到時序圖中即可;
-- 普通對象 : 直接在 時序圖中 點擊 按鈕, 在界面中創建對象;
-- 兩種對象效果 :
設置對象屬性 : 雙擊對象, 在彈出的 General 對話框中修改對象屬性;
-- Name : 對象名稱, 不輸入也可以;
-- Document : 描述對象的文檔;
設置對象持續性 :
-- 持續 (Persistent) : 對象保存在數據庫 或 其它形式的永久存儲體中;
-- 靜態 (Static) : 對象保存在內存中知道程序終止;
-- 臨時 (Transient) : 短時間內保存在內存中;
(3) 添加消息
消息作用 : 消息用兩個對象生命線之間的箭頭表示, 一個對象可以通過消息請求另一個對象執行某個操作;
增加消息 :
-- 發送消息 : 將 從發送消息對象的生命線 拖到 接收消息對象的生命線上;
-- 顯示取消編號和激活條 : 菜單欄 Tools -> Options -> Diagram 選項卡, Sequence numbering 是消消息編號 , Focus of control 顯示激活條;
.
二. 協作圖 (Collaboration Diagram)
1. 協作圖概念
協作圖 : 協作圖是 一種 類圖, 包含 類元角色 和 關聯角色, 不僅僅是 類元 和 關聯;
-- 強調 : 強調參與交互的 各個對象的結構信息 和 組織;
協作圖建模對象 : 對有交互的對象 和 這些對象之間的關系建模, 不參與交互的對象及它們的關系忽略;
協作圖內容 : 協作圖中表現了 類操作中用到的參數, 布局變量, 操作中的永久鏈;
對象圖擴展 : 協作圖可以看做對象圖的擴展, 該圖展示了對象之間的關聯, 顯示出了對象間的消息傳遞;
2. 協作圖內容
(1) 對象(Object)
對象 : 代表協作圖 交互 中的主體, 和時序圖中對象的概念類似;
協作圖 和 時序圖中對象區別 : 協作圖中對象無法 創建 和 撤銷, 因此 對象在協作圖的位置沒有限制;
(2) 鏈(Link)
.
鏈的表示 : 鏈的符號 和 對象圖中 鏈所用的符號是一樣的, 用來連接兩個類角色的實線;
-- : 創建對象之間的通信路徑;
-- : 顯示對象可以調用自己的屬性;
-- : 在兩個對象之間 或 一個對象本身增加消息;
-- : 在兩個對象之間 或 一個對象本身 從反方向增加消息;
-- : 顯示兩個對象之間的信息流;
-- : 在反方向顯示兩個對象之間的信息流;
路徑構造性 : 對象之間的連接 可以由 鏈末尾 附加的 路徑構造型表示;
-- 添加方式 : 雙擊鏈, 選擇 visibility屬性即可;
(3) 消息 (Message)
消息概念 : 對象間通過鏈接發送的就是消息;
-- 消息傳遞方向 : 對象之間的箭頭表明對象間交換的消息流, 一個對象發出消息, 鏈指向的對象接收消息, 鏈用於實現消息傳輸;
-- 消息標識 : 消息流標有消息的序列號 和 對象間發送的消息名稱;
-- 消息結果 : 每條消息否會觸發接收對象的一系列操作;
消息序號 : 協作圖 與 時序圖 中的 消息類型 是一樣的, 為了表明消息順序, 需要為消息添加序號;
3. 協作圖示例
示例簡介 : 汽車租賃流程;
-- 涉及到的對象 : Customer (客戶), Order (訂單), Worker (工人), Record (記錄), Car (汽車);
-- 流程簡介 : 客戶 寫好 訂單, 工人 核對 訂單, 核對后 訂單 存在, 允許 客戶 取車, 工人 填寫 記錄, 並將車 取出;
4. 協作圖建模策略
協作圖使用場景 : 對系統動態行為建模, 按組織對控制流建模使用協作圖;
協作圖管理策略 :
-- 單個協作圖 : 單個協作圖 只能 顯示一個控制流;
-- 多個協作圖 : 描述復雜系統的時候, 需要許多協作圖共同描述, 一些圖是主干協作圖, 還有許多分支路徑的控制流的協作圖, 使用包管理這些協作圖;
協作圖的建模策略 :
-- 設置語境 : 設置 協作圖所在的環境 , 如 系統, 子系統, 類, 操作, 用例 或 用例腳本;
-- 對象頂點 : 識別對象在協作圖中扮演的角色, 協作圖中, 對象是圖的頂點;
-- 變化修改 : 每個對象最初都會設置初始值, 如果期間對象發生了變化, 修改的方式是 : 協作圖中放置一個復制對象, 更新復制對象, 同過后造型 become copy 連接二者;
-- 確定鏈接順序 : 先確定關聯鏈接, 哪些對象相互鏈接; 在確定消息鏈接, 路徑構造型等 表示對象間如何連接;
-- 消息順序 : 從引起交互的消息開始編號, 將編號信息 和 描述信息 附到鏈接上, 描述了對象之間的傳遞次序;
-- 時間空間約束 : 可以為每個消息附加 時間 和 空間 上的約束;
-- 前置后置條件 : 可以為每個消息附加 前置 和 后置 條件;
5. Rational Rose 繪制 協作圖
(1) 創建協作圖
創建流程 : 視圖瀏覽器 -> Logical View (邏輯視圖) -> New (新建) -> Collaboration Diagram (協作圖);
(2) 添加對象
協作圖中添加對象 : 與時序圖基本類似;
-- 添加參與者對象 : 在類圖中創建好類, 然后將類型設置為Actor, 然后在視圖瀏覽器中將Actor拖到協作圖中;
-- 添加普通對象 : 直接點擊工具欄中的圖標設置即可;
(3) 添加消息
添加對象間消息 : 在兩個對象之間添加消息;
-- 建立通信路徑 : 使用 連接兩個對象, 建立兩個對象間的通信路徑;
-- 添加消息 : 使用 或
在通信路徑上添加消息;
-- 設置消息名稱 : 雙擊消息箭頭, 可以在彈出的對話框中修改消息名稱;
添加反身消息 : 選擇 點擊 對象, 就會出現指向對象本身的路徑, 選擇
點擊這個指向本身的路徑, 可以為該對象添加消息;
(4) 添加數據流
數據流概念 : 數據流是一個對象向另一個對象發送消息返回的消息;
-- 使用場景 : 沒必要在每個消息上都加上數據流, 只要在中葯消息上附加數據流即可;
數據流添加方法 : 選擇 或
按鈕, 單擊要返回的數據消息, 數據流箭頭就會被添加到這個消息上;
.
6. 時序圖 與 協作圖 轉換
各自側重點 : 時序圖 和 協作圖 是等價的, 可以任意轉換, 而不丟失信息;
-- 時序圖 : 描述交互過程中的時間順序, 沒有明確表達對象間關系;
-- 協作圖 : 描述了對象間的關系, 但是時間順序必須從消息的序號中獲取;
轉換示例 :
-- 場景介紹 : 學生畢業管理;
-- 對象介紹 : 教務人員, 學位評價, 成績管理, 獎懲管理, 信息打印;
-- 控制流介紹 : ① 教務人員 輸入學號 進入學位評價模塊, ② 學位評價模塊 會向 成績管理模塊查詢成績, ③ 向獎懲管理模塊 查詢 獎懲記錄, ④ 學位評價模塊 會將結果打印到 信息打印模塊, ⑤ 信息打印模塊 將結果返回給教務人員;
時序圖 :
協作圖 :
7. 時序圖 和 協作圖 對比
時序圖 和 協作圖 共同點 : 都是有 消息 和 類角色組成;
-- 規定責任 : 時序圖 和 協作圖 都規定了 消息發送對象 和 消息接收對象 的責任, 每個接收對象都有消息對應的接口, 這個接口方法由消息發送對象觸發;
-- 支持消息 : 時序圖 和 協作圖 都支持消息;
-- 衡量工具 : 時序圖 和 協作圖 可以作為衡量系統耦合性的工具, 耦合性就是 系統中模型之間的依賴性, 兩個模型之間的依賴關系通過查看兩個模型之間的消息數量 和 類型就可以看出, 消息交互少的 耦合性高;
時序圖 和 協作 不同點 :
-- 對象創建撤銷側重點 : 時序圖側重描述對象的創建 和 撤銷, 新創建的對象放在對象生命線上對應的時間點, 撤銷的對象在結束的地方放一個 X 表示該對象不能再繼續使用; 協作圖中 創建 撤銷的概念不存在, 對象時始終存在的, 只能通過消息描述 或 約束 來說明對象的創建和撤銷;
-- 鏈接側重點 : 時序圖 中的鏈 沒有表示出來, 可以隨意繪制消息, 有些邏輯交互可能不會發生; 協作圖 的消息 是映射在鏈 上的, 消息 和 鏈 平行放置, 如果想要通過消息 查看 對象之間的關聯 使用協作圖最好;
-- 激活和去激活 : 時序圖表現有激活 和 去激活, 協作圖上沒有時間概念的描述, 無法清晰地表示對象的激活 和 去激活;
三. 實例 - 圖書管理系統
1. 管理員為圖書添加類別
控制流說明 :
-- 涉及到的對象 : Admin (管理員), BookInfoWindow (圖書信息窗口), Tittle (圖書類別), Item (圖書條目);
-- 流程 : 管理員 查詢 圖書信息窗口, 查看有沒有相應的 圖書類別, 如果有 插入該圖書條目;
時序圖 :
\
協作圖 :
2. 管理員刪除圖書
控制流說明 :
-- 涉及到的對象 : Admin (管理員), BookInfoWindow (圖書信息窗口), Tittle (圖書類別), Item(圖書條目);
-- 控制流程 : 管理員 登陸 圖書信息窗口 刪除圖書, 查表圖書類別 是否存在, 查找圖書是否存在, 如果都返回true, 刪除圖書條目;
時序圖 :
協作圖 :
3. 管理員 借書時序圖
控制流說明 :
-- 參與的對象 : Admin (管理員), BookInfoWindow (圖書信息窗口), Tittle (圖書類別), Borrower (借閱者), Loan (借書記錄), item (圖書條目);
-- 流程 : 管理員 登陸 圖書信息窗口, 查詢 圖書類別 是否存在, 查詢 圖書條目是否存在, 查詢 借閱者是否存在, 創建 借書記錄;
時序圖 :
協作圖 :