- UML2面向對象分析與設計(第2版)
- 譚火彬編著
- 6611字
- 2019-07-01 10:17:36
2.5 應用UML 2建模

視頻講解
在系統地介紹UML 2概念模型后,本節將結合具體的應用實例,詳細介紹各類UML模型圖中核心的建模元素及基本建模方法。正如前文所述,UML 2提供了兩類(結構圖和行為圖)14種圖形用于系統建模。
◆ 類圖:描述類、接口、協作及它們之間的關系。
◆ 對象圖:描述對象及對象之間的關系。
◆ 包圖:描述包及包之間的相互依賴關系。
◆ 組合結構圖:描述系統某一部分(組合結構)的內部結構。
◆ 構件圖:描述構件及其相互依賴關系。
◆ 部署圖:展示構件在各節點上的部署。
◆ 外廓圖:展示構造型、元類等擴展機制的結構。
◆ 順序圖:展示對象之間消息的交互,強調消息執行順序的交互圖。
◆ 通信圖:展示對象之間消息的交互,強調對象協作的交互圖。
◆ 時間圖:展示對象之間消息的交互,強調真實時間信息的交互圖。
◆ 交互概覽圖:展示交互圖之間的執行順序。
◆ 活動圖:描述事物執行的控制流或數據流。
◆ 狀態機圖:描述對象所經歷的狀態轉移。
◆ 用例圖:描述一組用例、參與者及它們之間的相互關系。
需要說明的是,早期的UML 1.x只提供了9種圖形。包圖、組合結構圖、外廓圖、交互概覽圖、時間圖這5種是在UML 2中新增的(外廓圖是在UML 2.3之后才有的);而通信圖則是由UML 1.x的協作圖改名而來,其他的一些圖形也做了適當的調整和擴充。
當然,為了能夠有效地畫出這些圖形,還需要采用相應的CASE工具。目前,市面上有很多種CASE工具用于UML建模。其中比較有名的如IBM公司的Rational系列產品(包括Rational Rose 2003、Rational Software Architect、Rational Rhapsody等)、Sparx Systems公司的Enterprise Architect、Change Vision公司的Astah UML、MKLab公司的StarUML、SAP Technologies公司的PowerDesigner、Microsoft公司的Visio等,此外還有數以百計的各類共享/開源工具。作為UML的創始人,IBM Rational的產品對UML的支持比較全面,本書中部分案例采用早期Rational Rose 2003作為建模工具;然而由于Rational Rose 2003版本較老,而新版的Rational Software Architect又過于龐大、功能過于復雜,不適合教學用途,因此本書中的另一部分案例采用Enterprise Architect 12.0繪制,該工具對UML標準支持非常全面,基本上能滿足本書大部分建模需求。讀者可以根據自己的情況,選擇一種合適的建模工具。
為了能夠系統地講解各類UML圖的應用,本節以一個圖書館管理系統為例,對13種UML圖(外廓圖在第2.4.2小節中已經介紹)的應用進行詳細介紹。該圖書館管理系統的原始需求如下所示。
◆ 該系統是一個基于Web的計算機應用系統。
◆ 讀者可以查詢圖書信息及借閱信息。
◆ 讀者可以通過系統預約所需的圖書。
◆ 圖書館工作人員利用該系統完成讀者的借書、還書業務。
◆ 圖書館工作人員可以對圖書信息、讀者信息等進行維護。
◆ 對于到期的圖書,系統會自動向讀者發送催還信息。
◆ 管理員會定期進行系統維護。
2.5.1 用例圖
對于該圖書館管理系統,首先需要描述其功能。將在UML中采用用例模型(包括用例圖和它的規格說明)來進行描述。
用例圖(Use Case Diagram)是被稱為參與者的外部用戶所能觀察到的系統功能的模型圖,其主要功能如下所示。
◆ 列出系統中的用例和參與者。
◆ 顯示哪個參與者參與了哪個用例的執行工作。
用例圖中的核心概念包括以下幾個。
◆ 用例(Use Case):系統中的一個功能單元,可以被描述為參與者與系統之間的一次交互作用。
◆ 參與者(Actor):通過系統邊界與系統進行有意義交互的外部實體。
◆ 泛化:參與者與參與者之間的關系。
◆ 關聯:用例與參與者之間的關系。
◆ 擴展、包含、泛化:用例之間的關系。
用例圖的推薦使用場合:包括業務建模、需求獲取和定義等場合。
表2-2列出了用例圖中的主要建模元素(用例圖的詳細使用將在第4章中介紹)。需要說明的是,由于注解和注解鏈接在所有的UML圖中均可使用,因此本章后面各類圖形的建模元素講解中將不再包含這兩個元素。
表2-2 用例圖中的主要建模元素

