在UML中,活動圖(Activity Diagram)是一個非常實用的圖款,適合用來具體呈現「企業流程」(Business Process)或「工作流程」(Workflow)等等的活動流程觀點。
若以UML官方認證的角度來看,VS2010對活動圖的支援,包含了大部分的初級概念,以及少數的中級概念。
上一回介紹了部分初級概念,包括動作(Action)、控制節點(Control Node)、以及一般的物件節點(Object Node)。這次要進一步介紹其他物件節點,如輸入栓(Input Pin)、輸出栓(Output Pin)和活動參數節點(Activity Parameter Node),這些都是一種物件節點,如圖1所示。
圖1 物件節點、栓和活動參數節點
輸入栓和輸出栓
同時,我們先來看圖2,在UML母模中,也可以看到物件節點底下分為:栓(Pin)和活動參數節點。而且,栓往下又細分成輸入栓和輸出栓。UML模式可以協助我們組織這些瑣碎的UML元素。此處,我們會先談到輸入栓和輸出栓的概念,稍後再談到活動參數節點。
圖2 輸入栓與輸出栓[UML母模]
既然,栓是物件節點的一種,也就是說,栓也是一種代表物件或資料的元素,很容易理解。至於,輸入栓和輸出栓,也使用一般的輸入和輸出概念來理解就可以了,概念上並沒有特別之處。所以說,輸入栓是指做為輸入用途的物件節點,而輸出栓則是指做為輸出用途的物件節點。
圖3 禁止直接增加輸入栓或輸出栓
如果只是這樣的話,你很可能會跟我一樣疑惑,到底一般的物件節點和輸入栓、輸出栓,有什麼差別呢?你可以跟我一塊做個嘗試,打開VS2010中的活動圖,直接加入一個物件節點,這個動作應該沒問題。接著,請你再點選輸入栓或者輸出栓,任一個就可以了,然後新增到活動圖的空白處,會出現如圖3的禁止標記吧!
VS2010不會隨意禁止我們新增UML元素,但是VS2010會在遵守UML語法的情況下,有智慧的幫助我們預設元素,像是幫我們選擇控制流程或物件流程;還有在違反UML語法時,VS2010也會出現禁止的標記,限制我們。所以,剛才的嘗試意味著,直接加入物件節點是沒問題的,但是直接加入輸入栓或者輸出栓,卻是違反UML語法,而且會被VS2010直接禁止。
這樣實際動手嘗試一下,可見物件節點和栓確實有些小地方是不同的。我們回過頭來看輸入栓和輸出栓的定義,如下:
˙輸入栓(Input Pin):「動作」(Action)所消耗的數值(values),可以放置在輸入栓中。簡言之,輸入栓持有(hold)需要輸入給動作的數值。
˙輸出栓(Output Pin):「動作」(Action)所產出的數值(values),可以放置在輸出栓中。簡言之,輸出栓持有動作輸出的數值。
因此,我們可以得知:栓,無論是輸入栓或是輸出栓,都跟動作有關。所以,VS2010才會禁止我們在未選定任何動作的情況下,新增一個輸入拴或者是輸出栓。
圖4 禁止直接增加輸入栓或輸出栓
現在,我們再來嘗試一次,先在活動圖的空白處放置一個動作,隨後再點選工具箱裡的輸入栓或輸出栓,滑鼠游標移到動作圖示處,就會出現可以新增輸入栓或輸出栓的標誌,如圖4所示。而且,只要你的滑鼠游標移到動作圖示外頭,VS2010就會馬上出現禁止標記。
除了輸入栓和輸出栓的定義外,我們還可以從UML母模中,看到它們跟動作之間的關係,如圖5所示。同時,我們還可以順便看到前面提到動作性質表中的正文和語言,在UML母模中當然也是有一模一樣的概念的。
圖5 動作與栓
然後,我們再來細看輸入栓和輸出栓的性質表,如圖6,除了「型別」(Type)屬於初級概念外,其餘四項特性都屬於中級概念,所以我們一樣留待中級概念時,才回過頭來談這四項概念。最後,還有一項高級概念「控制」(Is Control),通常用在即時系統(Real-Time System)的設計上,在一般的商用系統幾乎是用不到,所以我們也就不打算談了。
圖6 輸入栓和輸出栓的性質表
至於,型別的概念,我們在前面的物件節點曾經提過,因為輸入栓和輸出栓也是一種物件節點,所以它們跟物件節點相同,可以指定物件所屬的類別,當然也可以不指定。
圖7 栓可以指定型別或不指定
一旦,我們為拴指定型別之後,栓的表示法如同物件節點的表示法,先秀出栓的名稱,然後先接冒號,才秀出型別名稱,如圖7所示。
相較之下,輸入栓和輸出栓跟動作有密切關係,可是物件節點則不一定要跟動作有關係。雖然,前面我們談到的物件節點概念或舉例,都跟動作有關,不過那其實只是因為到目前為止,我們並沒有學到更多的活動節點,所呈現出來的現象。活動參數節點
前面,我們學到了一般的物件節點和輸入拴、輸出栓的概念,此處要來談另一種稱為「活動參數節點」(Activity Parameter Node)的物件節點。溫故而知新,所以先來比較三者的不同,如下:
˙物件節點:概念最簡單、限制最少,就是代表一般的物件或是資料。
˙栓:一種特殊的物件節點,用來提供動作所需、或者動作所產的物件或資料。
˙活動參數節點:另一種特殊的物件節點,跟栓的概念雷同,只不過栓配合動作,而活動參數節點則是配合活動。簡言之,輸入活動的物件或資料,或者活動輸出的物件或資料,就是活動參數節點。
圖8 活動參數節點
現在,你可以跟我一塊嘗試著在動作圖示內部放置活動參數節點,你會看到VS2010禁止我們做這個動作,但是,如果你在活動圖面的空白處新增活動參數節點的話,就可以成功的新增一個活動參數節點。原因正是因為活動參數節點是搭配活動使用,而不是搭配動作使用,如圖8所示。
乍看之下,有個問題,因為物件節點和活動參數節點圖示一樣,怎麼會知道哪個矩形是一般的物件節點,哪個矩形是需要搭配活動的參數節點?回答這個問題之前,我們要先來釐清活動(Activity)、動作和活動圖三者的關係,如下:
˙活動與動作共用相同的圖示,就是我們前面看到的圓角矩形圖示。
˙一個活動內部可以包含多個動作。但是,一個動作內部不能包含其他更小的動作,因為動作已經是不可往下分解的單一步驟了,前面我們談過這個重要特性。
˙一張活動圖中,可以放置活動,也可以放置動作。如果,活動圖中放置了活動的圓角矩形的話,那麼在活動圖示內部還可以繼續放置更小的動作。
請你看到UML的母模中,明確指出活動可以包含多個動作,但是動作無法包含其他的動作。簡言之,活動是由多個細小的動作,所組成的,如圖9所示。
圖9 一個活動內部包含多個細小的動作[UML母模]
不過,在VS2010的活動圖工具箱中,我們沒找到「活動」的選項可用,因此無法在活動圖中同時繪製活動和動作。
圖10 活動圖工具箱[Visual Paradigm]
為了讓你容易理解活動和動作的不同,我特別安裝了另一套UML工具Visual Paradigm for UML Community Edition,你可以看到圖10的活動圖工具箱中,同時列出活動和動作。因此,我們可以在同一張活動圖中,同時繪製出活動和動作,如圖11所示。
圖11 活動與動作[Visual Paradigm]
現在,我們可以回答,如何辨識出一般的物件節點與活動參數節點?在UML正確的表示法中,活動參數節點應該跨在活動圖示的邊框上,如圖12所示。
圖12 活動參數節點放置在活動圖示的邊框上[Visual Paradigm]
最後,我們來看活動參數節點的性質表,如圖13所示。其中有三項中級概念,我們留到下一回中級概念介紹時來談。至於,型別的部分,概念和使用方式如同前述的物件節點,我就不再多說了。
圖13 活動參數節點的性質表
比較特別的是「參數」(Parameter)特性,這是個高級概念,雖然VS2010有出現這個欄位,可是卻不允許我更改。我打開了Visual Paradigm for UML Community Edition,試著找到了圖14的參數規格視窗,確定可以設定參數。
圖14 參數規格[Visual Paradigm]
所以,參數不能更改的問題,不確定是VS2010的問題,還是因為無法直接更改。不過,這個概念我們就不打算談了,一方面因為它是高級概念,鮮少用;另一方面也因為無法更改這個欄位,無法用。判斷節點與合併節點
回顧一下,我們前面談過了三種活動節點,分別為:動作、控制節點和物件節點。物件節點底下可以細分成栓和活動參數節點;栓底下又可以細分成輸入栓和輸出栓。
還有,我們談到兩種控制節點:起點和活動終點。看看你能不能試著繪製出如圖15的UML母模,這會有助於你整理這些瑣碎的知識喔!
圖15 活動節點[UML母模]
活動圖的組成元素中,除了一堆的動作、物件節點,還有另一群用來協調流程的控制節點。前面介紹中,我們認識了起點和活動終點,在活動圖工具箱中還有另外兩個控制節點,分別為:判斷節點(Decision Node)和合併節點(Merge Node),如圖16所示。
圖16 判斷節點與合併節點
所以呢,你一定可以猜想的到,UML模式中的控制節點底下,可以再多增加兩種控制節點,形成如圖17的樣子。
圖17 控制節點[UML母模]
先說判斷節點,它的概念很簡單,是個很實用的控制節點。判斷節點是個大的空心菱形,一條進入動線、多條離開動線,但是它會從多條離開動線中,即時判斷當下流程應該走哪一條離開動線。
推想一下,判斷節點怎麼知道該走哪一條離開動線呢?想到了嗎?利用警戒條件,我們可以在離開動線上頭設置警戒條件,只有通過警戒條件的離開動線可以通行。
來看報名課程的活動圖,我們可以加入一個判斷節點,用來判斷使用者填寫的報名資料是否齊全,如圖18所示。使用者填寫完並送出報名資料給系統後,系統會立即檢查報名資料是否齊全,倘若報名資料不齊全,就讓流程回到報名課程動作,讓使用者把不齊全的資料補齊。
圖18 判斷節點與警戒條件
對了,如果判斷節點要搭配物件節點來使用,可以嗎?當然可以了。報名課程動作結束產出一個報名表物件,我們把報名表物件節點連到判斷節點,檢查報名表內的資料是否填寫齊全,如圖19所示。
圖19 判斷節點與物件節點
最後,回到VS2010的活動圖,打開判斷節點的性質表,如圖20所示,看看有沒有什麼特別的性質可以學習的。看起來除了判斷節點的名稱外,VS2010並沒有支援其他特別的性質。
圖20 判斷節點的性質表
在UML的活動圖中,判斷節點和合併節點共用空心大菱形的圖示,只不過前者是一條進入動線、多條離開動線,後者則是多條進入動線、一條離開動線。
顧名思義,合併節點用來合併多條分流,它就像上高速公路的閘道,多條馬路都接到同一個閘道,以便進入高速公路。
在這個日常生活的類比範例中,閘道就是合併節點,而多條馬路就是多條進入動線,至於高速公路則代表唯一一條離開動線。
請看到圖21的範例,使用者可能從列出的當期課程中,直接就報名了,也可能挑出其中一門課來查看課程細節之後,才會決定要報名課程。
圖21 合併節點
因此,我們可以讓列出當期課程和查看課程細節這兩個動作,連到同一個合併節點,然後再接到報名當期課程。
最後,我們仍是打開VS2010的合併節點性質表來查看一下,如圖22所示,就跟前頭的判斷節點一樣,VS2010並沒有支援更多特殊的性質。
圖22 合併節點的性質表
然後,再把活動圖工具箱調出來查看一下,如圖23所示,我們確實把VS2010活動圖中所支援的初級概念都談過了。
圖23 活動圖的初級概念與中級概念
當然,UML活動圖的初級概念遠比VS2010支援的更多,不過本系列以VS2010的支援範圍來談UML,所以VS2010未支援的UML概念,除非必要,否則就省略不談。UML的連接器
其實,UML的活動圖中,也有一個「Connector」的概念,我把它中譯為「連接器」,跟前面提到的VS2010活動圖工具箱中的「連接線」(Connector),截然不同。簡單說明如下:
˙VS2010的「連接線」(Connector):兩個節點之間的連接線。VS2010會智慧判斷兩節點之間應該選用何種連接線,幫我們預先產生。
˙UML活動圖的「連接器」(Connector):兩兩成對使用,可以用來截斷並連接活動圖面上過長的動線。
圖24 連接器[astah*]
不過,我發現少數的UML工具才有支援連接器,所以我特別安裝了另一套原名為JUDE的UML工具,現在改名為astah* community,它有支援連接器的圖示,如圖24所示。
連接器採用圓形圖示,它們會兩兩成對出現,通常名稱不重要,用個A、B、C、D之類的簡單可以辨識的符號或字母就可以了。動線進入其中一個連接器,然後動線再從另一個同名的連接器射出。
回過頭來看圖24,其實,上下兩個圖所代表的意義是相同的,只不過上圖利用成對的同名連接器,把截斷的動線接起來了。連接器本身並沒有攜帶特殊的語義,僅僅只是用在活動圖面上,用來降低活動圖面的複雜度。
至此,大致已介紹完VS2010所支援的UML初級概念,下一回開始進入中級概念,我們除了會介紹新的控制節點,也會回頭來談前面保留下來,未談完的特殊性質。介紹完中級概念,也就差不多介紹完VS2010所支援的活動圖功能,可以進入下一款用例圖了。
VS2010所支援的UML初級概念 |
● 動作(Action):動作是活動(Activity)中的一個步驟(single step),它具有不可分解的特性
● 物件節點(Object Node):物件節點可用來代表某一個類別所誕生的物件,或代表一項資料。 ● 控制節點(Control Node):控制節點可用來協調流程,包括如起點、活動終點、判斷節點或合併節點等,都是一種控制節點。 ● 控制流程(Control Flow):透過控制流程,可以指出來源動作執行結束之後,接著應該要執行哪一個目標動作。 ● 物件流程(Object Flow):某一個來源動作執行結束後,會產出某些物件或資料傳遞給下一個目標動作時,必須使用物件流程來傳遞產出的物件或資料。 ● 起點(Initial Node):當一條活動被啟動時,流程即從起點開始往下執行。 ● 活動終點(Activity Final Node):任一條動線進入活動終點時,整張活動圖即告終止,即便有還未跑完的流程分支,也會全部終止。 ● 栓(Pin):一種特殊的物件節點,用來提供動作所需、或者動作所產的物件或資料。 ● 輸入栓(Input Pin):動作所消耗的數值,可放置在輸入栓中。簡言之,輸入栓持有(hold)需要輸入給動作的數值。 ● 輸出栓(Output Pin):動作所產出的數值,可放置在輸出栓中。簡言之,輸出栓持有動作輸出的數值。 ● 活動參數節點(Activity Parameter Node):輸入活動的物件或資料,或者活動輸出的物件或資料,就是活動參數節點。 ● 判斷節點(Decision Node):判斷節點是大的空心菱形,具有一條進入動線和多條離開動線。用來從多條離開動線中,即時判斷當下流程應該走哪一條離開動線。 ● 合併節點(Merge Node):合併節點用來合併多條分流,和判斷節點剛好相反,具有多條進入動線、一條離開動線。 |
專欄作者
熱門新聞
2024-11-05
2024-11-05
2024-11-04
2024-11-07
2024-11-02
2024-11-06