UML類圖(三)-------實例


實例分析1——登錄模塊

      某基於C/S的即時聊天系統登錄模塊功能描述如下:

      用戶通過登錄界面(LoginForm)輸入賬號和密碼,系統將輸入的賬號和密碼與存儲在數據庫(User)表中的用戶信息進行比較,驗證用戶輸入是否正確,如果輸入正確則進入主界面(MainForm),否則提示“輸入錯誤”。

      根據以上描述繪制初始類圖。

 

    參考解決方案:

 

      參考類圖如下:

      考慮到系統擴展性,在本實例中引入了抽象數據訪問接口IUserDAO,再將具體數據訪問對象注入到業務邏輯對象中,可通過配置文件(如XML文件)等方式來實現,將具體的數據訪問類類名存儲在配置文件中,如果需要更換新的具體數據訪問對象,只需修改配置文件即可,原有程序代碼無須做任何修改。

      類說明:

類  名

說  明

LoginForm

登錄窗口,省略界面組件和按鈕事件處理方法(邊界類)

LoginBO

登錄業務邏輯類,封裝實現登錄功能的業務邏輯(控制類)

IUserDAO

抽象數據訪問類接口,聲明對User表的數據操作方法,省略除查詢外的其他方法(實體類)

UserDAO

具體數據訪問類,實現對User表的數據操作方法,省略除查詢外的其他方法(實體類)

MainForm

主窗口(邊界類)

      方法說明:

方法名

說  明

LoginForm類的LoginForm()方法

LoginForm構造函數,初始化實例成員

LoginForm類的validate()方法

界面類的驗證方法,通過調用業務邏輯類LoginBO的validate()方法實現對用戶輸入信息的驗證

LoginBO類的validate()方法

業務邏輯類的驗證方法,通過調用數據訪問類的findUserByAccAndPwd()方法驗證用戶輸入信息的合法性

LoginBO類的setIUserDAO()方法

Setter方法,在業務邏輯對象中注入數據訪問對象(注意:此處針對抽象數據訪問類編程)

IUserDAO接口的findUserByAccAndPwd()方法

業務方法聲明,通過用戶賬號和密碼在數據庫中查詢用戶信息,判斷該用戶身份的合法性

UserDAO類的findUserByAccAndPwd()方法

業務方法實現,實現在IUserDAO接口中聲明的數據訪問方法

 

微笑-------------------------------------------------------------------------------------------------------微笑

實例分析2——注冊模塊

      某基於Java語言的C/S軟件需要提供注冊功能,該功能簡要描述如下:

      用戶通過注冊界面(RegisterForm)輸入個人信息,用戶點擊“注冊”按鈕后將輸入的信息通過一個封裝用戶輸入數據的對象(UserDTO)傳遞給操作數據庫的數據訪問類,為了提高系統的擴展性,針對不同的數據庫可能需要提供不同的數據訪問類,因此提供了數據訪問類接口,如IUserDAO,每一個具體數據訪問類都是某一個數據訪問類接口的實現類,如OracleUserDAO就是一個專門用於訪問Oracle數據庫的數據訪問類。

      根據以上描述繪制類圖。為了簡化類圖,個人信息僅包括賬號(userAccount)和密碼(userPassword),且界面類無需涉及界面細節元素。

 

 

 

參考解決方案:

 

      在以上功能說明中,可以分析出該系統包括三個類和一個接口,這三個類分別是注冊界面類RegisterForm、用戶數據傳輸類UserDTO、oracle用戶數據訪問類OracleUserDAO,接口是抽象用戶數據訪問接口IUserDAO。它們之間的關系如下:

      (1) 在RegisterForm中需要使用UserDTO類傳輸數據且需要使用數據訪問類來操作數據庫,因此RegisterForm與UserDTO和IUserDAO之間存在關聯關系,在RegisterForm中可以直接實例化UserDTO,因此它們之間可以使用組合關聯。

      (2) 由於數據庫類型需要靈活更換,因此在RegisterForm中不能直接實例化IUserDAO的子類,可以針對接口IUserDAO編程,再通過注入的方式傳入一個IUserDAO接口的子類對象(在本書后續章節中將學習如何具體實現),因此RegisterForm和IUserDAO之間具有聚合關聯關系。

      (3) OracleUserDAO是實現了IUserDAO接口的子類,因此它們之間具有類與接口的實現關系。

      (4) 在聲明IUserDAO接口的增加用戶信息方法addUser()時,需要將在界面類中實例化的UserDTO對象作為參數傳遞進來,然后取出封裝在UserDTO對象中的數據插入數據庫,因此addUser()方法的函數原型可以定義為:public boolean addUser(UserDTO user),在IUserDAO的方法addUser()中將UserDTO類型的對象作為參數,故IUserDAO與UserDTO存在依賴關系。

      通過以上分析,該實例參考類圖如圖1所示:

圖1  注冊功能參考類圖

      注意:在繪制類圖或其他UML圖形時,可以通過注釋(Comment)來對圖中的符號或元素進行一些附加說明,如果需要詳細說明類圖中的某一方法的功能或者實現過程,可以使用如圖2所示表示方式:

圖2  類圖注釋實例

實例分析3——售票機控制程序

      某運輸公司決定為新的售票機開發車票銷售的控制軟件。圖I給出了售票機的面板示意圖以及相關的控制部件。

圖I   售票機面板示意圖

      售票機相關部件的作用如下所述:

      (1) 目的地鍵盤用來輸入行程目的地的代碼(例如,200表示總站)。

      (2) 乘客可以通過車票鍵盤選擇車票種類(單程票、多次往返票和座席種類)。

      (3) 繼續/取消鍵盤上的取消按鈕用於取消購票過程,繼續按鈕允許乘客連續購買多張票。

      (4) 顯示屏顯示所有的系統輸出和用戶提示信息。

      (5) 插卡口接受MCard(現金卡),硬幣口和紙幣槽接受現金。

      (6) 打印機用於輸出車票。

      (7) 所有部件均可實現自檢並恢復到初始狀態。

      現采用面向對象方法開發該系統,使用UML進行建模,繪制該系統的初始類圖。

 

 

    參考解決方案:

 

      參考類圖如下:

      類說明:

類  名

說  明

Component

抽象部件類,所有部件類的父類

Keyboard

抽象鍵盤類

ActionKeyboard

繼續/取消鍵盤類

TicketKindKeyboard

車票種類鍵盤類

DestinationKeyboard

目的地鍵盤類

Screen

顯示屏類

CardDriver

卡驅動器類

CashSlot

現金(硬幣/紙幣)槽類

Printer

打印機類

TicketSoldSystem

售票系統類

      方法說明:

方法名

說  明

Component 的init()方法

初始化部件

Component 的doSeltTest()方法

自檢

Keyboard的getSelectedKey()方法

獲取按鍵值

ActionKeyboard的getAction()方法

繼續/取消鍵盤事件處理

TicketKindKeyboard的getTicketKind()方法

車票種類鍵盤事件處理

DestinationKeyboard的getDestinationCode()方法

目的地鍵盤事件處理

Screen的showText()方法

顯示信息

CardDriver的getCredit()方法

獲取金額

CardDriver的debitFare()方法

更新卡余額

CardDriver的ejectMCard()方法

退卡

CashSlot的getCredit()方法

獲取金額

Printer的printTicket()方法

打印車票

Printer的ejectTicket()方法

出票

TicketSoldSystem的verifyCredit()方法

驗證金額

TicketSoldSystem的calculateFare()方法

計算費用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM