最新的UML2中包含了十四款圖,你可以看到圖1中UML規格書對所有圖款的分類。

圖1 十四款UML圖

圖2 VS2010支援的UML圖款

接著,我們可以從圖2中看到,VS2010表面上支援了五款圖,分別為:類別圖(Class Diagram)、循序圖(Sequence Diagram)、用例圖(Use Case Diagram)、活動圖(Activity Diagram)、元件圖(Component Diagram)。但是,類別圖中可以放置套件圖(Package Diagram)相關的元素,所以VS2010實際上可以讓開發人員繪製六款圖的。
另外,還有幾款圖共用的情況,我也做了確認。總而言之,VS2010對這十四款UML圖的支援情況,歸納如下。

類別圖(Class Diagram)
類別圖,VS2010有支援。

類別圖在表達系統內部的靜態結構,可以用來將程式碼分門別類,對開發人員而言,是非常重要的UML圖。如果要執行自動產碼,或者反向工程、依碼產圖,類別圖通常都是首選。

用例圖(Use Case Diagram)
用例圖,VS2010有支援。

用例圖在表達系統對外提供的服務或功能,是開發人員可以用來跟使用者溝通的主要圖款之一。

循序圖(Sequence Diagram)
循序圖,VS2010有支援。

循序圖用來表達系統內部一群物件之間互傳訊息的狀況,搭配用例來使用的話,可以針對每一個用例,設計系統內部一群物件實現用例的運作情況。

對於程序員的編碼作業,類別圖和循序圖是最值得參考的兩款圖。UML工具的自動產碼功能中,最常見參考類別圖產碼,參考循序圖產碼通常是較為高階的功能,雖然依據循序圖產碼一點都不難。

活動圖(Activity Diagram)
活動圖,VS2010有支援。

活動圖就是一般常用的工作流程圖,非常容易上手。我個人認為,活動圖和用例圖是UML圖款中,最適合拿來跟使用者溝通的兩款圖,其餘圖款使用者理所當然是看不懂得啦!

元件圖(Component Diagram)
元件圖,VS2010有支援。

顧名思義,元件圖在表達系統的組成元件(component)、元件所提供的介面(interface)或者是所需要的介面、以及元件之間的依賴關係。元件是指一個具體的模組單元(modular unit),但是必須具備定義明確的介面(well-defined interface),並且能夠易於抽換(replaceable)。

如果把UML圖依照需求、分析設計、實作、部署來區分的話,用例圖和活動圖偏向需求圖款,元件圖則偏向實作圖款,等會談到的「部署圖」偏向部署圖款,而其餘的UML圖款則大多可以歸類在分析設計圖款中。

部署圖(Deployment Diagram)
部署圖,VS2010未支援。

元件圖和部署圖都是用來表達實體元素的圖款,前者表達實體的軟體程式,後者表達實體的硬體設備。在實務上,部署圖最常用來表達系統的硬體設備以及架構。

其實,對於軟體開發人員而言,部署圖已經比較偏向工程人員所需的圖了,距離軟體有點遠了。所以,老實說,VS2010沒有支援部署圖,我個人是覺得還可以接受啦。

物件圖(Object Diagram)
物件圖,VS2010未支援。

物件圖用來呈現系統在某一時刻下的快照(snapshot),快照內容主要包含一群物件(object),以及這些物件之間的連結(link)。由於,物件圖只能表達系統在特定時刻下的物件關係,所以並不實用,沒太大價值,實務上也鮮少使用物件圖。因此,我個人是認為VS2010沒有支援物件圖,其實也無妨啦!

此外,有些UML工具中,套件圖、物件圖和類別圖三款圖,會共用類別圖的工具箱(toolbox),所以仔細看工具箱中的元素,可以發現其他圖款的元素。

圖3 類別圖的工具箱

不過,我仔細看了VS2010的類別圖工具箱中,有套件圖的元素,但是沒有物件圖的元素,如圖3所示。所以,確定是無法用VS2010來繪製物件圖了。

通訊圖(Communication Diagram)
通訊圖,VS2010未支援。