在圖書館管理系統中,讀者、工作人員、管理員等作為參與者,可以利用該系統完成借書、還書、預約圖書、查詢圖書、維護圖書/讀者信息、維護系統等功能單元操作,這些功能單元便構成了一個個的用例。此外,系統定期檢測到期圖書并發送催還消息,也可以構成一個用例,該用例由系統時間自動啟動。該系統的用例圖如圖2-15所示。

圖2-15 圖書館管理系統用例圖
通過用例圖,我們可以獲得用戶使用系統的情況,但是具體的使用過程又是怎樣的呢?例如,讀者到底是怎么預約圖書的、工作人員又是如何為讀者完成借書操作過程的,用例圖中沒有展示這些流程信息,這時候開發人員需要編寫該用例圖文本維度的規格說明——用例文檔。用例模型中的每一個用例都需要開發人員為其編寫相應的用例文檔,有關用例文檔的編寫規則請參見第4章。
2.5.2 活動圖
用例文檔描述了用例的業務流程,有些用例的流程比較復雜(如存在分支、循環等復雜結構),只用文本描述這個流程并不直觀,且不利于用戶之間的溝通。此時,開發人員可以采用活動圖來描述該用例內部的執行流程。
活動圖(Activity Diagram)是一種動態行為圖,將業務流程或其他計算的結構展示為內部一步步的控制流和數據流,主要用于描述某一方法、機制或用例的內部行為。活動圖中的核心概念包括以下幾個。
◆ 活動、組合活動:表示某個內部的控制邏輯。
◆ 對象、對象流:與活動相關的數據對象。
◆ 轉移、分支:控制活動之間的先后順序。
◆ 并發、同步:支持活動間的并發和同步。
◆ 分區:描述活動的不同參與者。
活動圖的推薦使用場合:包括業務建模、需求、類設計等場合。
表2-3列出了活動圖中的主要建模元素,活動圖的使用細節將在第3章中介紹。
表2-3 活動圖中的主要建模元素

圖書館管理系統用例模型中的用例,特別是復雜的用例,均可以用活動圖來表示。圖2-16展示了借書用例的活動圖,開發人員可以把該活動圖放在用例文檔的“相關圖”部分。

圖2-16 借書用例活動圖
2.5.3 類圖、對象圖、包圖和組合結構圖
描述完需求后,本小節對系統進行分析和設計。UML提供了4種靜態結構圖來描述系統。其中,類圖(Class Diagram)是軟件的藍圖,用于詳細描述系統內各個對象的相關類,以及這些類之間的靜態關系;對象圖(Object Diagram)用于表示在某一時刻,類的對象的靜態結構和行為;包圖(Package Diagram)用于展現由模型本身分解而成的組織單元(包)及它們的依賴關系;組合結構圖(Composite Structure Diagram)用于描述系統中某一部分(組合結構)的內部結構,包括該部分與系統其他部分的交互點。
靜態結構圖中的核心概念包括以下幾個。
◆ 類圖:類、接口、依賴、關聯、泛化、實現。
◆ 對象圖:對象、鏈接、多重性。
◆ 包圖:包(框架、層、子系統)、依賴。
◆ 組合結構圖:組合結構、部件、端口、角色綁定。
靜態結構圖的推薦使用場合:包括業務建模、分析、設計、實現等場合。
表2-4列出了類圖、對象圖和包圖中的主要建模元素。類圖的使用細節將在第5章和第9章中介紹;對象圖的使用細節將在第5章中介紹;包圖的使用將在第8章中介紹。
表2-4 類圖、對象圖和包圖中的主要建模元素

表2-5列出了組合結構圖中的主要建模元素。作為UML 2新增的模型圖,目前組合結構圖被應用得并不是很廣泛。
表2-5 組合結構圖中的主要建模元素

