- 互聯網金融信息系統的設計與實現
- 梁循 楊健 陳華
- 5550字
- 2020-05-22 18:47:02
5.2 UML與系統設計
5.2.1 概述
構建大型軟件系統是系統集成的目標之一。與小型軟件相比,大型軟件系統往往非常復雜,已遠遠超出單個開發人員所能控制的程度。20世紀60年代出現的軟件危機提醒了人們,大型軟件系統的開發周期漫長、投入巨大、生產效率低,質量難以保證。當時的幾個大型軟件項目(如IBM的OS/360)一再延期。大型軟件系統與小型軟件相比,就好像航空母艦與獨木舟,僅僅知道一些細節問題,如怎樣擰緊螺母,鋼梁之間如何鉚接,怎樣焊接鋼板形成船體等,是不可能造出航空母艦的。大型軟件系統的構建需要統一的標準的工程方法。
大型軟件系統的構建可分為分析階段、設計階段和實現階段等三個階段。在構建一個軟件系統時,首先要分析軟件系統的目標:軟件系統將由誰來使用?提供什么樣的功能?怎樣提供這些功能?在此基礎上形成系統分析報告。依據系統分析報告,考慮生產商的技術和開發環境,形成詳細的系統設計報告。開發人員在系統設計報告的基礎上,生成詳細設計報告,并依此編碼、調試、測試并發行軟件系統。大型軟件系統的構建很少是一帆風順的。由于軟件開發固有的復雜性,生產商往往會在上述的三個階段里來回反復。軟件系統從分析到實現,不是一條平坦的道路。
UML(unified modeling language)是一種對軟件系統進行可視化描述、建造和文檔編制的統一建模語言。UML吸取了眾多軟件分析和設計方法的精華。具體來說,UML在軟件系統構建中有以下作用:
1.可視化描述軟件系統
描述軟件系統的用戶需求說明、軟件功能的說明、軟件運行原理的說明、軟件內部結構和對外接口的說明、軟件實現方式的說明等。UML通常會用圖示的方式來描述這些說明。
2.協助溝通和交流
大型軟件系統的構建涉及多個開發人員,開發人員之間存在著大量的交流和溝通,以確定軟件系統的原理、結構和其中的復雜關系。僅憑純文字能力,難以準確有效地表達這些內容。UML通過模型,把這些內容以一種圖形化的方式表達出來。軟件系統的所有開發人員通過這種標準的圖示語言,了解和表達需要交流的內容。
3.建立軟件文檔
一個軟件系統,不只是包括可執行代碼,還應該包括在開發活動中產生的用于控制、評測與交流的各種中間產物。如需求分析報告、軟件體系結構、設計報告、源代碼、項目計劃、測試計劃、原型產品、發行版本等。包含這些中間產物,軟件系統才能稱得上完整。在UML中,存在著標準的描述手段來表達這些內容。
我們下面對UML做一簡要介紹,還介紹一些常用的UML工具。另外,UML是一種基于面向對象的建模語言,讀者如果熟悉面向對象技術,理解和掌握UML會更加容易。
UML語言主要包括兩個部分:
(1)UML基本圖素。UML基本圖素是構成模型圖的最基本的圖形元素,不可再分。按照功能可以分為結構模型圖素、行為模型圖素和其他模型圖素三類:結構模型圖素描述系統的靜態結構,包括類、對象、接口、協作、用例、組件、節點和關系;行為模型圖素描述系統的動態行為,包括狀態機和消息;其他模型圖素包括包和公用機制(如:規范、修飾、擴充等)。
(2)UML模型圖。UML模型圖由多個基本圖素有機組織而成,描述系統的一個方面或特定部分。共有兩大類九種圖(見圖5-1):一類是靜態圖,包括類圖、對象圖、組件圖和部署圖,用于系統邏輯結構建模(類圖、對象圖)和物理結構建模(組件圖、部署圖);另一類是動態圖,包括用例圖、序列圖、協作圖、狀態圖和活動圖,用于系統行為建模。