通訊圖跟循序圖的功用相似,都是用來表達一群物件互傳訊息的互動情況。只是,通訊圖採用網狀圖形,強調物件之間的連結。而循序圖採用柵欄狀圖形,強調依序發送訊息。

兩款圖所包含的資訊相似,所以很多UML工具有提供兩款圖互轉的功能。因此,雖然VS2010沒有支援通訊圖,其實也沒什麼關係,有循序圖就可以了。況且,在實務使用上,循序圖遠比通訊圖普及、好用。

狀態圖(State Machine Diagram)
狀態圖,VS2010未支援。

狀態圖用來表達某一種物件,在其生命周期中,因為事件(event)刺激導致狀態(state)的變化。開發人員常用狀態圖來設計某一種物件的行為。

如果開發一般的商用系統的話,其實很少使用到狀態圖。但是,要開發即時系統(Real-Time System)的話,狀態圖就很重要了。有些UML工具甚至可以參考狀態圖,自動產出程式碼,不過這類的UML工具通常偏向支援即時系統的開發,而不是商用系統。

總之,類別圖、用例圖、循序圖、活動圖、元件圖、部署圖、物件圖、通訊圖、狀態圖,這九款UML圖,在UML1版就已經提出了。UML後續的改版中,大概就是狀態圖的名稱變了一、兩次,還有原先的「合作圖」(Collaboration Diagram)後來更名為現在的「通訊圖」。再來,就是針對這幾款圖的元素,做一些增修。其中的循序圖和活動圖,它們包含的元素,增修幅度最大。

圖4 循序圖的工具箱

雖然,表面看起來VS2010支援的UML圖款屬於UML1。不過,也不能因此而斷定VS2010只支援到UML1,因為有些UML2才提出的元素,在VS2010中也是有支援。比方說,循序圖中「引用片段」(InteractionUse)的概念,就屬於UML2的新元素,但是VS2010是有支援的,如圖4所示。

至於,接著要談的套件圖(Package Diagram)、組合結構圖(Composite Structure Diagram)、互動概觀圖(Interaction Overview Diagram)、時序圖(Timing Diagram)和造型圖(Profile Diagram),這五款UML圖則是在UML2才提出來的。特別是最後一款「造型圖」,其中的元素雖然在UML2就已經提出來了,可是一直到最近的UML2.2新版中,才正式把造型圖列入UML圖款之一。套件圖(Package Diagram)
套件圖,VS2010有支援。

UML一直都有「套件」(package)的概念和相關元素,只是沒有特別提出一款套件圖,直到UML2才正式提出套件圖。

套件是一種很常見的群集機制(grouping mechanism),用來將相關的元素群集起來。常見開發人員用套件來表達「次系統」(subsystem),並且使用套件圖來表達次系統之間的依賴關係。

如前述,VS2010雖未列出,但是其實是有支援的,它的相關元素放置在類別圖的工具箱中。

組合結構圖(Composite Structure Diagram)
組合結構圖,VS2010未支援。

我個人認為,除了套件圖外,組合結構圖算是UML2中比較實用的圖款,但是它的實用性,並不是在一般的商用系統中,而是偏向即時系統或嵌入式系統。

先來回顧一下類別圖和物件圖。類別圖用來表達系統內部的靜態結構,而且它表達的不是系統某一個時刻的靜態結構喔,它表達的是系統在任何時刻下都必須遵守的靜態結構。那麼物件圖呢,物件圖則是用來表達某一個時刻下,系統內部一群物件結構。

回過頭來看組合結構圖,它用來表達某一物件的內部結構,其內部由一群小物件所以組成。這款圖有兩個特色,其一、它鎖定的範圍是物件內部,而不是一般商用系統的系統內部;其二、它強調物件內部的組成物件,一般在商用系統中,物件通常是平等的,組合的結構比較少些。

也因為組合結構圖的實用價值,不在一般的商用系統上頭,所以,我個人認為VS2010把它剔掉,其實也無妨。

互動概觀圖(Interaction Overview Diagram)
互動概觀圖,VS2010未支援。