對于圖書館管理系統,通過類圖可以反映該系統內部的靜態結構特征(類和類之間的關系)。圖2-17所示的類圖就展示了圖書類(Book)、借閱信息類(BorrowInfo)、讀者類(Reader)之間的靜態關系。其中,圖書分為不同的類別(Catalog),如科技書(TechBook)、文學書(LitBook)、新書(NewBook),而讀者分為學生(Student)和教職工(Faculty)。

圖2-17 圖書館管理系統類圖
對象圖則用于展示某一時刻對象之間的關系。圖2-18所示的對象圖展示了一名教職工(thbin)的個人借閱信息(myInfo),他一共借了4本書:一本新書(book1)、兩本科技書(book2、book3)和一本文學書(book4)。

圖2-18 某教職工借閱信息對象圖
包圖展示了軟件系統的分層結構。在圖書館管理系統中,如圖2-19左半部分所示,系統高層分為3層,其中界面層負責用戶交互;數據訪問層負責訪問底層信息;業務邏輯層負責協調界面層和數據訪問層間的訪問邏輯。此外,對于數據訪問層內部,又可以采用分包的方式進行邏輯劃分,如圖2-19右半部分所示,分為借閱包、讀者包、圖書包。

圖2-19 圖書館管理系統包圖
作為一種新增圖形,組合結構圖主要反映的是系統某一部分內部結構的組成。為了完成系統所需的某些功能(如借書),需要幾個類之間進行相互協作,而這幾個類就構成了一個組合結構。為了完成借書的功能,這些類之間存在著一定的接口(組合結構圖中稱為端口)和連接,這些信息即可通過組合結構圖來反映。圖2-20展示了借書過程的組合結構圖,為了完成借書的過程,在該圖中需要設置借閱用戶界面類(BorrowUI)、借閱控制類(BorrowCtrl)、借閱信息類(BorrowInfo)、讀者類(Reader)和圖書類(Book)。

圖2-20 借書過程的組合結構圖
2.5.4 順序圖
分析完靜態結構后,本小節描述對象之間的動態交互行為,需要用到動態交互圖,而順序圖就是一種最常用的動態交互圖。順序圖(Sequence Diagram)用于顯示對象間的交互活動,它關注對象之間消息傳送的時間順序。順序圖中的核心概念包括以下幾個。
◆ 對象、生命線、執行發生、消息。
◆ 交互片段(Interaction Frame):UML 2中的新增概念,用于封裝交互圖中的片段,并可對片段施加一定的操作(如選擇、循環、并行等),從而使UML支持復雜的交互建模。
順序圖的推薦使用場合:包括用例分析、用例設計等場合。
表2-6列出了順序圖中的主要建模元素,順序圖的使用細節將在第5章中介紹。
表2-6 順序圖中的主要建模元素

圖2-21所示的順序圖描述的是為了完成借書的過程,系統中的對象是如何進行交互的。

圖2-21 完成借書過程的順序圖
圖2-21是UML 1.x版本的順序圖,可以看到,其中的第2步“錄入圖書信息”是一個循環的過程,第2.1.1步存在一個選擇(如果失敗了該怎么做),而這些信息無法直接在圖中描述(只能通過注解或標記的方式表示)。為此,UML 2引入了交互片段的概念來解決這個問題,通過交互片段可以很方便地實施各種復雜的邏輯,如圖2-22所示(loop操作表示循環、alt操作表示選擇)。

圖2-22 使用交互片段后的借書過程順序圖
2.5.5 交互概覽圖
當一個用例內部的交互行為非常復雜時,通過一個順序圖可能無法很好地表示出來,這時候可能會把該用例的行為拆分成幾個順序圖。此時,這幾個順序圖之間的關系就可以通過交互概覽圖來描述。交互概覽圖(Interaction Overview Diagram)是活動圖和順序圖的混合體,它將直觀地表達一組相關順序圖之間的流轉邏輯。交互概覽圖中的核心概念包括以下幾個。
◆ 交互片段。
◆ 起點、終點、決策、轉移。
交互概覽圖的推薦使用場合:包括用例分析、用例設計等場合。
表2-7列出了交互概覽圖中的主要建模元素。
表2-7 交互概覽圖中的主要建模元素