圖5-1 UML的可視化建模
UML從不同的側面觀察軟件模型,可將軟件模型分解成為五個視圖:用例視圖(use case view)、設計視圖(design view)、進程視圖(process view)、實現視圖(implementation view)和分布視圖(deployment view),如圖5-2所示,設計視圖和進程視圖又可統稱為邏輯視圖。

圖5-2 軟件模型的五個視圖
(1)用例視圖:支持軟件系統的需求分析,定義系統邊界。包括交互圖(interactive diagram)、狀態圖(state diagram)和活動圖(activity diagram);
(2)邏輯視圖:定義系統的實現邏輯。包括類圖(class diagram)和對象圖(object diagram)、交互圖、狀態圖和活動圖;
(3)實現視圖:定義邏輯機構的物理實現。包括部件圖(component diagram)、交互圖、狀態圖和活動圖;
(4)分布視圖:描述軟件產品在計算機軟硬件系統和網絡上的安裝、分發和分布情況。包括分布圖(deployment diagram)、交互圖、狀態圖和活動圖。
下面我們從一個軟件系統的需求分析、結構建模、行為建模和架構設計四個階段來具體介紹UML語言的應用。
5.2.2 需求分析
構建軟件系統的第一個階段是對系統進行需求分析,需求分析就是根據用戶對系統功能的期望,提取出對系統功能的描述。需求分析有兩個方面的內容:
(1)分析軟件系統與外界的聯系;
(2)確定軟件系統與外界聯系時包含的動態行為及其相互關系。
用例視圖協助系統分析人員明確軟件系統所具有的功能,以及有哪些用戶使用這些功能,通過怎樣的方式使用。UML用例視圖包括三個基本圖素:系統作用者(actor)、用例(use case)和關聯(association)。
系統作用者代表位于系統之外并和系統交互的人或物。軟件系統在運行時,必然要和外界發生交互。UML使用系統作用者來描述軟件系統在和外界發生交互時涉及的具體對象。用例代表軟件系統為相應系統作用者引發的一個事件而執行的一系列的處理,即軟件系統的特定功能。系統作用者與用例之間的聯系用關聯表示,關聯代表事物之間的語義連接。

圖5-3 銀行系統的客戶操作
圖5-3是一個對銀行系統的簡單需求分析。系統作用者是客戶,銀行系統為客戶提供了存款和提款兩項功能,用兩個用例來描述。客戶與功能之間的聯系用關聯來表示。
5.2.3 結構建模
從面向對象的觀點來看,軟件系統是由不同的對象組成的,這些對象相互作用,共同實現系統的功能。類是對同一類對象的抽象,類與類之間存在關系。結構建模的目的就是明確這些類以及它們之間的關系,對軟件系統作靜態的描述。
1.類
類(class)描述一類對象的特征和行為。類是真實世界中事物的抽象,這些事物被稱為對象,對象是類的實例。同一個類的對象具有相同的屬性,提供相同的操作,并具有相同的語義。在UML中,用一個分為三個格的長方形表示類。頂端格內為類的名字;下面兩格分別為類的屬性和操作。
圖5-4中,“賬戶”為類的名稱;賬戶類的屬性有“余額”和“幣種”;賬戶類的操作有“存入()”、“取出()”和“銷戶()”。

圖5-4 類
2.關系
類之間的關系主要有:關聯(association)、泛化(generalization)和依賴(dependency)。
(1)關聯。關聯表示類之間的語義聯系。關聯主要描述系統中的類在結構方面的聯系,指明某個對象和另外一個對象之間存在聯系。UML使用連接對象的直線來表示關聯。圖5-5表示一個一個關聯,描述了銀行系統中客戶和賬戶之間的關系。
關聯可以添加名稱,如圖5-5中的“擁有”。如有必要,可以指明關聯兩端的類在該關聯中的角色,圖5-5的“擁有者”就表明了客戶類在這一關聯中所扮演的角色。一個類的對象和另一個類的對象關聯時,可能出現一次,也可能出現多次。角色的重復度(multiplicity)指的就是這種角色的出現的次數。角色重復度在UML中用一個表達式來描述。如圖5-5中的“1..*”表示在這個關聯中,一個賬戶可能被一個或多個客戶所擁有;“*”表示一個客戶可能有一個或多個賬戶,也可能沒有賬戶。

