深入浅出UML类图(四)
實(shí)例分析1——登錄模塊
????? 某基于C/S的即時(shí)聊天系統(tǒng)登錄模塊功能描述如下:
????? 用戶通過登錄界面(LoginForm)輸入賬號(hào)和密碼,系統(tǒng)將輸入的賬號(hào)和密碼與存儲(chǔ)在數(shù)據(jù)庫(User)表中的用戶信息進(jìn)行比較,驗(yàn)證用戶輸入是否正確,如果輸入正確則進(jìn)入主界面(MainForm),否則提示“輸入錯(cuò)誤”。
????? 根據(jù)以上描述繪制初始類圖。
?
????參考解決方案:
????? 參考類圖如下:
????? 考慮到系統(tǒng)擴(kuò)展性,在本實(shí)例中引入了抽象數(shù)據(jù)訪問接口IUserDAO,再將具體數(shù)據(jù)訪問對象注入到業(yè)務(wù)邏輯對象中,可通過配置文件(如XML文件)等方式來實(shí)現(xiàn),將具體的數(shù)據(jù)訪問類類名存儲(chǔ)在配置文件中,如果需要更換新的具體數(shù)據(jù)訪問對象,只需修改配置文件即可,原有程序代碼無須做任何修改。
????? 類說明:
類? 名 | 說? 明 |
LoginForm | 登錄窗口,省略界面組件和按鈕事件處理方法(邊界類) |
LoginBO | 登錄業(yè)務(wù)邏輯類,封裝實(shí)現(xiàn)登錄功能的業(yè)務(wù)邏輯(控制類) |
IUserDAO | 抽象數(shù)據(jù)訪問類接口,聲明對User表的數(shù)據(jù)操作方法,省略除查詢外的其他方法(實(shí)體類) |
UserDAO | 具體數(shù)據(jù)訪問類,實(shí)現(xiàn)對User表的數(shù)據(jù)操作方法,省略除查詢外的其他方法(實(shí)體類) |
MainForm | 主窗口(邊界類) |
????? 方法說明:
方法名 | 說? 明 |
LoginForm類的LoginForm()方法 | LoginForm構(gòu)造函數(shù),初始化實(shí)例成員 |
LoginForm類的validate()方法 | 界面類的驗(yàn)證方法,通過調(diào)用業(yè)務(wù)邏輯類LoginBO的validate()方法實(shí)現(xiàn)對用戶輸入信息的驗(yàn)證 |
LoginBO類的validate()方法 | 業(yè)務(wù)邏輯類的驗(yàn)證方法,通過調(diào)用數(shù)據(jù)訪問類的findUserByAccAndPwd()方法驗(yàn)證用戶輸入信息的合法性 |
LoginBO類的setIUserDAO()方法 | Setter方法,在業(yè)務(wù)邏輯對象中注入數(shù)據(jù)訪問對象(注意:此處針對抽象數(shù)據(jù)訪問類編程) |
IUserDAO接口的findUserByAccAndPwd()方法 | 業(yè)務(wù)方法聲明,通過用戶賬號(hào)和密碼在數(shù)據(jù)庫中查詢用戶信息,判斷該用戶身份的合法性 |
UserDAO類的findUserByAccAndPwd()方法 | 業(yè)務(wù)方法實(shí)現(xiàn),實(shí)現(xiàn)在IUserDAO接口中聲明的數(shù)據(jù)訪問方法 |
?
-------------------------------------------------------------------------------------------------------
實(shí)例分析2——注冊模塊
????? 某基于Java語言的C/S軟件需要提供注冊功能,該功能簡要描述如下:
????? 用戶通過注冊界面(RegisterForm)輸入個(gè)人信息,用戶點(diǎn)擊“注冊”按鈕后將輸入的信息通過一個(gè)封裝用戶輸入數(shù)據(jù)的對象(UserDTO)傳遞給操作數(shù)據(jù)庫的數(shù)據(jù)訪問類,為了提高系統(tǒng)的擴(kuò)展性,針對不同的數(shù)據(jù)庫可能需要提供不同的數(shù)據(jù)訪問類,因此提供了數(shù)據(jù)訪問類接口,如IUserDAO,每一個(gè)具體數(shù)據(jù)訪問類都是某一個(gè)數(shù)據(jù)訪問類接口的實(shí)現(xiàn)類,如OracleUserDAO就是一個(gè)專門用于訪問Oracle數(shù)據(jù)庫的數(shù)據(jù)訪問類。
????? 根據(jù)以上描述繪制類圖。為了簡化類圖,個(gè)人信息僅包括賬號(hào)(userAccount)和密碼(userPassword),且界面類無需涉及界面細(xì)節(jié)元素。
?
參考解決方案:
????? 在以上功能說明中,可以分析出該系統(tǒng)包括三個(gè)類和一個(gè)接口,這三個(gè)類分別是注冊界面類RegisterForm、用戶數(shù)據(jù)傳輸類UserDTO、Oracle用戶數(shù)據(jù)訪問類OracleUserDAO,接口是抽象用戶數(shù)據(jù)訪問接口IUserDAO。它們之間的關(guān)系如下:
????? (1) 在RegisterForm中需要使用UserDTO類傳輸數(shù)據(jù)且需要使用數(shù)據(jù)訪問類來操作數(shù)據(jù)庫,因此RegisterForm與UserDTO和IUserDAO之間存在關(guān)聯(lián)關(guān)系,在RegisterForm中可以直接實(shí)例化UserDTO,因此它們之間可以使用組合關(guān)聯(lián)。
????? (2) 由于數(shù)據(jù)庫類型需要靈活更換,因此在RegisterForm中不能直接實(shí)例化IUserDAO的子類,可以針對接口IUserDAO編程,再通過注入的方式傳入一個(gè)IUserDAO接口的子類對象(在本書后續(xù)章節(jié)中將學(xué)習(xí)如何具體實(shí)現(xiàn)),因此RegisterForm和IUserDAO之間具有聚合關(guān)聯(lián)關(guān)系。
????? (3) OracleUserDAO是實(shí)現(xiàn)了IUserDAO接口的子類,因此它們之間具有類與接口的實(shí)現(xiàn)關(guān)系。
????? (4) 在聲明IUserDAO接口的增加用戶信息方法addUser()時(shí),需要將在界面類中實(shí)例化的UserDTO對象作為參數(shù)傳遞進(jìn)來,然后取出封裝在UserDTO對象中的數(shù)據(jù)插入數(shù)據(jù)庫,因此addUser()方法的函數(shù)原型可以定義為:public boolean addUser(UserDTO user),在IUserDAO的方法addUser()中將UserDTO類型的對象作為參數(shù),故IUserDAO與UserDTO存在依賴關(guān)系。
????? 通過以上分析,該實(shí)例參考類圖如圖1所示:
圖1? 注冊功能參考類圖
????? 注意:在繪制類圖或其他UML圖形時(shí),可以通過注釋(Comment)來對圖中的符號(hào)或元素進(jìn)行一些附加說明,如果需要詳細(xì)說明類圖中的某一方法的功能或者實(shí)現(xiàn)過程,可以使用如圖2所示表示方式:
圖2 ?類圖注釋實(shí)例
【轉(zhuǎn)自:劉偉 ?http://blog.csdn.net/lovelion】
轉(zhuǎn)載于:https://blog.51cto.com/asmxpl/1424715
總結(jié)
以上是生活随笔為你收集整理的深入浅出UML类图(四)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring 源代码地址
- 下一篇: iOS 带IAP提交注意事项及无法sub