分析設計之類圖


類圖(Class Diagram):

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

 

類一般由三部分組成:

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

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

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

操作(Operations):操作是類的任意一個實例對象都可以使用的行為,操作是類的成員方法。

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

 

接下來我們看一下類的關系:

要注意uml中的關系是面向對象關系。如果不以面向對象的思維去考慮會感覺到有很多關系認為是一樣的。

 

關聯關系(Association)

通常關聯關系用來實現連接有關聯的對象所對應的類,即將一個類的對象作為另一個類的屬性。

還有就是關聯關系可以是單向的也可以是雙向的。雙向的符號是沒有方向標的,只是一條直線。

例:

單向:

雙向:

自己:

多重性關聯關系:

例:

 

在這里要注意,看完此圖中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要把用戶信息保存到數據庫中那么必須需要用戶信息。如果沒有了用戶信息此工作無法完成所以是依賴關系


免責聲明!

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



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