UML

UML

統一建模語言
統一建模語言(UML是 Unified Modeling Language的縮寫)是用來對軟件密集系統進行可視化建模的一種語言。UML為面向對象開發系統的産品進行說明、可視化、和編制文檔的一種标準語言。[1]
  • 中文名:統一建模語言
  • 外文名:UML
  • 适用領域:
  • 所屬學科:
  • 作品别名:标準建模語言
  • 創作年代:1997年
  • 作用:支持模型化和軟件開發
  • 産源:OOA&D,OOAD

簡要介紹

回顧20世紀晚期--準确地說是1997年,OMG組織(Object Management Group對象管理組織)發布了統一建模語言(Unified Modeling Language,UML)。UML的目标之一就是為開發團隊提供标準通用的設計語言來開發和構建計算機應用。UML提出了一套IT專業人員期待多年的統一的标準建模符号。通過使用UML,這些人員能夠閱讀和交流系統架構和設計規劃--就像建築工人多年來所使用的建築設計圖一樣。

到了21世紀--準确地說是2003年,UML已經獲得了業界的認同。在所見過的專業人員的簡曆中,75%都聲稱具備UML的知識。然而,在同絕大多數求職人員面談之後,可以明顯地看出他們并不真正了解UML。通常地,他們将UML用作一個術語,或對UML一知半解。大家對UML缺乏理解的這種狀況,促進我撰寫這篇關于UML1.4的快速入門文章。當閱讀完本文時,您還不具備足夠的知識可以在簡曆上聲稱自己掌握了UML,但是您已具有了進一步鑽研該語言的良好起點。

背景知識

正如前面曾提到過的,UML的本意是要成為一種标準的統一語言,使得IT專業人員能夠進行計算機應用程序的建模。UML的主要創始人是Jim Rumbaugh、Ivar Jacobson和Grady Booch,他們最初都有自己的建模方法(OMT、OOSE和Booch),彼此之間存在着競争。最終,他們聯合起來創造了一種開放的标準。(聽起來是不是很熟悉?這個現象類似J2EE、SOAP和Linux的誕生。)UML成為"标準"建模語言的原因之一在于,它與程序設計語言無關。(IBM Rational的UML建模工具被廣泛應用于J2EE和.NET開發。)而且,UML符号集隻是一種語言而不是一種方法學。這點很重要,因為語言與方法學不同,它可以在不做任何更改的情況下很容易地适應任何公司的業務運作方式。

既然UML不是一種方法學,它就不需要任何正式的工作産品(即IBM Rational Unified Process?術語中所定義的"工件")。而且它還提供了多種類型的模型描述圖(diagram),當在某種給定的方法學中使用這些圖時,它使得開發中的應用程序的更易理解。UML的内涵遠不隻是這些模型描述圖,但是對于入門來說,這些圖對這門語言及其用法背後的基本原理提供了很好的介紹。通過把标準的UML圖放進您的工作産品中,精通UML的人員就更加容易加入您的項目并迅速進入角色。最常用的UML圖包括:用例圖、類圖、序列圖、狀态圖、活動圖、組件圖和部署圖。

用例圖

用例圖描述了系統提供的一個功能單元。用例圖的主要目的是幫助開發團隊以一種可視化的方式理解系統的功能需求,包括基于基本流程的"角色"(actors,也就是與系統交互的其他實體)關系,以及系統内用例之間的關系。用例圖一般表示出用例的組織關系--要麼是整個系統的全部用例,要麼是完成具有功能(例如,所有安全管理相關的用例)的一組用例。要在用例圖上顯示某個用例,可繪制一個橢圓,然後将用例的名稱放在橢圓的中心或橢圓下面的中間位置。要在用例圖上繪制一個角色(表示一個系統用戶),可繪制一個人形符号。

類圖

類圖表示不同的實體(人、事物和數據)如何彼此相關;換句話說,它顯示了系統的靜态結構。類圖可用于表示邏輯類,邏輯類通常就是業務人員所談及的事物種類--搖滾樂隊、CD、廣播劇;或者貸款、住房抵押、汽車信貸以及利率。類圖還可用于表示實現類,實現類就是程序員處理的實體。實現類圖或許會與邏輯類圖顯示一些相同的類。然而,實現類圖不會使用相同的屬性來描述,因為它很可能具有對諸如Vector和HashMap這種事物的引用。

