在示範如何繪製課務系統的類別圖之前,我們先回顧一下課務系統之前的產出物,主要有圖1的課程報名流程的活動圖,以及圖2的課務系統用例圖。

圖1 課程報名流程的活動圖

圖2 課務系統的用例圖

至於,相關的用例敘述,此處有做局部更新,更新後如表1表2。特別是原先的「通知已付訂」用例,此處更名為「通知已付款」。

由於,用例敘述的更新有影響到用例圖,所以此處我們同步更新用例圖,如圖6所示。

圖6 課務系統的用例圖[更新]

 

表1 填寫課程報名表的用例敘述 [更新]

◎ 簡介
.用例名稱:填寫課程報名表
.參與者:訪客、電郵伺服器

◎ 主要流程
1. 訪客決定報名課程。
2. 系統出現報名畫面,畫面雛型如圖3所示。



圖3 報名畫面

 
3. 訪客可以選擇查看課程說明,請參考「子流程:查看課程說明」。
4. 訪客選擇欲報名的課程名稱、上課地點、開課日期。
5. 訪客鍵入上課學員姓名、電郵信箱、公司名稱、職務名稱,挑選身份別為新生或舊生。
6.訪客送出報名資料。
7. 系統在客戶端先檢查學員姓名、電郵信箱是否都有填寫且格式正確:
  a. 報名資料完整無誤,系統則送出給伺服端。
  b. 報名資料欠缺有誤,系統則提出警告訊息,提醒訪客重新確認。
8. 系統伺服端收到報名資料後,自動產生一個報名代號。
9. 系統自動產生報名成功電郵,並傳送給電郵伺服器代為寄送給學員和課務人員。
10. 系統顯示報名完成訊息,其中包含報名代號以及報名資料。


圖4 課程說明
◎ 子流程:查看課程說明
1. 訪客選擇課程,查看課程說明。
2. 系統顯示課程說明,畫面雛型如圖4所示。

◎ 條件:企業規則
●舊生:一年內有上過UML Blog舉辦的收費性課程的學員,身分別即為「舊生」,可享學費九折之優惠,但報名訂金與新生相同。

◎ 畫面雛型:報名畫面,參考圖3,課程說明,參考圖4
● 課程名稱:UML認證班、OOAD入門班、UC 實務班、SA實務班
● 上課地點:台北(預設)、台中、高雄
● 開課日期:預設顯示當月份招生的第一個班別

 

 

表2 通知已付款的用例敘述 [更新]

◎ 簡介
● 用例名稱:通知已付款
● 參與者:學員、電郵伺服器

◎ 主要流程
1. 學員自行繳付訂金、尾款、或一次全額繳付,都可以使用系統通知已付款。
2. 系統出現付款通知畫面,畫面雛型如圖5所示。



圖5 付款通知
3. 學員勾取繳付訂金、尾款、或全額繳付的通知。
4. 學員填入報名代號,並且挑選匯款銀行、帳號末5碼、匯款日期、匯款時間和匯款金額。
5. 學員送出付款通知。
6. 系統在客戶端先檢查報名代號、帳號末5碼和匯款金額是否都有填寫且格式正確:
  a. 付訂資料完整無誤,系統則送出給伺服端。
  b. 付訂資料欠缺有誤,系統則提出警告訊息,提醒學員重新確認。
7. 系統伺服端收到付款資料後,會自動產生已收到款項的電郵,並傳送給電郵伺服器代為寄送給學員和課務人員。

◎ 條件:企業規則
● 訂金:訂位金額一個位子一千元,新生或舊生都相同。

◎ 補充資訊:畫面雛型
●  付款通知:預設值是繳付訂金。可參見圖5
●  匯款日期:顯示當天日期做為預設值。
●  匯款金額:顯示1000元做為預設值。

用例:填寫課程報名表
其實,尋找類別有很多方法,除了套用專家學者提出的樣式,我們也可以乾脆直接分析手頭上有的用例敘述、畫面雛型、文件報表等等。所以,現在我們就練習拆解前面圖3的報名畫面,試著找出類別、結合關係和屬性。

在報名畫面中,包含了數個資料項目,我們可以從中分析出相關的類別和屬性。就先從簡單明確的下手吧,所以我們先切出跟學員資料有關的區塊,分析如圖7所示。

圖7 學員

至於,學員的身分別可以直接定義一個資料型別為字串的屬性,也可以試著使用列舉型別,如圖8所示。

圖8 身分種類

接著,我們來看報名畫面的上半部,關於課程的部分,如圖9所示。比較特別的是,課程類別裡頭的開課日期,這個屬性的個體數目是「1,2,4」,那是因為目前開設的課程有一天、兩天和四天。如果不想這樣設定特別的天數的話,其實也可以直接設為「1..4」或者是「1..*」,這樣設定的彈性比較大,不過也就相對得較為不明確就是了。