互動概觀圖是活動圖和循序圖的混合版,主要結構像活動圖,表達流程,但是參與流程的節點,不是一般的動作(action),取而代之的是「互動」(interaction)片段。一個互動片段的內容,正是循序圖的一小段互動片段。

對於複雜的物件互動,互動概觀圖可以用來呈現互動片段之間的控制流程,其實是可以補足循序圖不易表達控制流程的缺點。不過,換個角度來看,倘若循序圖複雜到需要搭配互動概觀圖的話,這張循序圖可能就需要拆解成兩張圖,或者重構已降低複雜度了。

再說,以控制流程為主要結構,拆解的互動片段為節點的話,另一個問題是,程序員可能無法直接按圖施工,因而降低了這款圖的實用效益。

時序圖(Timing Diagram)
時序圖,VS2010未支援。

前面提到過狀態圖,用來表達物件因為事件的刺激,而轉換狀態,所以著重在事件與狀態的關係。而時序圖也是在表達狀態變化,但是它著重在狀態與時間的關係,用來表達物件在某一狀態停留了多久的時間後,將轉換到下一個狀態,時序圖很像心電圖,透過高高低低的曲線來強調時間。

同樣的,在商用系統上,並不是這麼重視時間的上上下下,所以時序圖如果用在商用系統上頭,無法帶來太大的效益。但是,如果把時序圖放到即時系統或嵌入式系統上頭,應該會令人眼睛一亮。

回顧一下,狀態圖、組合結構圖、時序圖都較為偏向用在即時系統或嵌入式系統上頭。還有,UML2中的活動圖,其實有許多新添的概念,也都是用在即時系統或嵌入式系統上頭,而不是用在商用系統上頭。

我在猜想,或許這類系統的開發人員也會認為通訊圖和互動概觀圖,很有價值,這也說不一定。UML這樣發展,也不令人驚訝,本來UML就想跨領域通吃,所以加入一些關於即時系統或嵌入式系統的模式元素,也不為過啦!

造型圖(Profile Diagram)
造型圖,VS2010未支援。

造型圖,跟前面提到的十三款圖,截然不同,而且它也是UML2.2最新提出的圖款。造型圖主要用來擴充UML,讓UML可以成為另一套以UML為基底的方言,像是擴充UML 成為表達晶片設計的模式語言。

想當然爾,一般的開發人員不會用到造型圖,就連UML官方認定上,造型圖的相關概念都歸屬於中級認證範圍。所以,老話一句,我個人認為VS2010沒有支援造型圖,也OK啦!

總之,歸納起來,雖然VS2010支援的圖款多屬於UML1,但是各圖款內部的元素,有些是在UML2才提出的新元素。所以,如果要說VS2010支援到UML2,也是勉強可以接受的啦!

再者,雖說VS2010只支援類別圖、用例圖、循序圖、活動圖、元件圖,外加一個隱藏版的套件圖,不過這幾款圖各個都是強棒。而且,除了元件圖外,其餘五款圖也都是UML官方認定的初級認證範圍,也就是說,VS2010挑中的這六款UML圖,不僅兼具實用價值,同時也具備初學特性。

在這六款圖中,我們將從活動圖開始學習UML,也將從活動圖開始著手分析設計。活動圖是一個非常實用的圖款,適合用來具體呈現「企業流程」(Buisness Process)或「工作流程」(Workflow)等等的活動流程觀點。

雖然,以物件導向的實作技術而言,程序員無法「按圖施工」,直接將活動圖的設計內容對應成程式碼。但是,以分析師的角度來看,活動圖光是用來協助釐清並具體呈現繁雜的企業流程,其實就已經值回票價了。

活動圖涵蓋較少的物件導向思維和特徵,倘若以初級和中級概念來看,分析師根本不需要具備物件導向思維,就可以繪製出活動圖了。

我個人認為,這是活動圖容易學習和上手的最主要原因之一,所以,下一期我將從活動圖開始,帶你用VS2010進入UML的世界。

專欄作者

熱門新聞

Advertisement