類圖中的示例類對象

根據經驗,幾乎每個開發人員都知道這個類圖是什麼,但是我發現大多數程序員都不能正确地描述類的關系。對于像圖3這樣的類圖,您應該使用帶有頂點指向父類的箭頭的線段來繪制繼承關系1,并且箭頭應該是一個完全的三角形。如果兩個類都彼此知道對方,則應該使用實線來表示關聯關系;如果隻有其中一個類知道該關聯關系,則使用開箭頭表示。

序列圖

序列圖顯示具體用例(或者是用例的一部分)的詳細流程。它幾乎是自描述的,并且顯示了流程中不同對象之間的調用關系,同時還可以很詳細地顯示對不同對象的不同調用。

序列圖有兩個維度:垂直維度以發生的時間順序顯示消息/調用的序列;水平維度顯示消息被發送到的對象實例。

序列圖的繪制非常簡單。橫跨圖的頂部,每個框(參見圖4)表示每個類的實例(對象)。在框中,類實例名稱和類名稱之間用空格/冒号/空格來分隔,例如,myReportGenerator:ReportGenerator。如果某個類實例向另一個類實例發送一條消息,則繪制一條具有指向接收類實例的開箭頭的連線,并把消息/方法的名稱放在連線上面。對于某些特别重要的消息,您可以繪制一條具有指向發起類實例的開箭頭的虛線,将返回值标注在虛線上。就我而言,我總喜歡繪制出包括返回值的虛線,這些額外的信息可以使得序列圖更易于閱讀。

狀态圖

狀态圖表示某個類所處的不同狀态和該類的狀态轉換信息。有人可能會争論說每個類都有狀态,但不是每個類都應該有一個狀态圖。隻對"感興趣的"狀态的類(也就是說,在系統活動期間具有三個或更多潛在狀态的類)才進行狀态圖描述。

活動圖

活動圖表示在處理某個活動時,兩個或者更多類對象之間的過程控制流。活動圖可用于在業務單元的級别上對更高級别的業務過程進行建模,或者對低級别的内部類操作進行建模。根據我的經驗,活動圖最适合用于對較高級别的過程建模,比如公司當前在如何運作業務,或者業務如何運作等。這是因為與序列圖相比,活動圖在表示上"不夠技術性的",但有業務頭腦的人們往往能夠更快速地理解它們。

活動圖的符号集與狀态圖中使用的符号集類似。像狀态圖一樣,活動圖也從一個連接到初始活動的實心圓開始。活動是通過一個圓角矩形(活動的名稱包含在其内)來表示的。活動可以通過轉換線段連接到其他活動,或者連接到判斷點,這些判斷點連接到由判斷點的條件所保護的不同活動。結束過程的活動連接到一個終止點(就像在狀态圖中一樣)。

組件圖

組件圖提供系統的物理視圖。它的用途是顯示系統中的軟件對其他軟件組件(例如,庫函數)的依賴關系。組件圖可以在一個非常高的層次上顯示,從而僅顯示粗粒度的組件,也可以在組件包層次2上顯示。

組件圖的建模最适合通過例子來描述。圖7顯示了4個組件:Reporting Tool、Billboard Service、Servlet 2.2 API和JDBC API。從Reporting Tool組件指向Billboard Service、Servlet 2.2 API和JDBC API組件的帶箭頭的線段,表示Reporting Tool依賴于那三個組件。

部署圖

部署圖表示該軟件系統如何部署到硬件環境中。它的用途是顯示該系統不同的組件将在何處物理地運行,以及它們将如何彼此通信。因為部署圖是對物理運行情況進行建模,系統的生産人員就可以很好地利用這種圖。

部署圖中的符号包括組件圖中所使用的符号元素,另外還增加了幾個符号,包括節點的概念。一個節點可以代表一台物理機器,或代表一個虛拟機器節點(例如,一個大型機節點)。要對節點進行建模,隻需繪制一個三維立方體,節點的名稱位于立方體的頂部。所使用的命名約定與序列圖中相同:[實例名稱]:[實例類型](例如,"w3reporting.myco.com:Application Server")。

