UML类图简介及类与类之间的关系
UML(Unified Modeling Language,統一建模語言)建模是面向對象開發設計方法中的第一步,用UML來表達設計模式不僅方便了開發人員的交流,而且更加清晰、準確。UML定義了5類10種模型圖,每種圖都有其不同的目的,說明了不同實體集合之間的關系,如下表:
由于在后面設計模式的學習中會大量的用到類圖,所以這里只對類圖進行簡單的介紹
UML類圖中的基本元素符號
1. 類
類的UML圖有3部分組成。
第一個部分是定義的類名,如果類名是用斜體字形表示,則表示該類是抽象類,否則就是具體的類。
第二部分是屬性,第三部分是方法。在屬性和方法之前均可附加一個訪問權限修飾符。加號(+)代表public;減號(-)代表private;#代表protected;沒有任何修飾符表示訪問權限是友好的,修飾符為friendly,但是需注意在java中是沒有friendly修飾符的。如果屬性或方法具有下劃線,則表明它是靜態的。如果在一個類圖中只想顯示高層細節,那么下面的兩部分信息(屬性和方法)不是必要的。
2. 接口
第一部分是接口的名稱,必須用斜體字表示,而且頂端要用<<interface>>來修飾;第二部分是常量;第三部分是方法。
3. 注釋
類與類之間的關系
在UML類圖中,類與類之間有以下幾種常見的關系:泛化(Generalization)、實現(Realization)、依賴(Dependency)、關聯(Association)和組合(Composition)
1. 泛化(繼承)
泛化也就是通常所說的繼承關系,也稱“is a kind of”關系。泛化是對象間耦合度最大的一種關系,UML表示法如下:
2. 實現
如果一個類B實現一個接口A的功能,那么類B和類A的關系就是實現,UML表示法如下:
3. 依賴
如果B作為參數被A類在某個方法中使用,則A依賴于B,UML表示法如下:
java代碼示例為:
4. 關聯
如果A類中的成員變量是用B類聲明的變量,即B類作為A類的一個屬性存在,則A關聯與B,UML類圖如下:
java代碼示例為:
public class B {}public class A {private B b;public B getB() {return this.b;}public void setB(B b) {this.b = b;} }另外,除了上述的單向關聯外,還有雙向關聯和自關聯,UML類圖如下:
雙向關聯:
自關聯:
java代碼示例為:
public class Mouse {}public class Computer {private Mouse m;public Mouse getM() {return this.m;}public void setM(Mouse m) {this.m = m;} }5. 聚合
聚合關系是關聯關系的一種(弱關聯),與關聯不同的是聚合體現的是整體和個體的關系,而關聯體現的是兩個處在同一層次的類之間的關系。這里的整體和個體是可以分離的,即個體可以獨立于整體存在,例如電腦和鼠標,二者是一種“has-a”的關系。UML類圖如下:
6. 組合
組合也是關聯的一種(強關聯),與聚合類似,同樣體現的是整體和個體的關系,但這里的整體和個體是不可以分離的,即個體是整體的一部分,例如電腦和CPU。這種關系比聚合更強,是一種“contains-a”的關系,也稱強聚合。一旦整體對象不存在,部分對象也不存在;同樣部分對象不存在,整體對象也無法正常工作,部分和整體具有相同的生命周期。代碼上表現為A類中的成員變量是用B類聲明的變量,并且B對象在A對象創建時創建。UML類圖如下:
java代碼示例為:
實例分析——聊天系統登錄模塊
基于C/S的聊天系統登錄模塊功能描述:
用戶通過登錄頁面(LoginForm)輸入賬號和密碼,系統將輸入的賬號和密碼與存儲在數據庫(User)表中的用戶信息進行比較,驗證用戶輸入是否正確,如果輸入正確,則進入主界面(MainForm),否則提示“輸入錯誤”。
該系統中類的說明表如下:
| LoginForm | 登錄窗口(邊界類) |
| LoginBO | 登錄業務邏輯類,封裝實現登錄功能的業務邏輯(控制類) |
| UserDao | 抽象數據訪問類接口,聲明對user表的數據操作方法(實體類) |
| UserDaoImpl | 具體數據訪問類,實現對user表的數據操作方法(實體類) |
| MainForm | 主窗口(邊界類) |
各類中的方法說明如下表:
| LoginForm類的LoginForm()方法 | LoginForm構造函數,初始化實例成員 |
| LoginForm類的validate()方法 | 界面類的驗證方法,通過調用業務邏輯類LoginBO的validate()方法實現對用戶輸入信息的驗證 |
| LoginBO類的validate()方法 | 業務邏輯類的驗證方法,通過調用數據訪問類的findUserByAccAndPwd()方法驗證用戶輸入信息的合法性 |
| LoginBO類的setUserDao()方法 | 在業務邏輯對象中注入數據訪問對象 |
| UserDao接口的findUserByAccAndPwd()方法 | 業務方法聲明 |
| UserDaoImpl接口的findUserByAccAndPwd()方法 | 業務方法實現,通過用戶輸入的賬號和密碼和數據庫中的信息進行比對 |
UML類圖設計如下:
java代碼粗略實現:
public class LoginForm {private LoginBO login;public LoginForm() {login = new LoginBO;}public boolean validate(String account, String password) {return login.validate(account, password);} }public class LoginBo {@Autowireprivate UserDao userDao;public boolean validate(String account, String password) { if (userDao.findUserByAccAndPwd(account, password)) {return true;}return false;} }public interface UserDao {boolean findUserByAccAndPwd(String account, String password); }public class UserDaoImpl implements UserDao {public boolean findUserByAccAndPwd(String account, String password) {// select * from user where account=#{account} and password=#{password}} }@Test public void TestLogin {// 接收用戶輸入的account和passwordString account;String password;LoginForm loginForm = new LoginForm();if (loginForm.validate(account, password)) {// 進入主界面MainForm} else {// 提示登錄失敗}}總結
以上是生活随笔為你收集整理的UML类图简介及类与类之间的关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 台式您想使用系统还原计算机吗,系统还原功
- 下一篇: 4月22日 常用函数