圖5-5 關聯關系
聚合(aggregation)是一種特殊形式的關聯關系,表明兩個類之間是整體和部分的關系。表明一個類在結構上包含另一個類,兩者之間是緊密的結構關系。圖5-6描述了客戶和通訊地址之間的聚合關系,表明了通訊地址是客戶信息的一個組成部分,其中菱形箭頭表示聚合關系。聚合關系是有向的,通訊地址是客戶的一部分,反過來并不成立。

圖5-6 聚合關系
(2)泛化。泛化關系是指一般事物和特殊事物之間的分類關系。從面向對象的角度來說,類之間的泛化關系就是父類和子類之間的繼承關系。父類是對子類共有屬性和操作的抽象,子類是對父類的擴充。父類是一般的,子類是特殊的。
UML中使用空心三角箭頭表示泛化關系。如圖5-7所示,個人賬戶和企業賬戶都屬于銀行賬戶,都有余額等共同的屬性,但個人賬戶和企業賬戶有個別的屬性。如只有個人賬戶才有“身份證號”這個屬性。
(3)依賴。在軟件系統中,類之間存在使用的關系。不妨把提供服務的類稱作服務類,使用服務的類稱作客戶類,則依賴關系表明客戶類依賴于服務類所提供的服務。在面向對象設計中,這種服務可能是提供屬性或函數調用,客戶類直接修改服務類的屬性,或者是調用服務類的操作函數。
圖5-8中,賬戶類是客戶類,匯率計算器類是服務類。賬戶類的取出和存入操作需要使用匯率換算。兩者之間存在依賴關系。

圖5-7 泛化關系

圖5-8 依賴關系
3.類圖
類加上類之間的關系就構成了類圖。類圖是軟件邏輯視圖的一部分,描述了軟件系統的靜態設計。類圖使用圖形化的方式表達軟件系統的詞匯(類)和結構(關系),是UML建模的核心。類圖包含類、關系和協同。協同是指軟件系統中類的一些靜態設計,這些靜態設計反映了軟件系統內部對象之間動態交互的要求。圖5-9是一個銀行系統的部分類圖。

圖5-9 類圖
系統設計人員設計類圖,通常涉及以下內容:
(1)提取軟件系統的詞匯,即類。① 考察軟件系統的系統作用者、區分軟件系統的外部對象和內部對象,發現軟件系統內部的對象;② 考察軟件系統內部為了完成特定功能而進行的動態交互,這種交互的參與者也是對象。在此基礎上,系統設計人員總結這些對象的特征,明確構建軟件系統的類。
(2)定義協同,為軟件系統的動態交互提供靜態結構方面的支持。協同的靜態結構是通過類圖表達的。在表達協同的類圖上,強調的不僅僅是類的職責、結構和服務,還需要強調類之間的關系,強調類與類之間如何協同工作,完成系統功能。
(3)為軟件系統的持久對象和數據結構建模,一般是數據庫建模。軟件系統內部的一些對象是需要長期保存的,這些對象稱為持久(persistent)對象。常用的方法是把這些對象存放在數據庫中。類圖被用來描述這些持久類和它們之間的靜態關系。
5.2.4 行為建模
軟件系統由多個類組成,這些類相互作用,共同實現系統的功能。結構建模描述了軟件系統的靜態結構,行為建模則描述系統的動態行為。
1.交互圖
交互(interaction)圖是用來描述對象之間或對象與系統作用者之間的動態協作關系以及協作過程中行為次序的圖形文檔。它通常描述一個用例的行為,顯示該用例中所涉及的對象和這些對象之間的消息傳遞情況。
序列(sequence)圖是交互圖的一種,它強調的是消息發送時間的先后順序。在序列圖上,參加交互的各對象在序列圖的頂端沿水平方向排列;對象之間傳遞的消息用箭頭表示,沿垂直方向排列;靠近序列圖頂端的消息先發送,從而明確了消息發送的先后順序。
圖5-10中的序列圖描述了客戶存款時,銀行系統中的對象協作情況。