語言出現

公認的面向對象建模語言出現于70年代中期。從1989年到1994年,其數量從不到十種增加到了五十多種。在衆多的建模語言中,語言的創造者努力推崇自己的産品,并在實踐中不斷完善。但是,OO方法的用戶并不了解不同建模語言的優缺點及相互之間的差異,因而很難根據應用特點選擇合适的建模語言,于是爆發了一場“方法大戰”。90年代中,一批新方法出現了,其中最引人注目的是Booch 1993、OOSE和OMT-2等。

Booch是面向對象方法最早的倡導者之一,他提出了面向對象軟件工程的概念。1991年,他将以前面向Ada的工作擴展到整個面向對象設計領域。Booch1993比較适合于系統的設計和構造。

Rumbaugh等人提出了面向對象的建模技術(OMT)方法,采用了面向對象的概念,并引入各種獨立于語言的表示符。這種方法用對象模型、動态模型、功能模型和用例模型,共同完成對整個系統的建模,所定義的概念和符号可用于軟件開發的分析、設計和實現的全過程,軟件開發人員不必在開發過程的不同階段進行概念和符号的轉換。OMT-2特别适用于分析和描述以數據為中心的信息系統。

語言内容

标準建模語言UML的重要内容可以由下列五類圖(共9種圖形)來定義:

第一類是用例圖

從用戶角度描述系統功能,并指出各功能的操作者。

第二類是靜态圖(Static diagram)

包括類圖、對象圖和包圖。其中類圖描述系統中類的靜态結構。不僅定義系統中的類,表示類之間的聯系如關聯、依賴、聚合等,也包括類的内部結構(類的屬性和操作)。類圖描述的是一種靜态關系,在系統的整個生命周期都是有效的。對象圖是類圖的實例,幾乎使用與類圖完全相同的标識。他們的不同點在于對象圖顯示類的多個對象實例,而不是實際的類。一個對象圖是類圖的一個實例。由于對象存在生命周期,因此對象圖隻能在系統某一時間段存在。

包由包或類組成,表示包與包之間的關系。包圖用于描述系統的分層結構。

第三類是行為圖(Behavior diagram)

描述系統的動态模型和組成對象間的交互關系。其中狀态圖描述類的對象所有可能的狀态以及事件發生時狀态的轉移條件。通常,狀态圖是對類圖的補充。在實用上并不需要為所有的類畫狀态圖,僅為那些有多個狀态其行為受外界環境的影響并且發生改變的類畫狀态圖。而活動圖描述滿足用例要求所要進行的活動以及活動間的約束關系,有利于識别并行活動。

第四類是交互圖(Interactive diagram)

描述對象間的交互關系。其中順序圖顯示對象之間的動态合作關系,它強調對象之間消息發送的順序,同時顯示對象之間的交互;合作圖描述對象間的協作關系,合作圖跟順序圖相似,顯示對象間的動态合作關系。除顯示信息交換外,合作圖還顯示對象以及它們之間的關系。如果強調時間和順序,則使用順序圖;如果強調上下級關系,則選擇合作圖。這兩種圖合稱為交互圖。

第五類是實現圖(Implementation diagram)

其中構件圖描述代碼部件的物理結構及各部件之間的依賴關系。一個部件可能是一個資源代碼部件、一個二進制部件或一個可執行部件。它包含邏輯類或實現類的有關信息。部件圖有助于分析和理解部件之間的相互影響程度。

配置圖定義系統中軟硬件的物理體系結構。它可以顯示實際的計算機和設備(用節點表示)以及它們之間的連接關系,也可顯示連接的類型及部件之間的依賴性。在節點内部,放置可執行部件和對象以顯示節點跟可執行軟件單元的對應關系。

從應用的角度看,當采用面向對象技術設計系統時,首先是描述需求;其次根據需求建立系統的靜态模型,以構造系統的結構;第三步是描述系統的行為。其中在第一步與第二步中所建立的模型都是靜态的,包括用例圖、類圖(包含包)、對象圖、組件圖和配置圖等五個圖形,是标準建模語言UML的靜态建模機制。其中第三步中所建立的模型或者可以執行,或者表示執行時的時序狀态或交互關系。它包括狀态圖、活動圖、順序圖和合作圖等四個圖形,是标準建模語言UML的動态建模機制。因此,标準建模語言UML的主要内容也可以歸納為靜态建模機制和動态建模機制兩大類。