作為UML 2新增的模型,交互概覽圖的使用場合并不多,而且目前許多支持UML 2建模的工具也不支持該圖的建模。圖2-23展示了某讀者使用系統的一段流程,其中每個交互片段內部對應另外一個順序圖,通過ref算子來引用。

圖2-23 某讀者使用系統的一段流程圖
2.5.6 通信圖
在展示對象交互圖時,順序圖側重描述交互的先后順序,而交互對象之間的關系并不能體現出來,通信圖則是從另外一個視角來描述對象交互的交互圖。
通信圖(Communication Diagram),在UML 1.x中稱為協作圖(Collaboration Diagram),表示一組對象之間的關系及交互活動。通信圖和順序圖是同構的(描述的能力相同,很多工具提供了自動相互轉換功能),只是側重點不同。通信圖中的核心概念包括以下幾個。
◆ 對象、協作角色。
◆ 協作、交互、消息。
通信圖的推薦使用場合:包括用例分析、用例設計等場合。
表2-8列出了通信圖中的主要建模元素,通信圖的使用細節將在第6章中介紹。
表2-8 通信圖中的主要建模元素

圖2-24所示的通信圖描述的是為了完成借書的過程,系統中的對象是如何進行交互的(該圖與圖2-21的順序圖所描述信息完全相同,可以體會一下它們的不同點)。

圖2-24 完成借書過程的通信圖
2.5.7 時間圖
對于一些特定的系統(如實時系統),有時候真實的時間信息非常重要(如某個消息在發送出去后,在1s之內必須返回), UML 2引入了新的時間圖來描述時間信息。
時間圖(Timing Diagram)是一種交互圖,用于展現消息跨越不同對象或角色時真實的時間信息,可描述單個或多個對象狀態變化的時間點及維持特定狀態的時間段。此外,順序圖作為表示交互的主要手段,也可以在其中增加時間約束來表明對象狀態變化的時間點及維持特定狀態的時間段。時間圖中的核心概念包括以下幾個。
◆ 時間約束、持續時間約束、生命線。
◆ 狀態、條件、事件。
表2-9列出了時間圖中的主要建模元素。作為一種新增的UML圖形,目前大部分建模工具都不支持時間圖的建模。
表2-9 時間圖中的主要建模元素

作為一種全新的UML模型,目前時間圖還沒有得到廣泛推廣。此處以打電話的場景為例,說明時間圖的使用方法。在打電話的過程中,電話機處于不同的狀態(如空閑、撥號音、撥號、連接、通話等);當用戶拿起電話后,電話提示撥號音,之后必須在一段時間內完成撥號動作(如30s),否則電話會自動掛起。為了表示這30s的時間順序,可以通過在順序圖中添加約束來表示,如圖2-25所示。

圖2-25 添加時間約束的順序圖
涉及這種真實時間信息的交互,采用時間圖可以更方便地描述。時間圖有兩種表示狀態的方法,一種是通過直線的方式,另一種是通過區域的方式,分別如圖2-26和圖2-27所示。

圖2-26 打電話過程的時間圖(采用直線方式)

圖2-27 打電話過程的時間圖(采用區域方式)
2.5.8 狀態機圖
順序圖和通信圖都是交互圖的一種,它們側重于描述對象之間的交互過程。然而,有時候對象本身也是很復雜的,它可能涉及不同的狀態和行為,此時需要通過狀態機圖來表示。
狀態機圖(State Machine Diagram),就是UML 1.x中的狀態圖(Statechart Diagram),利用狀態和事件描述對象本身的行為。它是一種非常重要的行為圖,強調事件導致的對象狀態的變化。狀態機圖中的主要概念包括以下幾個。
◆ 狀態、初態、終態。
◆ 事件、轉移、動作。
◆ 并發狀態機。
狀態機圖的推薦使用場合:包括類設計場合。
表2-10列出了狀態機圖中的主要建模元素,狀態機圖的使用細節將在第9章中介紹。
表2-10 狀態機圖中的主要建模元素

