整合模組化語言UML輕鬆入門之綜合執行個體

來源:互聯網
上載者:User

  "例,比也"(《說文》),本次連載將給出一個利用UML進行建模的完整執行個體,綜合應用前面學到的知識,達到"舉此以例其餘"(元劉壎《隱居通議·歐陽公》)的目的。

  在我國十年前ATM(自動取款機)還是一個很新鮮的事物,現在在城市的大街小巷隨處可見。我們在日常生活中也經常和ATM打交道。本章我們將以簡化的ATM系統為例將前面幾章中學到的使用案例圖、類圖、順序圖、狀態圖、活動圖表及共同作業圖表知識運用到此例中。

  5.1使用案例圖

  參與者"銀行儲戶"和ATM機。簡化後的ATM機僅有取款、存款及其餘功能。其餘功能不做詳細說明。


圖5.1 自動取款機(ATM)系統使用案例圖

  銀行儲戶在ATM機上完成取款、存款及其他業務。

   5.2類圖

  圖5.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機兩個類包含哪些屬性,哪些操作,它們的可見度及操作的傳回型別、參數個數、參數類型從類圖上都一目瞭然。更多的屬性及操作都可以一一加上,使這個類圖更詳細更完整,從而使參與項目的每個成員都能無歧義的明了整個設計的類的結構。同樣對於一個真正的銀行系統,這個類圖過於簡單。比如帳戶類型我們可以先定義一個abstract class,它包含一個帳戶最基本的屬性及操作。而有些操作先定義為abstract,如餘額的計算。然後再繼承這個abstract class,我們可以有saving account 和checking account等等。不同的帳戶有不同的餘額計算方法,我們可以加上具體的演算法。對於不同的帳戶可能還有一些它特有的操作,我們也可以加上,比如saving account在存款達到多少時可以享受機票打折的優惠。通過類圖不僅可以使設計者明確的表達自己的設計意圖,也能幫組自己整理思路,充實及最佳化自己的設計。


圖5.2 銀行系統類別圖

   5.3順序圖

  圖5.3描述了顧客在ATM機上取款時資訊的流動情況。以時間為順序。因為僅是樣本,所以整個過程是沒有出現任何故障時的流程,並且只畫到了取款結束。通過這個圖,我們可以看出訊息是如何在系統中不同對象之間進行互動。

  通過流程圖我們可以很清楚地看到系統是如何工作的,系統各部分之間的資訊及控制是如何發送的,整個流程是否合理。流程圖對我們的設計起到了很好的協助作用。注意在本圖沒有一個生命線終端有一個"X",這是因為這個流程中還未遇到有對象生命結束。當有對象生命結束時需在對應的生命線終端畫"X",表明這個對象在這時被銷毀。

  首先銀行儲戶將ATM卡插入讀卡機,讀卡機將資訊傳給客戶管理,客戶管理提出查詢密碼,顯示部分將輸入密碼請求顯示出來…..因為這個順序圖較長,且很清晰,即便是初學者也很容易讀懂,在此就不對本圖做過多的解釋。


圖5.3 ATM取款順序圖

  5.4狀態圖

  圖5.4描述了顧客在ATM機上進行操作會經曆的幾種狀態,及各種狀態之間轉換的條件。因為是簡化了的例子,所以除了等待顧客插入磁卡的起始狀態和結束服務的終止狀態,顧客會處於輸入密碼、選擇服務類型、存款及取款四種狀態。


圖5.4 ATM狀態圖

  插入磁卡後進入輸密碼狀態,當密碼輸入正確時進入選擇服務類型狀態,當輸入密碼不正確時,停留在原狀態,但如果三次不正確,服務結束。進入選擇服務類型後根據選擇的不同,顧客可進入存款和取款狀態。存、取款結束後,顧客既可以選擇結束服務到最終狀態,也可以選擇繼續服務回到選擇服務類型狀態。

  通過狀態圖我們可以無歧義的瞭解各個活動角色是如何在不同狀況下轉換的,轉換的條件是什麼,是否會出現死結現象,是否有條件沒考慮周全,是否有狀態無法達到。狀態圖可以協助我們發現問題,並及時改正。

   5.5活動圖表

  圖5.5參考了Randy Miller的《A Hands-On Introduction for Developers》一文,5.3圖中的客戶管理和事物管理對應於5.5圖中的Bank,圖5.3中的讀卡機、顯示、輸入裝置及點鈔機對應於5.5圖中的ATM Machina,銀行儲戶就是Customer。初看活動圖表和順序圖表達的意義很接近。但我們可以注意到順序圖著重時間的順序,而活動圖表側重於各部分之間的相互制約,對於一些並行的活動能夠有效表示出來。例如5.5圖中fork和join處,我們可以很清楚的看到一些並行活動的存在。

  這個活動圖表以顧客插入卡為開始,以顧客取卡結束。我們可以看到活動圖表的重點雖然不在時間順序,但我們同樣可以得到時間的資訊。


圖5.5 ATM銀行系統活動圖表

   5.6共同作業圖表

  在第四章中我們知道共同作業圖表和順序圖是可以無資訊損失的相互轉換,只是它們的側重點是不一樣的。順序圖著重於對象間訊息傳遞的時間順序,共同作業圖表著重於表達對象之間的靜態串連關係。圖5.6將5.3圖轉換為共同作業圖表。

  1.插入ATM卡

  2.接受ATM卡

  3.查詢密碼

  4.顯示輸入密碼請求

  5.輸入密碼

  6.密碼傳遞

  7.請求確認密碼合法性

  8.確認密碼合法性

  9.詢問服務類別

  10.顯示輸入服務服務類別請求

  11.輸入取款請求

  12.取款請求

  13.詢問取款數額

  14.顯示輸入數額請求

  15.輸入取款數額

  16.傳遞取款數額

  17.詢問取款數額確認

  18.顯示確認數額請求

  19.輸入確認

  20.傳遞確認資訊

  21.數額合法性確認請求

  22.確認數額和法性

  23.出鈔請求

  24.計算帳戶餘額

  25.出鈔

  26.取鈔

  27.傳遞餘額並詢問是否還需要其他服務

  28.顯示帳戶餘額並提示選擇下面的服務


圖5.6 ATM系統共同作業圖表

  從圖上我們可以看出共同作業圖表的角色和順序圖的對象是一一對應的,而共同作業圖表上的各對象上的協作關係和順序圖上的訊息傳遞是一一對應的。



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。