基于任務驅動模式的軟件工程與UML建模技術項目十一動態(tài)建模課件
單擊此處編輯母版標題樣式,,,,項目十一 動態(tài)建模,項目十一 動態(tài)建模,,任務一 認識動態(tài)建模,,,任務二 認識狀態(tài)圖,,,任務三 認識活動圖,,,任務四 認識順序圖,,,任務五 認識協(xié)作圖,,任務一 認識動態(tài)建模,動態(tài)建模描述的是參與者如何通過交互實現系統(tǒng)中的用例。系統(tǒng)中對象的交互是通過順序圖、協(xié)作圖或者活動圖來描述的,同時,用例模型中用例實現中所使用的類會在狀態(tài)圖中得以描述。,,,?,操作一 動態(tài)建模概述,前面通過類圖和對象圖介紹了系統(tǒng)的靜態(tài)結構建模,本項目將介紹系統(tǒng)的動態(tài)結構模型。UML提供了狀態(tài)圖、活動圖、順序圖和協(xié)作圖來描述系統(tǒng)的結構和行為,它們適合于描述系統(tǒng)中的對象在執(zhí)行期間不同的時間點是如何動態(tài)交互的(一組對象為了實現一些功能而進行通信稱之為交互,可以通過狀態(tài)圖、活動圖、順序圖和協(xié)作圖來描述系統(tǒng)的動態(tài)行為)。通過對軟件系統(tǒng)的靜態(tài)結構和動態(tài)行為的描述,開發(fā)團隊和用戶易于理解目標系統(tǒng)的功能及執(zhí)行結果。,,任務二 認?識?狀?態(tài)?圖,?,操作一 狀態(tài)圖的概述,狀態(tài)圖(Statechart Diagram)是軟件系統(tǒng)進行面向對象分析的一種常用工具,它通過建立對象的生存周期模型(狀態(tài))來描述對象隨時間變化的動態(tài)行為。狀態(tài)圖主要用來描述對象、子系統(tǒng)、系統(tǒng)的生命周期。狀態(tài)圖適合描述跨越多個用例的對象在其生命周期中的各種狀態(tài)及其狀態(tài)之間的轉換,這些對象可以是類、接口、構件或者結點。狀態(tài)圖常用于對反應型對象建模,反應型對象在接收到一個事件之前通常處于空閑狀態(tài),當這個對象對當前事件作出反應后又處于空閑狀態(tài)等待下一個事件。,,?,操作二 狀態(tài)圖的組成,狀態(tài)圖是由表示狀態(tài)的節(jié)點和表示狀態(tài)之間轉換的帶箭頭的直線組成。若干個狀態(tài)由一條或者多條轉換箭頭連接,狀態(tài)的轉換由事件觸發(fā)。如圖11-1所示。,,圖11-1 狀態(tài)圖,,1.起點和終點,起點代表狀態(tài)圖的一個初始狀態(tài),此狀態(tài)代表狀態(tài)圖的起始位置。起點只能作為轉換的源,而不能作為轉換的目標。起點在一個狀態(tài)圖中只允許有一個。 終點代表狀態(tài)圖的最后狀態(tài),此狀態(tài)代表狀態(tài)圖的終止位置。終點只能作為轉換的目標,而不能作為轉換的源。終點在一個狀態(tài)圖中可以有一個或多個,表示一個活動圖的最后和終結狀態(tài)。 如圖11-2所示。,,,圖11-2 狀態(tài)圖的起點與終點,,,圖11-3 登錄提示狀態(tài),,(1) 狀態(tài)的特征。 通常一個狀態(tài)包括名稱、進入/退出活動、內部轉換、子狀態(tài)和延遲事件等五個部分組成。如圖11-4所示,常常使用下面三種標準事件:entry(進入),exit(退出),do(做)?!斑M入事件”用來指定進入一個狀態(tài)的動作;“退出事件”用來指定退出一個狀態(tài)的動作;“做”事件用來指定在該狀態(tài)下的動作(如:發(fā)送一條消息)。,,,“動作”是對象類中一個操作的執(zhí)行,動作具有原子性和不可中斷特性。 “事件”指的是發(fā)生且引起某些動作執(zhí)行的事情,即事件表示在某一人、特定的時間或空間出現的能夠引發(fā)狀態(tài)改變的運動變化。事件有很多,大致可以分為入口事件、出口事件、動作事件、信號事件、調用事件、修改事件、時間事件和延遲事件等,如圖11-3、表11-1及表11-2所示。,,,,表11-2 常見的事件類型,(2) 狀態(tài)的類型。 狀態(tài)的類型有:初始狀態(tài)、原子狀態(tài)、結束狀態(tài)、組合狀態(tài)和子狀態(tài)、并發(fā)狀態(tài)、歷史狀態(tài)等。如圖11-4所示。 子狀態(tài)是指被嵌套在另外一個狀態(tài)中的狀態(tài)。組合狀態(tài)是指含有子狀態(tài)的狀態(tài)。組合狀態(tài)也可以有初態(tài)和終態(tài)。如圖11-5所示。,,,并發(fā)狀態(tài)指一個對象在同一時刻可以處在多種狀態(tài)。如圖11-6所示。,,圖11-6 并發(fā)狀態(tài),,歷史狀態(tài)代表上次離開組成狀態(tài)時的最后一個活動子狀態(tài),它用一個包含字母“H”的小圓圈表示。每當轉換到組成狀態(tài)的歷史狀態(tài)時,對象便恢復到上次離開該組成狀態(tài)時的最后一個活動子狀態(tài),并執(zhí)行入口動作。如圖11-7所示。,,,圖11-7 歷史狀態(tài),,3.轉換,轉換表示當一個特定事件發(fā)生或者某些條件滿足時,一個源狀態(tài)下的對象完成一定的動作后將發(fā)生狀態(tài)轉變,轉向另一個稱之為目標狀態(tài)的狀態(tài)。當發(fā)生轉換時,轉換進入的狀態(tài)為活動狀態(tài),轉換離開的狀態(tài)變?yōu)榉腔顒訝顟B(tài)。轉換用箭頭表示,如果沒有標注事件,則本轉移為自動轉移。 轉換通常分為外部轉換、內部轉換、完成轉換和復合轉換四種。一個轉換一般包括五個部分信息:源狀態(tài)、目標狀態(tài)、觸發(fā)事件、監(jiān)護條件和動作。轉換具有的特征如表11-3所示。,,,表11-3 轉換的特征,?,操作三 使用Rational Rose繪制狀態(tài)圖,狀態(tài)圖顯示了對象的動作行為,顯示對象可能存在的各種狀態(tài)、對象創(chuàng)建時的狀態(tài)、對象刪除時的狀態(tài)、對象如何從一種狀態(tài)轉移到另一種狀態(tài)及對象在不同狀態(tài)中干什么。,1.創(chuàng)建狀態(tài)圖(見圖11-8),(1) 在瀏覽器中右擊類。 (2) 選擇“New”→“Statechart Diagram”,對該類創(chuàng)建一個狀態(tài)圖,并命名該圖。,,2.在圖中增加狀態(tài),初始和終止狀態(tài)(見圖11-9),(1) 選擇工具欄的【state】按鈕,單擊框圖增加一個狀態(tài),雙擊狀態(tài)命名。 (2) 選擇工具欄的“start state”和“end state”,單擊框圖增加初始狀態(tài)和終止狀態(tài)。初始狀態(tài)是對象首次實例化時的狀態(tài),狀態(tài)圖中只有一個初始狀態(tài)。終止狀態(tài)表示對象在內存中被刪除之前的狀態(tài),狀態(tài)圖中有0個、1個或多個終止狀態(tài)。,,圖11-9 增加狀態(tài),,,3.狀態(tài)之間增加交接(見圖11-10、圖11-11),(1) 選擇【state transition】工具欄按鈕。 (2) 從一種狀態(tài)拖到另一種狀態(tài)。 (3) 雙擊交接彈出對話框,可以在“General”中增加事件(Event),在“Detail”中增加保證條件(Guard Condition)等交接的細節(jié)。事件用來在交接中從一個對象發(fā)送給另一個對象,保證條件放在中括號里,控制是否發(fā)生交接。,,圖11-11 增加保證條件,,,4.在狀態(tài)中增加活動(見圖11-12),(1) 右擊狀態(tài)并選擇“OPEN Specification”。 (2) 選擇【Action】標簽,右擊空白處并選擇“Insert”。 (3) 雙擊新活動(清單中有“Entry/”)打開活動規(guī)范,在“Name”中輸入活動細節(jié)。,,任務三 認?識?活?動?圖,?,操作一 活動圖的概述,活動圖(Activity Diagram)顯示活動動作及其結果,著重描述操作(方法)實現中所完成的工作以及用例實例或對象中的活動?;顒邮悄臣虑檎谶M行的狀態(tài),既可以是現實生活中正在進行的某一項工作,也可以是軟件系統(tǒng)中某個類對象的一個操作。 活動圖與常用的程序流程圖相似,它們的主要區(qū)別在于程序流程圖一般用來表示串行過程,而活動圖則可以用來表示并行過程,如圖11-13所示。使用活動圖的主要目的是:,,·描述一個操作執(zhí)行過程中(操作實現的實例化)所完成的工作(動作); ·描述對象內部的工作; ·顯示如何執(zhí)行一組相關的動作,以及這些動作如何影響它們周圍的對象; ·顯示用例的實例是如何執(zhí)行動作以及如何改變對象狀態(tài)的; ·說明一次商務活動中的參與者、工作流、組織和對象是如何工作的。,,,圖11-13 活動圖,,?,操作二 活動圖的組成,UML中活動圖包含的圖形元素有:動作狀態(tài)、活動狀態(tài)、組合活動、分叉與結合、分支與合并、泳道、對象流、動作流。,1.動作狀態(tài),動作狀態(tài)是原子性的動作或操作的執(zhí)行狀態(tài),它不能被外部事件的轉換中斷。動作狀態(tài)的原子性決定了動作狀態(tài)要么不執(zhí)行,要么就完成執(zhí)行,不能中斷。如發(fā)送一個信號、設置某個屬性值等。動作狀態(tài)沒有子結構、內部轉換或內部活動,它不能包括事件觸發(fā)的轉換。動作狀態(tài)有如下特點:,,·動作狀態(tài)是原子的,它是構造活動圖的最小單位,無法分解為更小的部分; ·動作狀態(tài)是不可中斷的,它一旦運行就不能中斷,一直運行到結束; ·動作狀態(tài)是瞬時的行為,它所占用的處理時間極短,有時甚至可以忽略; ·動作狀態(tài)有入轉換,入轉換可以是動作流,也可以是對象流。動作狀態(tài)至少有一條出轉換,這條轉換以內部動作的完成為起點,與外部事件無關; ·動作狀態(tài)與狀態(tài)圖中的狀態(tài)不同,它不能有入口動作和出口動作,也不能有內部轉移; ·動作狀態(tài)允許多處出現在同一活動圖中。,,,,2.活動狀態(tài),活動狀態(tài)是非原子性的,用來表示一個具有子結構的純粹計算的執(zhí)行?;顒訝顟B(tài)可以分解成其他子活動或動作狀態(tài),可以使轉換離開狀態(tài)的事件從外部中斷?;顒訝顟B(tài)可以有內部轉換、入口動作和出口動作?;顒訝顟B(tài)至少具有一個輸出完成轉換,當狀態(tài)中的活動完成時該轉換激發(fā)。活動狀態(tài)用兩邊為弧的條形框表示,中間填活動名?;顒臃譃楹唵位顒雍徒M合活動。簡單活動,指不能再分解的活動;組合活動,指可以再分解的復雜活動?;顒訝顟B(tài)有如下特點: ·活動狀態(tài)可以分解成其他子活動或動作狀態(tài),由于它是一組不可中斷的動作或操作的組合,所以可以被中斷;,,·活動狀態(tài)的內部活動可以用另一個活動圖來表示; ·活動狀態(tài)可以有入口動作和出口動作,也可以有內部轉移; ·動作狀態(tài)是活動狀態(tài)的一個特例,如果某一個活動狀態(tài)只包括一個動作,那么它就是一個動作狀態(tài)。 動作狀態(tài)與活動狀態(tài)如圖11-14所示。,,圖11-14 動作狀態(tài)與活動狀態(tài),,,3.組合活動,組合活動也叫復合活動。在UML的活動圖中,一個大的活動可以分為若干個動作或子活動,這些動作或子活動本身又可以組成一個活動圖。如圖11-15所示。,圖11-15 組合活動與簡單活動,,,4.分叉與結合,并發(fā)指的是在同一時間間隔內有兩個或者兩個以上的活動執(zhí)行。對于一些復雜的大型系統(tǒng)而言,對象在運行時往往不只存在一個控制流,而是存在兩個或者多個并發(fā)運行的控制流。為了對并發(fā)的控制流建模,在UML中引入了分叉和結合的概念。分叉用于表示將一個控制流分成兩個或者多個并發(fā)運行的分支,結合用來表示并行分支在此得到同步。 分叉用粗黑線表示。分叉具有一個輸入轉換、兩個或者多個輸出轉換,每個轉換都可以是獨立的控制流。結合與分叉相反,結合具有兩個或者多個輸入轉換、一個輸出轉換,先完成的控制流需要在此等待,只有當所有的控制流都到達結合點時,控制才能繼續(xù)向下進行。如圖11-16所示。,,,圖11-16 分叉與結合,,,5.分支與合并,分支在活動圖中很常見,它是轉換的一部分,它將轉換路徑分成多個部分,每一個部分都有單獨的監(jiān)護條件和不同的結果。當動作流遇到分支時,會根據監(jiān)護條件的真假來判定動作的流向。分支的每個路徑監(jiān)護條件應該是互斥的,這樣可以保證只有一個路徑的轉換被激發(fā)。 合并指的是兩個或者多個控制路徑在此匯合,合并和分支常常成對使用,合并表示從對應分支開始的條件的行為結束。 在活動圖中,分支與合并都用空心的菱形表示,分支有一個輸入箭頭和兩個輸出箭頭,而合并有兩個輸入箭頭和一個輸出箭頭。如圖11-17所示。,,,圖11-17 分支與合并,,,6.泳道,為了對活動的職責進行組織而在活動圖中將活動狀態(tài)分為不同的組,稱為泳道。每個泳道代表特定含義的狀態(tài)職責部分。在活動圖中,每個活動只能明確地屬于一個泳道,泳道表示了哪些活動由哪些對象進行的。每個泳道都有一個與其他泳道不同的名稱。 在活動圖中,每個泳道通過垂直實線與它的鄰居泳道相分離。在泳道的上方是泳道的名稱,不同的泳道中的活動既可以順序地進行也可以并發(fā)進行。如圖11-18所示。,,,圖11-18 泳道,,,7.對象流,對象可以在活動圖中顯示,表示動作狀態(tài)或者活動狀態(tài)與對象之間的依賴關系。對象可以作為動作的輸入或輸出,或簡單地表示指定動作對對象的影響。對象用矩形符號來表示,在矩形的內部有對象名或類名。對象流用帶有箭頭的虛線表示,如圖11-19所示。,,,圖11-19 對象流,,對象流中的對象有如下特點: ·一個對象可以由多個動作操縱; ·一個動作輸出的對象可以作為另一個動作輸入的對象; ·同一個對象可以多次出現在活動圖中,每一次出現表明該對象正處于對象生存期的不同時間點。,8.動作流,動作流是指所有動作狀態(tài)之間的轉換。在活動圖中,一個動作狀態(tài)執(zhí)行完成本狀態(tài)需要完成的動作后會自動轉換到另外一個狀態(tài),一般不需要特定事件的觸發(fā)。動作流用帶箭頭的直線表示,箭頭的方向指向轉入的方向,如圖11-20所示。,,,圖11-20 動作流,,?,操作三 使用Rational Rose繪制活動圖,活動圖顯示了從活動到活動的流。活動圖可以在分析系統(tǒng)業(yè)務時用來演示業(yè)務流,也可以在收集系統(tǒng)需求的時候顯示一個用例中的事件流?;顒訄D顯示了系統(tǒng)中某個業(yè)務或者某個用例中,要經歷哪些活動,這些活動按什么順序發(fā)生。,1.創(chuàng)建活動圖(見圖11-21),(1) 用于分析系統(tǒng)業(yè)務:在瀏覽器中右擊Use Case視圖,選擇“New”→“Activity Diagram”。 (2) 用于顯示用例中的事件流:在瀏覽器中選中某個用例,然后右擊這個用例,選擇“New”→“Activity Diagram”。,,圖11-21 創(chuàng)建活動圖,,,2.增加泳道(見圖11-22),泳道是框圖里的豎段,包含特定人員或組織要進行的所有活動??梢园芽驁D分為多個泳道,每個泳道對應每個人員或組織。 在工具欄選擇【Swimlane】按鈕,然后單擊框圖增加泳道,最后用人員或組織給泳道命名。,,圖11-22 增加泳道,,,3.增加活動并設置活動的順序(見圖11-23),(1) 在工具欄中選擇【Activity】按鈕,單擊活動圖增加活動,命名活動。 (2) 在工具欄中選擇【Transition】按鈕,把箭頭從一個活動拖向另一個活動。,,圖11-23 增加活動,,,4.增加同步(見圖11-24),(1) 選擇【Synchronization】工具欄按鈕,單擊框圖來增加同步棒。 (2) 畫出從活動到同步棒的交接箭頭,表示在這個活動之后開始并行處理。 (3) 畫出從同步棒到可以并行發(fā)生的活動之間的交接箭頭。 (4) 創(chuàng)建另一同步棒,表示并行處理結束。 (5) 畫出從同步活動到最后同步棒之間的交接箭頭,表示完成所有這些活動之后,停止并行處理。,,圖11-24 增加同步,,,5.增加決策點(見圖11-25),決策點表示可以采取兩個或多個不同的路徑。從決策到活動的交接箭頭要給出保證條件,及控制在決策之后采取什么路徑,保證條件應該是互斥的。 (1) 選擇【Decision】工具欄按鈕,單擊框圖增加決策點。 (2) 拖動從決策到決策之后可能發(fā)生的活動之間的交接,雙擊交接,打開【Detail】選項卡,在“Guard Condition”字段中寫入保證條件。,,圖11-25 增加決策點,,任務四 認?識?順?序?圖,,一個面向對象的軟件系統(tǒng)是一系列相互協(xié)同的對象的集合,每個對象都有自己的“生命”,如果每個對象只關心自己的事情,而不考慮與其他對象的交互將會產生混亂。為了能夠確定這些交互的方法,必須補全對靜態(tài)結構的理解:那些并發(fā)對象是如何交互以及交互是如何影響對象的狀態(tài)的。創(chuàng)建動態(tài)模型來完善系統(tǒng)的靜態(tài)模型,不僅可以幫助確定類中需要的操作,也能改進系統(tǒng)的靜態(tài)結構。 系統(tǒng)動態(tài)模型的其中一種就是交互視圖,它描述了執(zhí)行系統(tǒng)功能的各個角色之間相互傳遞消息的順序關系。,,?,操作一 順序圖的概述,順序圖(Sequence Diagram)也稱為時序圖,描述了對象之間傳送消息的時間順序,它用來表示用例中的行為順序,當執(zhí)行一個用例行為時,順序圖中的每條消息對應了一個類操作中引起轉換的觸發(fā)事件。順序圖可供不同的用戶使用,以幫助他們進一步了解系統(tǒng): ·用戶,幫助他們進一步了解業(yè)務細節(jié); ·分析人員,幫助他們進一步明確事件處理流程; ·開發(fā)人員,幫助他們進一步了解需要開發(fā)的對象和對這些對象的操作; ·測試人員,通過過程的細節(jié)開發(fā)測試案例。,,在UML中,順序圖表示為二維圖,如圖11-26所示。其中,橫軸上代表在協(xié)作中獨立對象的角色。每個對象的表示方法是:矩形框中寫有對象或類名,且名字下面有下劃線??v軸是時間軸,時間沿豎線向下延伸。角色使用生命線進行表示,當對象存在時,生命線用一條虛線表示,此時對象不處于激活狀態(tài),當對象的過程處于激活狀態(tài)時,生命線是一條雙道線。順序圖中的消息使用從一個對象的生命線到另一個對象的生命線的箭頭表示。箭頭以時間順序在圖中從上到下排列。,,,圖11-26 典型的順序圖,,?,操作二 順序圖的組成,順序圖是由對象(Object)、生命線(Lifeline)、激活(Activation)和消息(Messages)等構成的。順序圖的目的就是按照交互發(fā)生的一系列順序顯示對象之間的交互。如圖11-27所示。,圖11-27 順序圖的組成,,,1.對象,順序圖中的對象和對象圖中對象的概念一樣,都是類的實例。順序圖中的對象可以是系統(tǒng)的參與者或者任何有效的系統(tǒng)對象。對象的表示形式也和對象圖中的對象表示方式一樣,使用包圍名稱的矩形框來標記,所顯示的對象及其類的名稱帶有下劃線,二者用冒號隔開,即對象名。 如果對象的開始位置在順序圖的頂部,那就意味著順序圖在開始交互的時候該對象就已經存在了;如果對象的位置不在頂部,那么表明對象在交互的過程中將被創(chuàng)建。,,類元角色(Actor)為系統(tǒng)中發(fā)起請求消息的對象(或者稱為參與者對象),它可以是任何在系統(tǒng)中扮演角色的對象,不管它是對象實例還是參與者,它的生命線的使用方法相同,只是表示方法不同。類元角色的表示方法如圖11-28所示。,,圖11-28 類元角色,,,2.生命線,每個參與者及系統(tǒng)運行中的對象(即活動對象)都用一條垂直的生命線表示。UML用矩形和虛線表示生命線,虛線展示了參與交互的對象的生命長度,矩形框中添加對象名稱。對象與生命線結合在一起稱為對象的生命線。,3.激活,順序圖中的激活是對象操作的執(zhí)行,它表示一個對象直接或通過從屬操作完成操作的過程。它對執(zhí)行的持續(xù)時間和執(zhí)行與其調用者之間的控制關系進行建模。激活使用小矩形條表示,它的頂端與激活時間對齊,而底端與完成時間對齊。,,,4.消息,消息是從一個對象(發(fā)送者)向另一個或幾個對象(接收者)發(fā)送的信號,或由一個對象調用另一個對象的操作。消息可以用于在對象間傳遞參數。消息可以是信號,即明確的、命名的、對象間的異步通信;也可以是調用,即具有返回控制機制的操作的異步調用。其中,順序圖中強調的是消息的時間順序,而協(xié)作圖中強調交換消息的對象間的關系。 在UML中,消息使用箭頭來表示,箭頭的類型表示了消息的類型,消息箭頭所指的一方是接收方。常用的消息類型如表11-4所示。,,,表11-4 常見的消息類型,?,操作三 使用Rational Rose繪制順序圖 1.創(chuàng)建序列圖(見圖11-29),在瀏覽器內的Logic視圖上單擊鼠標右鍵, 選擇“New”→ “Sequence Diagram”就新建了一張序列圖。也可以在瀏覽器中Use Case視圖中選擇某個用例,然后右擊這個用例,選擇“New”→“Sequence Diagram”。,,圖11-29 創(chuàng)建序列圖,,,2.在序列圖中放置參與者和對象(見圖11-30),在序列圖中的主要元素之一就是對象,相似的對象可以被抽象為一個類。序列圖中的每個對象代表了某個類的某一實例。 (1) 把用例圖中的該用例涉及的所有參與者拖到Sequence圖中。 (2) 選擇工具欄中的【Object】按鈕,單擊框圖增加對象。可以選擇創(chuàng)建已有類的對象,也可以在瀏覽器中新建一個類,再創(chuàng)建新的類的對象。雙擊對象,在彈出的對話框中的“Class”里確定該對象所屬的類。 (3) 對象命名:對象可以命名也可沒名字。雙擊對象,在彈出的對話框中的“Name”里給對象取名。,,圖11-30 放置參與者和對象,,,3.說明對象之間的消息(見圖11-31),(1) 選擇【Message】工具欄按鈕。 (2) 單擊啟動消息的參與者或對象,把消息拖到目標對象和參與者間。 (3) 命名消息。雙擊消息,在對話框中【General】里的 “Name”中輸入消息名稱。,,圖11-31 對象之間的消息,,任務五 認?識?協(xié)?作?圖,協(xié)作圖(Collaboration Diagram /Communication Diagram,也叫通訊圖)是一種交互圖,強調的是發(fā)送和接收消息的對象之間的組織結構。與順序圖不同的是,在協(xié)作圖中明確表示了角色之間的關系,通過協(xié)作角色來限定協(xié)作中的對象或鏈。另外,協(xié)作圖不將時間作為單獨的維來表示,所以必須使用順序號來判斷消息的順序以及并行線程。順序圖和協(xié)作圖表達的是類似的信息,雖然它們使用不同的方法表示,但可以通過適當的方式將它們進行轉換。,,?,操作一 協(xié)作圖的概述,要理解協(xié)作圖,首先要了解什么是協(xié)作。所謂協(xié)作,是指在一定的語境中一組對象以及實現某些行為的對象間的相互作用。在協(xié)作中,同時包含了運行時的類元角色(Classifier Roles)和關聯角色(Association Roles),類元角色描述了一個對象,關聯角色描述了協(xié)作關系中的鏈,并通過幾何排列表現交互作用中的各個角色,如圖11-32所示。而使用協(xié)作圖的作用如下: ·通過描繪對象之間消息的傳遞情況來反映具體的使用語境的邏輯表達。一個使用情境的邏輯可能是一個用例的一部分,或是一條控制流,這和序列圖的作用類似。,,·顯示對象及其交互關系的空間組織結構。協(xié)作圖顯示了在交互過程中各個對象之間的組織交互關系以及對象彼此之間的鏈接。與序列圖不同,協(xié)作圖顯示的是對象之間的關系,并不側重交互的順序,它沒有將時間作為一個單獨的維度,而是使用序列號來確定消息及并發(fā)線程的順序。 ·協(xié)作圖的另外一個作用是表現一個類操作的實現。協(xié)作圖可以說明類操作中使用到的參數、局部變量以及返回值等。當使用協(xié)作圖表現一個系統(tǒng)行為時,消息編號對應了程序中嵌套調用結構和信號的傳遞過程。,,,,圖11-32 協(xié)作圖,,?,操作二 協(xié)作圖的組成,協(xié)作圖(Collaboration Diagram)是由對象(Object)、消息(Messages)和鏈(Link)等構成的。,1.對象,協(xié)作圖中的對象和序列圖中的對象的概念相同,同樣都是類的實例。一個協(xié)作代表了為了完成某個目標而共同工作的一組對象。對象的角色表示一個或一組對象在完成目標的過程中所應起的那部分作用。在協(xié)作圖中,不需要關于某個類的所有對象都出現,同一個類的對象在一個協(xié)作圖中也可能要充當多個角色。 協(xié)作圖中對象的表示形式也和順序圖中的對象的表示形式一樣,這里不再詳細介紹。,,,2.消息(見圖11-33),在協(xié)作圖中,可以通過一系列的消息來描述系統(tǒng)的動態(tài)行為。在協(xié)作圖中,消息使用帶有標簽的箭頭來表示,它附在連接發(fā)送者和接收者的鏈上。鏈連接了發(fā)送者和接收者,箭頭的指向便是接收者。 在協(xié)作圖中每個消息包括一個順序號以及消息的名稱。順序號是消息的一個數字前綴,是一個整數,由1開始遞增,每個消息都必須有唯一的順序號。嵌套消息使用點表示法。,,圖11-33 消息,,3.鏈(見圖11-34),在協(xié)作圖中的鏈和對象圖中的鏈的概念和表示形式都相同,都是兩個或多個對象之間的獨立連接,是對象引用元組(有序表),是關聯的實例。 鏈是關聯的實例,當一個類與另一個類之間有關聯時,這兩個類的實例之間就有鏈,一個對象就能向另一個對象發(fā)送消息。所以鏈是對象間的發(fā)送消息的路徑。 在協(xié)作圖中,鏈的表示形式為一個或多個相連的線或弧。在自身相關聯的類中,鏈是兩端指向同一對象的回路,是一條弧。為了說明對象是如何與另外一個對象進行連接的,我們還可以在鏈的兩端添加上提供者和客戶端的可見性修飾。如圖11-34所示,是鏈的普通和自身關聯的表示形式。,,,圖11-34 鏈,,?,操作三 使用Rational Rose繪制協(xié)作圖 1.增加對象鏈接(見圖11-35),(1) 選擇【Object Link】工具欄按鈕。 (2) 單擊要鏈接的參與者或對象。 (3) 將對象鏈接拖動到要鏈接的參與者或對象間。,,圖11-35 增加對象鏈接,,2.加進消息(見圖11-36),(1) 選擇【Link Message】或【Reverse Link Message】工具欄按鈕。 (2) 單擊要放消息的對象鏈接。 (3) 雙擊消息,可以在彈出的對話框里為消息命名。,,圖11-36 加進消息,,,3.自反鏈接(見圖11-37),(1) 選擇【Link to Self】工具欄按鈕。 (2) 單擊要鏈接的對象,會增加一個消息的箭頭。 (3) 雙擊消息,命名自反鏈接。,,圖11-37 建立自反鏈接,,?,操作四 順序圖與協(xié)作圖比較 1.順序圖與協(xié)作圖的比較,順序圖與協(xié)作圖都是交互圖,其區(qū)別主要表現在: 順序圖強調按時間展開的消息的傳遞,清晰地顯示了時間次序;對簡單的迭代和分支的可視化要比協(xié)作圖好,常用于場景顯示;可以不要順序號。 協(xié)作圖強調交互中實例之間的結構關系以及所傳送的消息,清晰地顯示了對象間的關系;對復雜的迭代和分支的可視化以及對多并發(fā)控制流的可視化要比順序圖好,常用于顯示過程設計細節(jié);有路徑和順序號。,,2.順序圖與協(xié)作圖的互換,UML中的順序圖和協(xié)作圖都是用來表示對象之間的交互作用的,其中順序圖側重于描述交互過程中的時間關系,對象之間的關系描述不十分清楚;協(xié)作圖側重于描述交互過程中的對象之間的關系,時間順序描述不是十分清楚。因此,從某種意義上來說,這兩種圖的作用是等價的,Rose中也提供了這兩種圖之間的轉換方式,如下步驟所示(見圖11-38)。 (1) 打開要轉換的順序圖或協(xié)作圖。 (2) 依次選擇主菜單欄中的【Browse】→【Go To Sequence Diagram】,即可將當前的協(xié)作圖轉換成順序圖。,,圖11-38 選擇轉換到順序圖,,