主要特點

标準建模語言UML的主要特點可以歸結為三點:

(1)UML統一了Booch、OMT和OOSE等方法中的基本概念。

(2)UML還吸取了面向對象技術領域中其他流派的長處,其中也包括非OO方法的影響。UML符号表示考慮了各種方法的圖形表示,删掉了大量易引起混亂的、多餘的和極少使用的符号,也添加了一些新符号。因此,在UML中彙入了面向對象領域中很多人的思想。這些思想并不是UML的開發者們發明的,而是開發者們依據最優秀的OO方法和豐富的計算機科學實踐經驗綜合提煉而成的。

(3)UML在演變過程中還提出了一些新的概念。在UML标準中新加了模闆(Stereotypes)、職責(Responsibilities)、擴展機制(Extensibility mechanisms)、線程(Threads)、過程(Processes)、分布式(Distribution)、并發(Concurrency)、模式(Patterns)、合作(Collaborations)、活動圖(activity diagram)等新概念,并清晰地區分類型(Type)、類(Class)和實例(Instance)、細化(Refinement)、接口(Interfaces)和組件(Components)等概念。

因此可以認為,UML是一種先進實用的标準建模語言,但其中某些概念尚待實踐來驗證,UML也必然存在一個進化過程。

應用領域

UML的目标是以面向對象圖的方式來描述任何類型的系統,具有很寬的應用領域。其中最常用的是建立軟件系統的模型,但它同樣可以用于描述非軟件領域的系統,如機械系統、企業機構或業務過程,以及處理複雜數據的信息系統、具有實時要求的工業系統或工業過程等。總之,UML是一個通用的标準建模語言,可以對任何具有靜态結構和動态行為的系統進行建模。

此外,UML适用于系統開發過程中從需求規格描述到系統完成後測試的不同階段。在需求分析階段,可以用用例來捕獲用戶需求。通過用例建模,描述對系統感興趣的外部角色及其對系統(用例)的功能要求。分析階段主要關心問題域中的主要概念(如抽象、類和對象等)和機制,需要識别這些類以及它們相互間的關系,并用UML類圖來描述。為實現用例,類之間需要協作,這可以用UML動态模型來描述。在分析階段,隻對問題域的對象(現實世界的概念)建模,而不考慮定義軟件系統中技術細節的類(如處理用戶接口、數據庫、通訊和并行性等問題的類)。這些技術細節将在設計階段引入,因此設計階段為構造階段提供更詳細的規格說明。

編程(構造)是一個獨立的階段,其任務是用面向對象編程語言将來自設計階段的類轉換成實際的代碼。在用UML建立分析和設計模型時,應盡量避免考慮把模型轉換成某種特定的編程語言。因為在早期階段,模型僅僅是理解和分析系統結構的工具,過早考慮編碼問題十分不利于建立簡單正确的模型。

UML模型還可作為軟件測試階段的依據。系統通常需要經過單元測試、集成測試、系統測試和驗收測試。不同的測試小組使用不同的UML圖作為測試依據:單元測試使用類圖和類規格說明;集成測試使用部件圖和合作圖;系統測試使用用例圖來驗證系統的行為;驗收測試由用戶進行,以驗證系統測試的結果是否滿足在分析階段确定的需求。

總之,标準建模語言UML适用于以面向對象技術來描述任何類型的系統,而且适用于系統開發的不同階段,從需求規格描述直至系統完成後的測試和維護。

UML建模軟件

UML建模軟件是指實現UML建模語言建模功能的工具軟件。最著名的UML建模工具是IBM Rational ROSE.另外,TeleOffice也是一款常用的建模工具。還有很多開源的UML建模工具,如staruml,ArgoUML,umbrello等.對學習用途來說,選擇開源的UML工具是合适的.對于企業應用,應該選擇商業的UML工具軟件,因為有更好的技術支持.

相關詞條

相關搜索

其它詞條