摘 要: 為了研究較好的軟件建模方法,運用UML中的5種圖對面向對象建模的方法進行討論及技術研究,提出如下建模過程:首先是系統需求;隨后分析問題領域,建立系統的用例圖;接著,建立系統的靜態結構模型,并將系統的功能需求分解到各個對象類,以確定各個對象類的責任;然后,建立系統的動態行為模型;最后,給出物理模型。通過實例,對UML的面向對象建模機制做了系統概述,表明UML是一種優秀的建模語言,使用UML有助于開發者對整個系統有清晰的認識,從而建立各種系統模型,為后期編碼工作做好充分的前期準備。關鍵詞:UML; 面向對象; 圖;靜態模型; 動態模型
中圖分類號:TN911-34; TP311 文獻標識碼:A
文章編號:1004-373X(2010)18-0047-04
Research on Method of Object-oriented Modeling Based on UML
YANG Shi-xin
(Computer Teaching and Research Section, Department of Public Couse, Xi’an Medical University, Xi’an 710021, China)
Abstract: In order to study a better method of software modeling, the five diagrams in UML is adopted to achieve the object-oriented modeling methods. The following modeling steps are proposed: analyze the areas of the problem, establish the use case diagram of the system; set up the static structure model of the system, decompose the system's functional requirements to each object class, determine the responsibility of each object class; and then establish the dynamic behavior model of decency and physical model. The object-oriented modeling mechanism of UML is summerized systematically through examples. It shows that UML is an excellent modeling language. UML will help the developers to have a clear understanding to the whole system, thus establish the system model and make the prophase preparation for later coding.Keywords: UML; object-oriented; state diagram; static model; dynamic model
0 引 言
面向對象方法已經成為軟件開發的主要方法[1],面向對象的分析方法以對象作為分析問題,解決問題的核心,并對問題空間進行直接映射,使計算機實現的對象與真實世界具有一一對應關系,符合人類認識規律,有效地解決了需求分析模型和軟件設計模型的不匹配現象。由于采用了數據抽象和封裝技術,面向對象的程序設計降低了各模塊間的耦合,可實現較高的代碼利用率。基于UML建模技術可以進行面向對象[2]的分析、設計、編程、測試以及面向對象的軟件過程,它以統一建模語言作為分析工具,利用面向對象的思想對問題域進行建模。本文針對建模的方法和技術進行了討論,并結合實例加以說明。
1 UML概述
統一建模語言(unified modeling language,UML)是一種發展演變而來的通用建模語言,運用廣泛,已得到很多工具的支持,并被用作行業標準,用于指定、顯現、構建和記錄系統密集過程的工件。
UML可用于不同類型的系統(軟件和非軟件)、域(業務與軟件)和方法(或過程)。它支持并推廣(但并不要求或強制)一種過程,這種過程的特點是用例驅動的、以體系結構為中心的、面向對象的、基于組建的、迭代的、遞增的和抗風險的。但UML并未指示任何特定的系統開發方法,非常靈活,可進行定制,以適應所有情況。
2 面向對象原理
2.1 基本概念
概括地說,面向對象就是把問題抽象為對象,設置屬性(數據),指定事件或處理方式(代碼)以達到目的,并強調從問題域的概念到軟件程序和界面的直接映射[3]。
(1) 對象:事物的抽象(即模型)對象可以被定義為一個封裝了狀態和行為的實體,或者說是數據結構(或屬性)和操作。所有對象都是類的實例[4]。
(2) 類:是具有相同特點的對象的集合,或者說,類是可用于產生對象的模版。
(3) 消息:消息是對象通信的方式,也是獲得功能的方式。對象收到發給它的消息后,或者執行一個內部操作(有時成為方法或過程),或者再去調用其他對象的操作。
2.2 基本特征
(1) 封裝:把數據結構同操作數據的過程(函數)銜接在一起,構成具有類的類型對象。對象具有明確的功能,并有接口與其他對象相互調用,而對象的內部代碼和數據是受保護的,別的對象不能訪問。這樣,每一個對象就像一個部件一樣,在任何可調用的程序中起作用,而其功能不變。
(2) 繼承:是面向對象編程的一個重要機制,編程者可以在原有的類基礎上建立新類,實現代碼的重復利用,提高開發效率。類可以以一種層次結構來安排。在這個層次結構中,子類可以從比它高的超類中繼承得到狀態和方法。
(3) 多態性:描述的是如下現象。如果幾個子類都重新定義了超類的某個函數(都用相同的函數名),當消息被發送到一個子類對象時,在執行時該消息會由于子類確定的不同而被解釋為不同的操作。一個給定的類可以從不止一個超類中繼承,稱之為多繼承。如果采用動態聯編,繼承就導致了多態性。多態性具有靈活、抽象、行為共享、代碼共享等優勢。
3 運用UML進行系統建模
UML是一種繪制軟件藍圖的標準建模語言[5],其目的是對面向對象的系統進行可視化、詳述、構造和文檔化。UML可運用于軟件開發過程各個階段的建模活動,尤其是分析與設計。將UML運用于面向對象的軟件系統建模時,為了體現系統的靜態和動態模型以及功能模型,可以運用UML的5種圖[6]:類圖、用例圖、協作圖、順序圖和狀態圖,這五個圖是相互聯系的,都是系統不同側重點上的一個投影[7],但在實際情況下可能只需三、四種圖即可精確地定義需求。
(1) 類圖:類圖的目的是識別組成新系統的對象并進行分類。在類圖中,還要識別每個需要記錄對象的屬性或特征和操作,同時需要體現類(或對象)之間的關系,因此類圖描述了系統的靜態模型。通常,可以采用一個綜合圖來顯示整個系統所有的類和關系。
(2) 用例圖:用例圖使用參與者、用例及其關系描述實體功能。用例圖的目的是識別新系統的使用或用例,即識別如何使用系統。用例圖本質上是事件表的延伸,它描述了系統的功能模型。
(3) 順序圖和協作圖:順序圖和協作圖都稱交互圖[8],用于參與元素間捕獲協作和交互模式,它們都顯示了對象之間的交互信息,但各自的側重點有所不同。順序圖(從行為或動態模型視圖)通過使用類(和消息)或對象(和激勵)交互的臨時焦點描述系統的動態行為,它以圖形化的方式強調信息間的順序。順序圖用來描述單個協作中一個或多個交互,包含一般和實例形式。其中,一般形式交互描述2個或多個可能的交互順序;實例形式交互也稱單獨行為順序或特定用例方案,描述一個與一般形式交互一致的實際交互順序。一般形式和實例形式順序圖用來描述類角色(或符合類角色的對象)、消息(或符合消息的激勵)和附加類(或對象)之間的交互。其中,一般形式順序圖描述兩個或多個可能的交互順序;實例形式順序圖描述一個實際的交互順序。協作圖(來源于行為或動態模型視圖)通過使用類、關聯和消息(或對象、鏈接和激勵)的協作(和交互)空間和臨時焦點來描述系統的動態行為。協作圖的目的是識別協作完成給定業務功能的對象,一個單一的協作圖用以識別對象,并展示這些對象的相互作用及對象之間發送用于執行功能的消息。協作圖用來描述與零個或多個交互的協作,協作包含說明級別和實例級別。說明級別協作用來描述類角色、關聯角色和消息;實例級別協作用來描述對象、鏈接、激勵(符合類角色)、關聯角色及說明級別協作的消息。說明級別協作圖描述類角色、關聯角色、消息和附加類(及關聯)之間的協作;實例級別協作圖用來描述對象(符合類角色)、鏈接(符合關聯角色)、激勵(符合消息)和附加對象(及鏈接)之間的協作。
(4) 狀態圖:狀態圖通過狀態和轉換,描述實體的動態行為,以及組成實體的元素的狀態條件、響應和動作(由事件引發)[9]。狀態圖也稱狀態表圖或狀態機器。實體是一個分類器,如系統、子系統或類[10]。狀態圖的目的是顯示對象在生命期和轉換期的情況。每一個對象類都含有一個狀態圖表,它描述了每個對象的狀態和行為。狀態圖、協作圖和順序圖三者一起共同描述了系統的動態模型。
在系統的靜態和動態模型以及功能模型中,功能(用例)模型是系統的核心,它驅動著其他兩個模型的開發。因此,可以采用如下建模過程:首先是系統需求;隨后,分析問題領域,建立系統的用例圖;接著,建立系統的靜態結構模型,并將系統的功能需求分解到各個對象類,確定各個對象類的責任;然后,建立系統的動態行為模型;最后,給出物理模型。
下面以一銀行系統的面相對象分析為例,介紹運用UML進行面向對象的分析過程。
4 UML建模的應用實例
為了對在軟件系統開發中應用UML有一個直觀清晰的了解,考慮了一個非常簡單、理想化的軟件開發周期,包括3個階段:需求、分析和設計、實現。通過以一個銀行系統為例來描述UML的建模過程。
4.1 系統需求
銀行是與生活緊密相關的一個機構,銀行提供了存款、取款、轉賬等業務。在銀行設立賬戶的人或機構被稱為銀行的客戶,一個客戶可以在銀行開多個賬戶。客戶可以存錢到賬戶中,也可以從賬戶中取錢,還可以將存款從一個賬戶轉到另一個賬戶;客戶可以隨時查詢賬戶的情況,并查詢以前所進行的存款、取款等交易記錄;客戶還有權利要求關閉賬戶。
4.2 分析問題領域
采用用例驅動的分析方法分析需求的主要任務是識別參與者和用例,并建立用例模型。通過分析銀行系統的功能需求,可以識別出3個參與者:
(1) Clerk(銀行職員)。可以創建、刪除賬戶,可以修改賬戶信息。
(2) Customer Actor(客戶)。可以存錢、取錢,并在不同的賬戶之間轉賬。
(3) Bank Actor(銀行)。客戶可在Bank Actor中設立或關閉賬戶。
通過對需求的進一步分析,可以確定系統中有如下用例:Login(登錄),Deposit(存款),Withdraw fund(取款),Maintain Account(管理賬戶),Transfer fund within a bank(在銀行內轉賬),Transfer fund between banks(在不同的銀行之間轉賬)和Transfer fund(轉賬)。系統的用例圖如圖1所示。
圖1 系統的用例圖
4.3 靜態結構模型
進一步分析系統需求,可以識別出系統中類及類之間的關系。系統對象的識別可以通過尋找系統域描述和需求描述中的名詞來進行。從前述的系統需求描述中可以找到的名詞有:銀行、賬戶、客戶和資金,這些都是侯選對象,判斷是否為這些侯選對象創建類的方法是:是否有與該對象相關的身份和行為,如果有,那么候選對象應該是一個存在于模型中的對象,就應該為之創建類。
經分析可以看出,系統對象類有:Bank,Actor,Customer,Transaction,Deposit,Withdraw和Transfer。
通過對系統的不斷分析和細化,可識別出用戶界面類有:Bank GUI(系統的主界面),Query Dialog(用來根據賬戶的賬號查找賬戶的對話框),DW Dialog(用來存款或取款的對話框),Account Dialog(用來填寫或顯示賬戶信息的對話框),Transfer Dialog(用來填寫轉賬信息的對話框)和Login Dialog(用來輸入用戶名和密碼的對話框)。圖2表示系統的類圖。
圖2 系統類圖
4.4 動態行為模型
為了理解系統的動態行為,還應該創建描述系統動態方面的圖:順序圖、協作圖、狀態圖和活動圖。限于篇幅,用順序圖來描述為完成“存款”功能發生在系統對象之間的信息交換。圖3描述了“存款”的順序圖。
圖3 順序圖
4.5 物理模型
系統配置如圖4所示,有4個節點:Bank Server(銀行系統服務器),DB Server(數據庫服務器),Internet Client(內部客戶端)和External Client(外部客戶端)。
圖4 系統的配置圖
5 結 語
UML是在多種面向對象分析/面向對象設計方法基礎上形成的建模語言,它的目標是以面向對象圖的方式來描述任何類型的系統,具有廣泛的應用領域,可以對任何具有靜態結構和動態行為的系統進行建模,而且適用于系統開發的不同階段,從需求規格描述直至系統完成后的測試和維護。實踐表明,UML是一種優秀的建模語言,使用UML有助于開發者對整個系統有清晰的認識,從而建立各種系統模型,為后期編碼工作做好充分的前期準備。
參考文獻
[1]SINAN Si Alhir.UML高級應用[M].韓宏志,譯.北京:清華大學出版社,2003.
[2]LARMAN Craig.UML和模式應用:面向對象分析與設計導論[M].姚淑珍,李虎,譯.北京:機械工業出版社,2002.
[3]劉宇翔.面向對象程序設計淺析[J].山西廣播電視大學學報,2005,10(2):23-24.
[4]Grady Booch.UML用戶指南[M].邵維忠,譯.北京:機械工業出版社,2000.
[5]冀振燕.UML系統分析設計與應用案例[M].北京:人民郵電出版社,2003.
[6]馬浩海,邵維忠,麻志毅.UML 2.0評述[J].計算機科學,2004,31(7):11-14.
[7]黃賢英.UML建模過程及在需求分析中的應用[J].計算機工程,2002,27(11):184-186.
[8]王學龍,陳平.一種UML序列圖到層次狀態圖合成方法[J].計算機應用,2004,24(Z1):311-313.
[9]李云全,劉淑芬,申自浩.基于UML 2.0的系統建模[J].河南理工大學學報,2007,16(5):112-114.
[10]申凱,王娟.統一建模語言UML的研究[J].軟件導刊,2007,32(5):36-38.
[11]白桂梅.結構化與面向對象分析方法之間關系的研究[J].現代電子技術,2009,32(20):137-139.
[12]徐國慶,張彥鐸,王海暉,等.基于UML的工作流與正向工程實現研究[J].現代電子技術,2007,30(17):89-90,98.