一、UML


統一建模語言(Unified Modeling Language,UML)是用來設計軟件的可視化建模語言。它的特點是簡單、統一、圖形化、能表達軟件設計種的動態與靜態信息。
UML,從目標系統的不同角度出發,定義了用例圖、類圖、對象圖、狀態圖、活動圖、時序圖、協作圖、構件圖、部署圖等9種圖。
image

一、類圖

1.類圖概述

類圖(Class diagram)是顯示了模型的靜態結構,特別是模型中存在的類,類的內部結構以及它們與其他類的關系等。類圖不顯示暫時性的信息。類圖是面向對象建模的主要組成部分。

2.類圖的作用

在軟件工程中,類圖是一種靜態的結構圖,描述了系統的類的集合,類的屬性和類之間的關系,可以簡化了人們對系統的理解。
類圖是系統分析和設計階段的重要產物,是系統編碼和測試的重要模型。

3.類圖表示法

3.1類的表示方式

在UML類圖中,類使用包含類名、屬性(filed)和方法(method)且帶有分割線的矩形來表示,比如下圖表示一個Employee類,它包含name,age和address這三個屬性,以及work()方法。
image
屬性/方法名稱前加的加號和減號表示這個屬性/方法的可見性,UML類圖中表示可見性的符合有三種:

  • +:表示public
  • -: 表示private
  • #: 表示protected

屬性的完整表示方式是:可見性 名稱 :類型 [ = 缺省值]
方法的完整表示方式是:可見性 名稱(參數列表) [ : 返回類型]
注意:
1.中括號中的內容表示是可選的
2.也有將類型放在變量名前面,返回值類型放在方法名前面
舉例:
image

3.2類與類之間關系的表示方式

3.2.1關聯關系

關聯關系是對象之間的一種引用關系,用於表示一類對象與另一類對象之間的聯系,如老師和學生、師傅和徒弟、丈夫和妻子等。關聯關系是類與類之間最常用的一種關系,分為關聯關系、聚合關系和組合關系
關聯又可以分為單向關聯,雙向關聯,自關聯。
(1)單向關聯
在UML類圖中單向關聯用一個帶箭頭的實線表示。下圖表示每個顧客都有一個地址,這通過讓Customer類持有一個類型為Address的成員變量類實現。
image
(2)雙向關聯
從下圖中看出,所謂的雙向關聯就是雙方各自持有對方類型的成員變量。在UML圖中,雙向關聯用一個不帶箭頭的直線表示。下圖中在Customer類中維護一個List,表示一個顧客可以購多個商品;在Product類中維護一個Customer類型的成員變量表示這個產品被哪個顧客所購買。
image
(3)自關聯
自關聯在UML類圖中用一個帶有箭頭且指向自身的線表示。下圖的意思就是Node類包含類型為Node的成員變量,也就是"自己包含自己"。【LinkedList底層用到了自關聯】
image

3.2.2聚合關聯

關聯關系的一種,而且它是強關聯關系,是整體和部分之間的關系。如下圖所示,以大學和老師為例,大學屬於整體,老師就屬於部分。
image
關於聚合關系,我們需要知道聚合關系也是通過成員對象來實現的,其中成員對象是整體對象的一部分,但是成員對象可以脫離整體對象而獨立存在。從上圖中可以看到,在大學里面,是有成員的,而且成員還是另外一種類型(即老師)的對象,只不過它是放在了一個集合里面,所以我們才說聚合關系是通過成員對象來實現的;其次,由於大學是一個整體,而老師是部分,也即成員對象,所以很顯然成員對象是整體對象的一部分;最后,一個大學肯定會有多位老師,如果這個大學停辦了,或者說這個大學沒落了,那么老師是還依舊存在的,他還可以到其他的學校繼續任職,所以我們才說成員對象可以脫離整體對象而獨立存在。在UML類圖中,聚合關系可以用帶空心菱形的實線來表示,而且菱形指向整體。在上圖中,老師是屬於部分,大學是屬於整體,所以空心菱形就得指向於大學這一邊

3.2.3組合關系

組合表示類之間的整體與部分的關系,但它是一種更強烈的聚合關系。
在組合關系中,整體對象可以控制部分對象的生命周期,一旦整體對象不存在,部分對象也將不存在,部分對象不能脫離整體對象而存在。例如,頭和嘴的關系,頭屬於整體,嘴屬於部分,沒有了頭,嘴也就不存在了,因為嘴是依賴於頭而存在的。
在UML類圖中,組合關系用帶實心菱形的實線來表示,而且菱形指向整體。對於組合關系而言,如果整體不存在了,那么部分肯定不復存在了。
image

3.2.4依賴關系

依賴關系是一種使用關系(在我們平時定義類的時候特別常用),它是對象之間耦合度最弱的一種關聯關系,是臨時性的關聯。在代碼中,某個類的方法通過局部變量、方法的參數或者對靜態方法的調用來訪問另外一個類(被依賴類)中的某些方法來完成一些職責。
在UML類圖中,依賴關系使用帶箭頭的虛線來表示,箭頭從使用類指向被依賴的類。下圖所示是司機和汽車的關聯關系圖,司機駕駛汽車:
image

3.2.5繼承關系

繼承關系是對象之間耦合度最大的一種關系,表示一般與特殊的關系,是父類與子類之間的關系,是一種繼承關系。當兩個類有了繼承關系之后,如果我們在父類中定義了一個成員,不管是成員變量還是成員方法,那么子類都會繼承過來,所以耦合度就特別高。
在UML類圖中,泛化關系也被稱為繼承關系(也可以說泛化關系表示的其實就是繼承關系),只不過這一塊我沒有單獨去說它。那么,泛化關系在類圖中是如何來表示的呢?泛化關系在UML類圖中是用帶空心三角箭頭的實線來表示的,而且箭頭從子類指向父類。在代碼實現時,使用面向對象的繼承機制來實現泛化關系(或者說繼承關系),這個想必大家應該很熟了。例如,Student類和Teacher類都是Person類的子類,其類圖如下圖所示。
image

3.2.6實現關系

實現關系是接口與實現類之間的關系。在這種關系中,類實現了接口,類中的操作實現了接口中所聲明的所有的抽象操作。
在UML類圖中,實現關系使用帶空心三角箭頭的虛線來表示,箭頭從實現類指向接口。例如,汽車和船實現了交通工具,其類圖如圖所示。在Vehicle上面有一個<<Interface>>這樣的標識,這表明了Vehicle是一個接口,而且,該接口又有兩個子實現類,只因它們上面沒有聲明<<Interface>>。
image

參考鏈接:
【1】使用Emacs敲出UML,PlantUML快速指南
【2】順序圖的語法和功能
【3】軟件設計原則篇:開閉原則
【4】從零開始學習Java設計模式_李阿昀的博客-CSDN博客


免責聲明!

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



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