類
類是封裝了數(shù)據(jù)和行為,是面向對象的重要組成部分,它具有相同屬性、操作關系的對象集合的總稱。在軟件系統(tǒng)運行中類將被實例化成對象(Object),對象就是具體的事物。
類圖
使用出現(xiàn)在系統(tǒng)中的不同類來描述系統(tǒng)的靜態(tài)結構,類圖是來描述不同的類之間的關系。
類圖的結構
public class Employee
{
private String name;
private int age;
private String email;
public void modify()
{
'''
}
}
上面的代碼對應的類圖為
①:一般類圖分為三行,第一行為類名、第二行為類屬性、第三行為類的方法
②:類屬性 可見性 名稱: 類別 [默認值]
可見性:
public +
private -
protected #
③:方法 可見性 名稱(參數(shù)列表)[: 返回類型]
類之間的關系
1、關聯(lián)關系
關聯(lián)關系表示對象與另一個對象之間的聯(lián)系,就好像汽車與輪胎一樣,在UML圖中使用實線連接又關聯(lián)的兩個類。
關聯(lián)關系下面又有很多中類型,分別為
(1)、雙向關聯(lián)
(2)、單向關聯(lián)
(3)、自關聯(lián)
(4)、對重關聯(lián)
(5)、聚合關系
所謂聚合關系,表示整體與部分的關系。通常定義一個主體后,再來分析這個整體類的組成結構。注意,這里的聚合整體與部分之間的生命周期是沒有相互制約的。例如電腦和顯示器、鼠標、屏幕等。這些成員是可以獨立于整體存在的。
汽車類里面有引擎,引擎類是獨立于汽車類的,通過對象注入來實現(xiàn)。
(6)、組合關系
組合關系也是表示類之間整體與部分之間的關系,但是組合和聚合是有區(qū)別的,組合中部分與整體是有統(tǒng)一的生命周期,一旦整體的內存被回收,那么部分對象的內存也會被回收。
如下
public class Head
{
private Mouth mouth;
public Head()
{
mouth=new Mouth();
}
}
public class Mouth
{
...
}
和聚合不太一樣的是,整體的部分象是在整體創(chuàng)建后創(chuàng)建的,如果整體內存被回收,那么部分對象也會被回收。
2、依賴關系
依賴關系是一種使用關系,特定的事物的改變有可能會影響到使用他的該事物。
使用場景
如上圖所示,Driver類中通過參數(shù)傳入Car類的實例對象,通過對象來使用Car類中定義的方法。
3、泛化關系
泛化關系也叫繼承關系,用來描述父類與子類之間的關系。
定義了一個基類Person,有name和age屬性、move和say方法。子類Student不僅繼承了父類還增加了自己的屬性個方法。
4、接口與實現(xiàn)關系
很多語言都引入了接口,但是python沒有接口。一般接口只是定義要實現(xiàn)得方法,而沒有具體得實現(xiàn),當然也不能實例化對象。
類圖實例:
Exp:用戶通過注冊界面輸入個人信息,用戶單擊“注冊”按鈕后將輸入的信息通過一個封裝了
用戶輸入的數(shù)據(jù)的對象(UserDTO)傳遞給操作數(shù)據(jù)庫的數(shù)據(jù)訪問類,為了提高系統(tǒng)的可拓展性,針對不同的數(shù)據(jù)庫使用不同的數(shù)據(jù)訪問類,因此提供數(shù)據(jù)庫訪問類接口,如IUserDAO,每一個具體的數(shù)據(jù)庫訪問類都實現(xiàn)這個接口。
我們可以根據(jù)上面的描述來繪制類圖。
分析:
首先我們要知道題總中都需要哪些類,有注冊類RegisterForm、數(shù)據(jù)傳輸類UserDTO、數(shù)據(jù)庫訪問類MysqlUserDAO、數(shù)據(jù)庫訪問接口類IUserDAO
由于要符合單一職責原則,注冊類只是負責展示注冊界面,允許用戶鍵入信息。所以將用戶數(shù)據(jù)獲取放在UserDTO中。