圖9 課程

在課程的範例中,我們就先採用「1,2,4」好了,因為我想要示範比較少見的UML個體數目表示法。總之,UML個體數目可以有下列幾種表示法:

● 下限..上限:下限最小為0,上限最大為*(無限大)。

● 單一數字:單一數字代表下限數目和上限數目相同。

● 「*」(星號):「*」(星號)代表無限多,只出現一個星號的話,則代表「0..*」,相當於所有數目皆可。

● 幾個特定數字:如果是幾個特定的數字的話,數字之間要使用「,」(逗號)隔開,像我們前面的範例「1,2,4」。

● 混用:下限..上限,以及特定數字混用。例如「1..5,8,10」代表個體數目為1到5,以及8和10,其餘數目不被接受。到目前為止,我們除了獲得了身分種類、課程種類和地點種類這三個列舉型別外,主要還找到了學員和課程這兩個重要的類別,如圖10所示。

圖10 列舉型別

有趣的是,從學員和課程被放到同一個報名畫面來看,我們可以觀察出學員和課程兩者之間其實是有密切關係的,因此分析並建立了一條結合關係,如圖11所示。

圖11 學員與課程

對了,每一班的課程最多只招生25位學員,這是我們的企業規則,可以表達在學員端的個體數目上頭。

再者,請你看到圖12的結合關係性質表,我們可以幫結合關係取名稱,這樣一來,類別圖的觀看者便可以立即理解學員和課程之間的關係為何。
圖12 結合關係的名稱

當然,並非所有的資料都會出現在螢幕畫面上頭,所以如果我們只是單純從畫面雛型單一角度來尋找類別的話,絕對會有遺漏。

因此,我們還可以從用例敘述的內容來找尋看得到、或者隱藏在底下的相關資料。在簡單查看用例敘述之後,可以發現遺漏了像是報名代號之類這些跟報名有關的資訊,如表3所示。

 

 

 

表3 填寫課程報名表的主要流程 [局部]

◎ 主要流程
1~7. (略)
8. 系統伺服端收到報名資料後,自動產生一個報名代號。
9. (略)
10. 系統顯示報名完成訊息,其中包含報名代號以及報名資料。

所以,或許我們可以為此新增一個註冊類別,而且新增兩項屬性,分別名為:報名代號以及報名日期,如圖13所示。

圖13 註冊

接著,我們再把註冊類別放到類別圖中,看看它跟之前的學員和課程之間需不需要建立結合關係,如圖14所示。然後,你可以發現註冊類別其實取代了原先的報名結合,所以可以刪去原先的結合關係,形成圖15的樣子。

圖14 學員、課程與註冊

圖15 刪去學員與課程之間的結合關係

不過,還是有些從畫面雛型和用例敘述中,沒有辦法直接找到的隱藏細節。但是,也別過於擔心,到了繪製循序圖時,會再次檢驗類別圖,那時會再發掘出更多的細節。

最後,我們為課程類別增添了兩個屬性,分別為:人數限制和剩餘空位,前者用來記錄每門課最多招收多少學員,後者則用來紀錄目前還剩多少位子可以報名,如圖16所示。

圖16 人數限制與剩餘空位

而且,我還設定了人數限制的預設值為25,不過VS2010/UML沒有顯示出屬性的預設值,必須打開屬性的性質表才會看到預設值,如圖17所示。

圖17 屬性的預設值

用例:通知已付款
接著,我們繼續來分析通知已付款用例的畫面雛型,看看能找到什麼樣的類別和屬性,如圖18所示。

圖18 付款

由於,無論是繳付訂金、尾款或全額繳付都是共用付款類別,所以我們還可以額外加一個款項屬性來記錄付款種類,如圖19所示。

圖19 付款種類

再者,我們得記錄該項付款是針對哪次報名的,所以付款跟註冊之間會有靜態關係必須保存下來,為此我們得建立兩者之間的結合關係,如圖20所示。其中付款端的個體數目一共有三種狀況,條列如下:

● 0:還未繳費。

● 1:一次繳清全額。

● 2:先繳訂金,開課前繳尾款,所以一共有兩次付款。

圖20 註冊與付款

我們再回過頭查看通知已付款的用例敘述,看起來好像暫時沒有發現其他需要添加的細節。

對了,那我們怎麼知道這個學員要付多少學費以及已經繳了多少學費呢?所以,我們可以在註冊類別中新增兩個屬性,如圖21所示。

圖21 學費總額與已繳費用

最後,我們把目前為止,分析「填寫課程報名表」和「通知已付款」這兩個用例所找到的類別和列舉型別,分別列在兩張類別圖中,如圖22圖23所示,這樣我們就完成了課務系統的2張類別圖。

圖22 類別圖[類別]

圖23 類別圖[列舉型別]

 

 

專欄作者

熱門新聞

Advertisement