在前幾回文章中,已經介紹過VS2010所支援的活動圖初級概念,以及中級概念中的新元素,現在要回頭來看物件節點、活動參數節點、輸入栓與輸出栓,在這幾個初級概念中還有一些先前沒有提到的特性,也就是在初級概念中的中級概念特性。先從物件節點開始。

物件節點
在物件節點的性質表中,我們還留下了三個中級概念的特性還沒談,分別為:次序(Ordering)、選擇(Selection)和上界(Upper Bound)這三項,如所以,請你看到圖1所示。

圖1 物件節點的性質表

緊接著看到所以,請你看到圖2,這三個概念確實出現在UML母模中,先看到次序的概念,顯然UML定義了四種次序,分別為:先進先出(FIFO)、後進先出(LIFO)、有序(Ordered)、無序(Unordered)。

圖2 物件節點[UML母模]

特別注意到,雖然在所以,請你看到圖1的VS2010物件節點性質表中,次序的預設值是「無序」。但是,實際上,UML對於物件節點次序的預設值是「先進先出」的。簡單說明這四種次序,如下:

● 先進先出(FIFO):預設值。先進到物件節點的資料或物件,也會優先輸出給下一個活動節點使用。

● 後進先出(LIFO):後進到物件節點的資料或物件,卻優先輸出給下一個活動節點使用。

● 有序(Ordered):物件節點內資料或物件的進出,有依照特別的次序方法,但不是前面提到的先進先出,也不是後進先出方法,而是其他的次序方法。

● 無序(Unordered):物件節點內資料或物件的進出,並沒有依照特定的次序方法。

既然,物件節點有次序的特性,你大概就能推想的到,物件節點可以保存一個以上的資料或物件,因此才會有一個「上界」(Upper Bound)的特性,用來設定最多可以保存多少個資料或物件。物件節點上界的預設值是「多個」,UML使用星字號(*)來代表多個、無上限的數量。

當然,我們也可以指定一個上界數字,來代表最多只能保存這麼多數量的資料或物件。比方說,我們的教室最多只能坐下25位學員,所以我們招生的上限是25人,也就是說,我們最多只能保存25張報名表,而且是先報名者優先處理的先進先出次序,如所以,請你看到圖3所示。

圖3 報名表的性質表

圖4 上界是25個

 

 

 

 

 

不過,當我們設定完物件節點的性質之後,回頭來看活動圖,你會發現無法從圖面上看出報名表具有特殊的性質,如所以,請你看到圖4所示。

其實,軟體工具應該提供顯示或隱藏資訊的功能,我找不到VS2010中關於這方面的設定。我想透過另一套前面文章談過的UML工具Visual Paradigm for UML Community Edition,來展現這個簡單的功能。

請你看到所以,請你看到圖5,在Visual Paradigm中,可以讓我們選擇秀出物件節點的特性內容,而且這也是UML標準的表示法。

圖5 物件節點[Visual Paradigm]

 

 

由於,次序的預設值是先進先出,在沒有更改預設值的情況下,其實是不需要秀出次序的設定值。所以,在所以,請你看到圖5的右圖中,我們特別將次序改成「有序」,這時就會出現次序的設定值了。

倘若,把VS2010和Visual Paradigm簡單地兩相比較之下,我們可以發現,對於支援UML的課題上,VS2010其實還有許多值得我們期待的功能,在往後的改版中是指日可待的。

好吧,最後我們再來看物件節點的「選擇」(Selection)特性。其實,這個特性跟「有序」有關係,當我們設定了物件節點是有次序的,但不是先進先出、後進先出,而是某一種我們設計的次序方法時,就可以在「選擇」這個欄位中連結我們自行設計的排序方法。

除了連結自行設計的排序方法的活動圖外,更多時候,我們可能只需要說明排序方法,這時候可以增加一個標示為<
>的註解,其內記錄著自訂的排序方法,就可以了,如所以,請你看到圖6所示。

圖6 自訂的排序方法

所以,報名單的選擇方法是,之前保留訂金的延期生會優先訂位,剩下的位子才是依照先進先出的方式依序訂位。活動參數節點
還記得我們在前面有看過UML母模,活動參數節點是一種物件節點,所以可以推想得到,在活動參數節點的性質表中,應該也會出現次序、選擇、上界的特性。所以,現在就請你跟我一塊打開活動參數節點的性質表來查看一下,如所以,請你看到圖7所示。

圖7 活動參數節點的性質表

沒錯吧,而且針對活動參數節點,VS2010甚至沒有支援更多其他的特性。最後,我們回過頭來看UML母模,親眼確定一下,如所以,請你看到圖8所示。活動參數節點繼承了物件節點的一切,包含物件節點跟其他元素之間的關係。

圖8 活動參數節點[UML母模]