在圖書館管理系統中,圖書涉及不同的狀態:新采購的圖書處于“待入庫狀態”,當工作人員完成新書入庫的操作后(如登記圖書信息等),該圖書的狀態就轉為“待借狀態”,圖書借出后即轉為“借出狀態”,歸還后又轉為“待借狀態”,如此循環。圖2-28展示了整個狀態演變過程,而這些狀態同時會影響它的行為,如在“借出狀態”的圖書就不允許再借出了。

圖2-28 借書對象的狀態機圖
UML中的動態圖主要可以分為交互圖和行為圖兩大類,它們都是非常有價值且容易混淆的,此處簡單總結幾種動態圖的使用方法。它們的共同點有以下幾個。
◆ 描述系統中單個或多個事物動態行為特性。
◆ 交互圖(順序圖、通信圖、交互概覽圖、時間圖)側重描述事物間的交互過程。
◆ 行為圖(活動圖、狀態機圖)側重描述事物本身的行為特征。
它們的區別主要體現在每種圖形的側重點不同。
◆ 交互圖(順序圖、通信圖):適合描述單個用例中多個對象之間的協作行為。
◆ 交互概覽圖:用于描述復雜用例多個順序圖間的控制流程。
◆ 時間圖:用于描述時間受控的單個或多個對象間狀態交互。
◆ 狀態機圖:適合描述跨越多個用例的單個對象的行為如何影響該對象的狀態。
◆ 活動圖:適合描述多個對象跨越多個用例時的總貌。
對于那些常用的UML圖形,在后續的章節中,將結合具體的應用場景做更詳細的介紹。
2.5.9 構件圖和部署圖
最后介紹兩種實現圖,用于描述系統編碼和部署時的軟件結構。
構件圖(Component Diagram)將封裝類作為構件,描述在系統實現環境中的軟件構件和它們之間的關系。構件圖中的主要概念包括以下幾個。
◆ 構件、工件、接口(所供接口、所需接口)。
◆ 裝配連接、委托連接、依賴。
構件圖的推薦使用場合包括系統設計、實現、部署等。
表2-11列出了構件圖中的主要建模元素。
表2-11 構件圖中的主要建模元素

在圖書館管理系統中,可以定義5個構件(界面、業務邏輯、借閱、讀者、圖書),這些構件代表實現時的概念(如源代碼、目標文件等)。在這些構件中可實現那些設計時的類,其構件圖如圖2-29所示(由于采用Rose繪制,因此圖中的構件采用UML 1.x語法,構件的圖符有所不同)。

圖2-29 圖書館管理系統構件圖
在構件圖中,所供接口和所需接口的概念是在UML 2中新引入的(UML 1.x只有接口的概念,特指所供接口),圖2-30展示了UML 2中構件的擴展。

圖2-30 UML 2中構件的擴展
部署圖(Deployment Diagram)描述系統所需的硬件環境的物理結構,以及軟件資源在硬件環境中的部署方案。部署圖中的主要概念包括以下幾個。
◆ 節點、工件、部署規范。
◆ 連接、依賴。
部署圖的推薦使用場合:包括系統設計、實施、部署等場合。
表2-12列出了部署圖中的主要建模元素,部署圖的使用細節將在第8章中介紹。
表2-12 部署圖中的主要建模元素

圖2-31是圖書館管理系統的部署模型,從圖中可以看到,該系統共有4類不同的節點。其中讀者客戶端面向普通讀者提供查詢、預約等功能;工作人員前置機面向工作人員用于實現具體的借書、還書業務;后臺數據庫用于運行系統數據庫環境;管理員后臺用于幫助管理員實現各種系統維護功能。

圖2-31 圖書館管理系統部署圖
- Microsoft Exchange Server PowerShell Cookbook(Third Edition)
- Spring Boot開發與測試實戰
- Practical Data Science Cookbook(Second Edition)
- 基于免疫進化的算法及應用研究
- 21天學通C++(第6版)
- C語言程序設計
- Python Data Structures and Algorithms
- Learning Unreal Engine Android Game Development
- Python 3.7從入門到精通(視頻教學版)
- 運維前線:一線運維專家的運維方法、技巧與實踐
- Android系統下Java編程詳解
- Julia High Performance(Second Edition)
- Python GUI Programming Cookbook(Second Edition)
- 實驗編程:PsychoPy從入門到精通
- R語言實戰(第2版)