圖5-10 序列圖
2.狀態圖
狀態(state)圖用來描述一個特定對象的所有可能狀態和引起狀態轉移的事件。一個狀態圖包括一系列的狀態以及狀態之間的轉移。
(1)狀態。所有對象都具有狀態,狀態是對象執行了一系列活動的結果。當某個事件發生后,對象的狀態將發生變化。狀態圖中定義的狀態有初態、終態和中間狀態。其中,初態是狀態圖的起始點,而終態則是狀態圖的終點。一個狀態圖只能有一個初態,而終態可以有多個。
(2)轉移。對象狀態的改變稱為轉移,在狀態圖中使用帶箭頭的連線表示。狀態的變遷通常是由事件觸發的,此時應在轉移上標出觸發轉移的事件。
圖5-11是銀行個人賬戶對象的狀態圖。

圖5-11 狀態圖
5.2.5 架構設計
結構建模和行為建模描述了系統的邏輯特征,是抽象的。而一個真實的軟件系統是物理的,由執行文件、數據文件和數據庫等部分組合而成。大型的軟件系統一般基于網絡,這又涉及到軟件系統在網絡節點上的分布。
1.組件圖
組件(component)圖顯示一組組件以及它們之間的相互關系,包括編譯、鏈接或執行時部件之間的關系。組件是軟件系統中的一個物理部分。
組件一般來說就是一個文件,可以是部署(deployment)組件如可執行文件,也可以是工作產品(work product)組件如源代碼文件,工作產品組件用來產生部署組件。圖5-12(a)表示了組件之間的編譯關系,個人賬戶類文件由個人賬戶Java源程序文件和接口源程序文件編譯而成。圖5-12(b)表示了組件運行時的依賴關系,服務類文件在運行時需要使用通信類文件和賬戶類文件。

圖5-12 組件圖
2.部署圖
部署圖描述系統硬件的物理拓撲結構以及在此結構上執行的軟件。部署圖可以顯示計算節點的拓撲結構和通信路徑、節點上運行的軟件組件以及軟件組件所包含的邏輯單元(如對象、類)的等。設計人員使用部署圖來描述分布式系統。
部署圖包括兩個基本圖素:結點和連接。結點(node)代表一個物理設備以及運行于其上的軟件系統,如一臺主機,一臺打印機等。連接(connection)表示兩個硬件之間的關聯,一般指通訊路徑。圖5-13為一個銀行系統的部署圖。

圖5-13 部署圖
5.2.6 UML工具
1.Rose
Rational Rose(簡稱Rose)是世界知名的優秀UML建模工具,使用比較廣泛。Rose支持UML的多個模型圖,包括用例圖、順序圖、協作圖、類圖、狀態圖、活動圖和部署圖。支持對這些模型圖的建立、瀏覽、修改和刪除,還支持正/反向建模。
Rose的特點:
(1)可以與Rational公司的其他相關工具進行集成。如需求管理工具、配置管理工具、變更請求管理工具、測試工具、文檔生成工具等。以支持軟件開發過程的各個階段。
(2)強大的第三方支持。由于Rose工具具有較高的市場占有率,所以很多第三方開發商提供支持Rose的產品。
(3)支持團隊開發。大型軟件往往是很多人合作開發完成的,Rose提供了支持團隊開發的機制。
2.Together
Together是用Java語言開發的UML工具,功能強大。Together分為入門級Together Solo和專業級的Together Control Center。Together支持UML中所有類型的圖,支持HTML生成、代碼調試器、重構(refactoring)、Java的雙向工程、EJB的開發和部署、GoF中的設計模式等。
Together原來是Together Soft公司的主力產品,后來被Borland公司收購。目前Borland公司已分別開發出與JBuilder、Web Sphere Studio、SAP等軟件集成的不同版本的Together產品??梢詮木W址http://www.borland.com/cn/products/together/獲得更多有關Together產品的信息。
3.Visio
微軟公司的Visio是一個功能強大的繪圖工具軟件。使用Visio可以繪制各種科學和商務應用方面的圖,如電路圖、流程圖等。Visio也支持UML規范說明中定義的模型圖。
Visio作為微軟辦公套件office的一部分,使用簡單,比較容易上手。但是提供的功能比較少,適合初學者使用。更多的信息可以從網址http://www.microsoft.com/china/office/visio/獲得。