UML實例:ATM中的用例圖 類圖和順序圖詳解
本節和大家一起學習一下UML實例,我們在日常生活中也經常和ATM打交道,本節就以ATM系統為例將前面幾章中學到的用例圖、類圖、順序圖知識運用到此例中。下面讓我們一起來學習具體介紹吧。
統一建模語言UML實例
"例,比也"(《說文》),本次連載將給出一個利用UML進行建模的完整實例,綜合應用前面學到的知識,達到"舉此以例其余"(元劉壎《隱居通議·歐陽公》)的目的。
在我國十年前ATM(自動取款機)還是一個很新鮮的事物,現在在城市的大街小巷隨處可見。我們在日常生活中也經常和ATM打交道。本章我們將以簡化的ATM系統為例將前面幾章中學到的用例圖、類圖、順序圖、狀態圖、活動圖及協作圖知識運用到此例中。
1.1用例圖
首先看一下UML實例中的用例圖,參與者"銀行儲戶"和ATM機。簡化后的ATM機僅有取款、存款及其余功能。其余功能不做詳細說明。
圖1.1自動取款機(ATM)系統用例圖
銀行儲戶在ATM機上完成取款、存款及其他業務。
1.2類圖
我們來看一下UML實例中的類圖,圖1.2所示的銀行系統類圖和圖3.5是類似的,只是將工作人員換成了ATM。整個銀行系統包括了帳戶庫、銀行儲戶庫及ATM系統。
許多單個的帳戶組成了帳戶庫。帳戶具有帳戶類型、帳戶號、余額三個屬性,均為private,其類型分別為char,int,double。六個操作分別為setType、getType、getAccountNumbe、setAccountNumbe、caculateBalance、getBalance,除caculateBalance為protected其余均為public。
setType設置帳戶類型,返回類型為void,參數類型為char,輸入帳戶類型。
getType獲取帳戶類型,返回類型為char,無參數。
setAccountNumbe設置帳戶號,返回類型為void,參數類型為int,輸入帳戶號。
getAccountNumbe獲取帳戶號,返回類型為int,無參數。
caculateBalance計算余額,返回類型為void,參數為double,第一個參數為輸入存取款數額,第二個參數為存款余額,既為輸入也為輸出。
getBalance獲取帳戶余額,返回類型為double,無參數。
許多銀行儲戶組成了儲戶庫。ATM系統包含了許多ATM機。銀行儲戶及ATM機兩個類包含哪些屬性,哪些操作,它們的可見性及操作的返回類型、參數個數、參數類型從類圖上都一目了然。更多的屬性及操作都可以一一加上,使這個類圖更詳細更完整,從而使參與項目的每個成員都能無歧義的明了整個設計的類的結構。同樣對于一個真正的銀行系統,這個類圖過于簡單。比如帳戶類型我們可以先定義一個abstractclass,它包含一個帳戶最基本的屬性及操作。而有些操作先定義為abstract,如余額的計算。然后再繼承這個abstractclass,我們可以有savingaccount和checkingaccount等等。不同的帳戶有不同的余額計算方法,我們可以加上具體的算法。對于不同的帳戶可能還有一些它特有的操作,我們也可以加上,比如savingaccount在存款達到多少時可以享受機票打折的優惠。對于此UML實例通過類圖不僅可以使設計者明確的表達自己的設計意圖,也能幫組自己整理思路,充實及優化自己的設計。
圖1.2銀行系統類圖
1.3順序圖
再來看一下UML實例中的順序圖,圖1.3描述了顧客在ATM機上取款時信息的流動情況。以時間為順序。因為僅是示例,所以整個過程是沒有出現任何故障時的流程,并且只畫到了取款結束。通過這個圖,我們可以看出消息是如何在系統中不同對象之間進行交互。
通過流程圖我們可以很清楚地看到系統是如何工作的,系統各部分之間的信息及控制是如何發送的,整個流程是否合理。流程圖對我們的設計起到了很好的幫助作用。注意在本圖沒有一個生命線終端有一個"X",這是因為這個流程中還未遇到有對象生命結束。當有對象生命結束時需在對應的生命線終端畫"X",表明這個對象在這時被銷毀。
首先銀行儲戶將ATM卡插入讀卡機,讀卡機將信息傳給客戶管理,客戶管理提出查詢密碼,顯示部分將輸入密碼請求顯示出來…..因為這個順序圖較長,且很清晰,即便是初學者也很容易讀懂,在此就不對本圖做過多的解釋。
圖1.3ATM取款順序圖
【編輯推薦】