UML建模——使用EA工具開發時序圖實踐及經驗

肖永威發表於2015-03-19

        Enterprise Architect(以下簡稱EA)是一款基於OMG UML的視覺化模型與設計工具,提供了對軟體系統的設計和構建、業務流程建模和基於領域建模的支援,被企業和組織不僅應用於對系統的建模,還用於推進模型在整個應用程式開發週期中實現。

        在EA工具建模平臺上,提供如下常用設計模型:

  • Business Process   業務流程模型
  • Requirements   需求分析模型
  • Use Case       用例模型
  • Domain Model    領域模型
  • Class            類設計模型
  • Database        資料庫設計模型
  • Component      元件模型
  • Deployment      部署模型
  • Testing          測試模型
  • Maintenance     維護模型
  • Project Management 專案管理模型
  • User Interface     使用者介面模型

       對於現階段我們能用到的最多的就是類設計模型、資料庫設計模型、用例設計模型、元件模型和部署模型。我們可以根據自己的需要選擇所要建立的模型,當然如果不選或選錯了在後期還可以進行更改所以這一步是無關緊要的,本文重點介紹基於類設計模型的時序圖設計實踐。

        序列圖主要用於按照互動發生的一系列順序,顯示物件之間的這些互動。很象類圖,開發者一般認為序列圖只對他們有意義。然而,一個組織的業務人員會發現,序列圖顯示不同的業務物件如何互動,對於交流當前業務如何進行很有用。除記錄組織的當前事件外,一個業務級的序列圖能被當作一個需求檔案使用,為實現一個未來系統傳遞需求。在專案的需求階段,分析師能通過提供一個更加正式層次的表達,把用例帶入下一層次。那種情況下,用例常常被細化為一個或者更多的序列圖。

        組織的技術人員能發現,序列圖在記錄一個未來系統的行為應該如何表現中,非常有用。在設計階段,架構師和開發者能使用圖,挖掘出系統物件間的互動,這樣充實整個系統設計。

        序列圖的主要用途之一,是把用例表達的需求,轉化為進一步、更加正式層次的精細表達。用例常常被細化為一個或者更多的序列圖。序列圖除了在設計新系統方面的用途外,它們還能用來記錄一個存在系統(稱它為“遺產”)的物件現在如何互動。當把這個系統移交給另一個人或組織時,這個文件很有用。

        序列圖的主要目的是定義事件序列,產生一些希望的輸出。重點不是訊息本身,而是訊息產生的順序;不過,大多數序列圖會表示一個系統的物件之間傳遞的什麼訊息,以及它們發生的順序。圖按照水平和垂直的維度傳遞資訊:垂直維度從上而下表示訊息/呼叫發生的時間序列,而且水平維度從左到右表示訊息傳送到的物件例項。


        本實踐軟體專案中,已經完成用例模型(圖中Use Case Model部分)設計,以“流程全生命週期管理”用例為例進行深入設計。

        第一步:在類模型(圖中Class Model)中新增包“Add a Package”,命名為“流程管理”,如下圖1所示,建立“流程管理”包,並同時生成“流程管理”用例圖。

        第二步:開啟“流程管理”用例圖,畫“流程全生命週期管理”用例。

        放置序列圖的位置跟一般的圖形不大一樣,並不是放置在特定的"包"(Package)中。通常,序列圖是表達物件如何合作,進而來完成某一個用例的任務的,因此,序列圖似乎要放在用例當中才合理。所以,我們先到上一步生成“流程管理”用例圖中畫出需要細化的用例。

        

                                                                                              圖1

        第三步:在“流程全生命週期管理”用例裡,建立類模型圖和時序圖,如下圖2所示過程:

        (1)在“流程全生命週期管理”用例圖示中,點選滑鼠右鍵,彈出(2)視窗;

        (2)選擇“Add”,彈出(3)視窗;

        (3)選擇“Add Diagram...”。

        

                                                                                        圖2

        結果如圖3所示,形成“流程全生命週期管理”類圖和時序圖

        

                                                                  圖3

        第四步:在類模型圖中建立類及其屬性(Attributes...)和方法(Operation...)

        如下圖4所示,拖拽Class到類圖(Class Diagram)設計視窗中,雙擊或右擊選擇屬性,在彈出的對話方塊中的常規選項卡中新增資訊。其中名稱“流程模型管理列表”為類名,構造型別可以選擇此類是窗體類還是邊界類還是業務類、實體類等等,本例中選擇為“form”。可見性為類的可見性分別可設為public、private、protected。階段和版本號根據自己的需要設定。備註為給該類新增的備註說明。選擇編譯的語言以方便生成原始碼。點選詳細資訊選項卡,可以向類中新增屬性、方法及方法的引數和相關說明。

        

                                                                                                                                  圖4

        第五步:為類新增屬性和方法

        

                                                                  圖5

        第六步:畫時序圖

        在Project Browser視窗中,雙擊開啟“流程全生命週期管理”時序圖視窗,Toolbox視窗中有如下元件:

  • Actor:角色/執行者,通常用於用例場景圖中,在描述使用者互動時表示當前使用者/操作者。 
  • Lifeline:生命線,最常用,例如系統、子系統、崗位角色、模組、類。當畫一個序列圖的時候,放置生命線符號元件,橫跨圖的頂部。生命線表示序列中,建模的角色或物件例項。
  • Boundary、Control、Entity是三種特殊的生命線物件型別,通常一起使用(MVC模式、控制模式):
  • Boundary:邊界物件,初學者用得少,在MVC模式、控制模式、需求分析過渡到系統設計中用得多些,可用於表示互動介面、子系統。
  • Control:控制物件,用於表示業務邏輯、分工協調的職責物件,採用控制模式分析設計時用得多。
  • Entity:實體物件,用於表示需要永久儲存或較長生命期的資料物件,例如票據、檔案、資料庫(通常不直接說資料庫等技術實現方式,而說邏輯意義的名稱)。
  • Fragment:片段,表示某一區域性序列圖單元,例如條件分支、迴圈、子圖或子圖連結,後者可用於序列圖分層建模。
  • EndPoint:結束點,表示流程退出、異常退出、子圖結束,一般與“Diagram Gate”搭配使用。
  • Diagram Gate:圖入口,表示進入序列圖的一個入口。用於在子序列圖中表示是在什麼情況下由上一級序列圖進來的

        (Interaction Relationships)訊息:為了顯示一個物件(例如,生命線)傳遞一個訊息給另外一個物件,你畫一條線指向接收物件,包括一個實心箭頭(如果是一個同步呼叫操作)或一個棍形箭頭(如果是一個非同步訊號)。訊息/方法名字放置在帶箭頭的線上面。正在被傳遞給接收物件的訊息,表示接收物件的類實現的一個操作/方法。

        1、拖拽Actor到圖板中,命名為“流程管理者”,再從Project Browser樹形目錄中,拖拽“流程模型管理列表”到圖板中,形成如下圖6所示效果。

                                                                                                                            圖6

        或者直接點選工具箱中的生命線(Lifeline)命令,在圖上分別新增多個生命線,輸入生命線名稱後大致調整各個生命線的位置;

        2、通過訊息來表示圖中物件間的互動關係,在圖7中,點選工具箱中的訊息箭頭命令,在一個生命線虛線上按下滑鼠左鍵,拖動到另一個生命線虛線上再鬆開滑鼠左鍵,然後雙擊訊息線就可以輸入訊息名稱了。

        

                                                                                                 圖7


        按本案例,先定義出類的順序,則是選擇訊息名稱,如下圖8所示。圖中:初始化預設列表()、流程模型新增()、選中流程()等方法,都是在類“流程模型管理列表”定義好的,在這裡直接選用。也可以點選按鈕“Operations”,現增加。

        

                                                                                                       圖8


        第七步:序列圖分層

        使用序列圖分層技術可以讓一個圖不至於太複雜,在不同層次的序列圖中表達不同級別的細節。在上圖中,雙擊互動引用框“具體做什麼”就能進入子序列圖,在子序列圖中表達更詳細的內容。

        操作方法:建立單獨的序列圖(子序列圖,例如下圖“流程模型管理列表”時序圖),在模型樹上將“流程模型管理列表”子序列圖節點拖到當前序列圖上,在彈出的對話方塊中選擇第一個型別“互動引用框”:

        

                                                                                                                                                  圖9

        完成連結子時序圖操作時,在當前時序圖上產生圖示。

        最終效果如下圖10所示,點選其所連結的時序圖“ref/流程模型管理列表”的圖示。則展示出圖11,流程模型管理列表內部的時序圖,展現其分層逐級深入的效果。

        

                                                                                                                               圖10

        

                                                                   圖11

        使用UML經驗與願景。

        序列圖把人當作系統。軟體開發的目的就是要改進當前的現實,可能是引進一個新系統,也可能是升級現有的系統。序列圖強迫思考動作背後的目的。其中,訊息代表責任分配而不是資料流動。

        使用EA進行UML建模,是個很好的選擇。在實際工作中,首先保證開發完整的用例模型,用以確定需求範圍和規劃目標;其餘的模型,根據工作需求,設計到可以接受的粒度,如果資源允許,則按規範進行設計更好。

        在開發時序圖時,儘量要逐級精細、深入。反過來,如果編碼進行不順暢,則應再回到時序圖開發過程中,逐步求解,再深入剖析,使開發程式碼儘量簡潔、邏輯清晰。如果其他目的,故弄玄虛,不在此討論。

        初次使用EA工具,不足之處在所難免,歡迎反饋討論。


參考:

維基百科.Enterprise Architect

UML建模--序列圖建模技巧

百度文庫.EA教程

《軟體方法》UMLChina 潘加宇 2012.11

UML建模—EA的使用(一) EA基本設定及類的設計 周響 2013.4

《UML與Enterprise Architect 7.5團隊開發實務手冊》3.2.5 在EA中繪製序列圖  賴信仁 電子工業出版社 2010.3

軟體專案需求開發過程實踐之業務建模用例圖 肖永威 2015.3

相關文章