輸入栓與輸出栓
回憶一下,除了活動參數節點外,另一種重要的物件節點是什麼?就是輸入栓和輸出栓了。因此,我們打開輸入栓和輸出栓的性質表來查看一下,可以發現它們裡頭也理所當然地記錄了次序、選擇和上界的特性,如所以,請你看到圖9所示。所以,我們僅會繼續來談另外一項特性「個體數目」(Multiplicity)。

圖9 輸入栓和輸出栓的性質表

那我們就先來談輸入栓的個體數目吧。輸入栓暫時保管了動作需要消耗的物件或資料,但是有時候,我們會遇到動作一次需要多個物件或資料才能夠執行,一個物件或資料是不夠的,這時就會需要在輸入栓中設定個體數目的下限,意味著最少需要消耗的資料或物件數量。而且,如果有限制這個動作最多只能消耗多少數量的資料或物件的話,就可以設定個體數目的上限。

圖10 輸入栓的個體數目

 

 

 

 

請你看到圖10的範例,這是課務行政流程的活動圖,如果要預訂上課場地的話,最少需要15位學員,而且最多不能超過25位學員。所以,我們可以設定「預訂上課場地」動作,它的學員輸入栓的個體數目下限15、上限25。UML個體數目的表示法是「下限..上限」,最小下限是0,最大上限是無限(*)。

但是,VS2010仍然無法讓我們在輸入埠的圖示旁顯示出重要的個體數目設定,雖然我們在輸入栓的性質表中,確實做了個體數目的限制,如所以,請你看到圖11所示。

圖11 輸入栓的個體數目

至於,輸出栓是用來暫時保存動作產出的資料或物件,所以輸出栓的個體數目下限可以用來限制該動作產出物件的最少數量,而上限則是用來限制最大產出數量的。此處,我就不舉例了,你可以自行練習想想可有什麼樣的情況,需要設定輸出栓的個體數目的。

最後,我們回過頭來學習一下,在UML模式的何處記載了關於栓的個體數目的,如所以,請你看到圖12

圖12 學員輸入栓的性質表

開發專案在正式投入系統分析設計工作前,還有一小段了解企業現行或未來運作流程的工作要做,而這一小段工作一般稱之為「企業流程建模」(Business Process Modeling)。繪製企業流程圖是企業流程建模產出的重要工件之一,便是應用此處所學到的活動圖概念。價值
當然,並非所有軟體開發一開始都需要企業流程建模,但是如果能花些成本執行企業流程建模的話,確實可以帶來下列幾項好處:

1. 縮減企業目標與具體實現之間的差距:企業當然不會隨意就投入一堆預算來建構資訊系統,而是因為企業有它預想的目標需要達成。然而,企業目標總是在資訊系統具體實現之前就已經形成,如何縮減目標與實現兩者之間的差距呢?最好的方法之一是,花點時間釐清企業領域中的大小事。
2. 協助重要關係人(Stakeholder)了解並釐清企業運作:我過去輔導一個團隊,有個經驗。當時我們直接切入定義用例(Use Case),並沒有要求應用活動圖來繪製企業流程,但是團隊成員自動補上了企業流程圖。詢問之下才知道,團隊成員覺得大家對企業流程好像不太清晰,所以才想透過活動圖來具體呈現企業流程,一方面讓團隊成員有共識,另一方面也方便聚焦討論。

3. 提高創新流程的可行性:「創新」絕對是現代企業最關注的主題之一了,不創新則退。我們可以先透過活動圖描述企業現行的運作模式,瞭解企業組織的潛在問題,接著在紙上改版創新企業流程,得出另一版創新的企業流程圖。或許,這只是個低成本的小小創新,但是企業時時刻刻落實創新精神、做到創新工作,也就呈現了持續成長的景象了。

4. 萃取出可以支持企業運作的系統需求:資訊系統的需求來自於企業運作,不了解企業運作,如何能夠設計出令企業滿意、願意買單的資訊系統呢?所以,在軟體開發實務上,當然可以直接切入用例建模(Use Case Modeling)、描述系統功能性需求。但我還是會建議你投入一丁點的預算,優先執行企業流程建模,絕對不會令你失望的!

至此,我們差不多已經講完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):合併節點用來合併多條分流,和判斷節點剛好相反,具有多條進入動線、一條離開動線。
● 分叉節點(Fork Node)與會合節點(Join Node):分叉節點指一條動線進入分叉節點之後,就可以分叉出多條「並行分流」。而會合節點則相反,呈現多條進入動線、一條離開動線的模樣。
● 發送信號動作(Send Signal Action)與接收事件動作(Accept Event Action):接收事件動作就是在「等待」某一個特定事件發生,而發送信用動作則相對的是在「產生」某一個特定的信號。
● 呼叫行為動作(Call Behavior Action)與呼叫操作動作(Call Operation Action):呼叫行為動作和呼叫操作動作,都是一種會引發行為的動作。呼叫行為動作會引發「行為」(behavior),而呼叫操作動作則是會引發「操作」(operation)。

 

專欄作者

熱門新聞

Advertisement