類結構的表示方式:類圖(Class Diagram)

以下示例:sql

類(Class)封裝了數據和行爲,是面向對象的重要組成部分,它是具備相同屬性、操做、關係的對象集合的總稱。數據庫

 

類通常由三部分組成:

類名(Class):每一個類都必須有一個名字,類名是一個字符串。 工具

屬性(Attributes):屬性是指類的性質,即類的成員變量。類能夠有任意多個屬性,也能夠沒有屬性。spa

  UML中:可見性 名稱:類型 [= 默認值]設計

操做(Operations):操做是類的任意一個實例對象均可以使用的行爲,操做是類的成員方法。orm

  UML中:可見性 名稱(參數名):返回值對象

 

接下來咱們看一下類的關係:

要注意uml中的關係是面向對象關係。若是不以面向對象的思惟去考慮會感受到有不少關係認爲是同樣的。繼承

 

關聯關係(Association)

一般關聯關係用來實現鏈接有關聯的對象所對應的類,即將一個類的對象做爲另外一個類的屬性。接口

還有就是關聯關係能夠是單向的也能夠是雙向的。雙向的符號是沒有方向標的,只是一條直線。ip

例:

單向:

雙向:

本身:

多重性關聯關係:

例:

 

在這裏要注意,看完此圖中1…1之後不要認爲一個Form是對應一個Button的。

不是的,應該是一個Button是對應一個Form的。1..1是表示另外一個類的一個對象只與一個該類對象有關係。記住上面的表格。是另外一個類與該類是什麼關係。

 

聚合關係(Aggregation)

表示總體與部分的關係。考慮到一個總體類的組成結構。找出成員類。即成員對象是總體對象的一部分,可是成員對象能夠隊裏總體對象獨立存在。因此也有人說此關係是一種弱關係,那麼強關係是什麼後面咱們會降到組成關係。

聚合關係有一個特色,那就是可替換

 

直觀的來看此圖Car中必須得有一個Engine,這樣才能夠認爲是一個完總體。

可是這個Engine是可替換的。是以傳參的形式給Car賦一個Engine。

再次強調一下聚合是可替換的。Car中必須有一個Engine,可是此Engine能夠是一個抽象的具體的Engine是在當你使用Car時能夠具體去找一個合適的Engine裝到Car上就行,若是沒有Engin那麼這個Car是跑不了。

 

組合關係(Composition)

表示總體與部分的關係。可是與聚合不一樣此關係是總體與部分是同生共死關係。即若是總體對象銷燬了部分也會被銷燬。

 

上圖Head是總體Mouth是部分,若是Head沒了Mouth也跟着銷燬了。若是Mouth沒了Head也將是面目全非。在代碼中Head中Mouth是直接new出來的。

就是說當你去new Head時Mouth也被new出來。記住一同建立一同銷燬關係。也叫強關係。那麼有人會問關聯,聚合,組合我怎麼認爲是同樣呢。

能夠說他們是同樣的均可以說是關聯關係,是的,可是關聯關係的強弱來區分了一下關聯關係強度來看組合>聚合>關聯

 

依賴關係(Dependency)

是一個使用關係。特定事物的改變有可能會影響到使用該事物的其餘事物。簡單說在一個類中經過另一個類來調用其方法的表示。

從圖中能夠看出Driver中使用了Car的move方法。那麼就說明Driver是依賴於Car才能作Driver的職責。那麼又有人會問聚合與依賴有區別嗎,固然很明顯Driver是一個總體,Car也是總體。不是總體與部分關係。

 

泛化關係(Generalization)

繼承(extends)關係,父類與子類關係。這個好理解直接上圖。

從圖中能夠看出Student也是Person,Teacher也是Person。他們有共同的特徵name,age。可是也有獨自的特徵一個是study一個是teach的特徵。

子類那麼就是Student,Teacher父類是Person。繼承了父類那麼子類能夠直接適用父類的方法或屬性(家產)。

 

實現關係(Realization):

類實現(implements)了接口.當多個類有相似的行爲方式的時候咱們一般會適用接口。

Ship,Car都有move的特徵他們都屬於交通工具(Vehicle)只是他們move的方式不同。那麼咱們就能夠適用接口實現的方式去設計。代碼中是public class Car implements Vehicle

 

好咱們來看一下一個完整的類圖例子:

 

回顧一下以前關係。去分析一下此UML的類圖。

用戶經過註冊界面(RegisterForm)輸入我的信息,
用戶點擊「註冊」按鈕後將輸入的信息經過一個封裝用戶輸入數據的對象(UserDTO)傳遞給操做數據庫的數據訪問類(DAO),
爲了提升系統的擴展性,針對不一樣的數據庫可能須要提供不一樣的數據訪問類,所以提供了數據訪問類接口,
如IUserDAO,每個具體數據訪問類都是某一個數據訪問類接口的實現類,
如OracleUserDAO就是一個專門用於訪問Oracle數據庫的數據訪問類。

UserDTO只是把userAcount,userPassword封裝了一下使用了Getter,Setter。

那麼確定是RegisterForm的成員,註冊窗體不能沒有用戶名與密碼信息因此是組合關係。RegisterForm沒有了用戶信息(UserDTO)那麼就沒有意義了。

而後IUserDAO與RegisterForm是聚合關係由於是能夠替換的。好比說你可使用Oracle的之後擴展成Mysql的那麼能夠方便替換。

考慮到從此會擴展UserDAO因此適用了接口。

IUserDAO爲何與UserDTO是依賴關係,由於IUserDAO要把用戶信息保存到數據庫中那麼必須須要用戶信息。若是沒有了用戶信息此工做沒法完成因此是依賴關係。

相關文章
相關標籤/搜索