在計算複雜的數學題時,咱們必然會打草稿計算
在繪畫課中,咱們能夠素描出來看到的事物
那麼在程序設計中呢?
如何描繪傳達你腦海中的關於這個程序 ,設計的藍圖草稿?
OOP的程序設計中,最多的天然是類、接口層次接口的設計
簡單的設計,可能在腦海中想象下就過了,好比A繼承B
可是複雜的呢?
對於OOP程序設計中,類的層次、關係設計如何描繪?
用文字麼? A繼承B A實現C,A中有一個D的引用
顯然,圖形化的方式更加直觀,簡潔
那麼到底如何表示OOP中的事物與關係?每一個人有每一個人的書寫方式,如何進行交流?
你畫了一個三角形說這是一個接口,我花了一個圓形,跟你講這個是接口?這其中的問題不言而喻。
UML起源
1997年,OMG 組織(Object Management Group對象管理組織)發佈了統一建模語言(Unified Modeling Language,UML)
UML 是一種爲面向對象開發系統的產品進行說明、可視化、和編制文檔的標準語言
UML 做爲一種模型語言,它使開發人員專一於創建產品的模型和結構
UML 是不一樣於其餘常見的編程語言,如Java等,它是一種繪畫語言,用來作軟件藍圖
UML 提出了一套 統一的,標準的建模符號
首先它提供了一套建模符號,用於類的層次結構設計
另外,統一的也就意味着只要按照標準構圖,就能夠無障礙的經過UML圖進行溝通
計算機軟件的世界裏面,老是「分久必合」,UML的發展歷史也不例外
UML 統一了Booch、OMT、OOSE和其餘面向對象方法所涉及的基本概念和建模符號
UML的發展不是一蹴而就的,而是吸取了現有的精華,而發展出來的大一統的形式
UML邏輯原理
UML是面向對象程序設計的描繪語言
是面向對象程序設計的建模語言,是對面向對象程序設計世界的抽象
UML的基本邏輯是很簡單的
將面向對象程序設計中的元素進行抽象,好比類仍是接口,UML中稱之爲事物,就如同積木的基礎形狀
將元素之間的聯繫關係進行抽象,好比究竟是繼承仍是組合(聚合),如同積木中的卡扣,可能有多種卡扣鏈接形式
而咱們看到的UML圖也就是如同一整塊已經搭建好的積木
固然
UML確定不會向積木那樣簡單,因此天然還會有不少的規則、限制、要求,這些一塊兒構成了完整的UML
可是根本是事物和關係,這二者是UML的主體
事物就是面向對象程序設計中的元素
關係則是他們的相互聯繫形式
圖則是按照不一樣事物的組織形式進而產生的分類
UML組成
上圖是UML的大體基本組成部分,部分類型並未所有列舉
事物是是實體抽象化的最終結果,是 UML 構建塊最重要的組成部分
最基本的是類和接口
關係是事物之間的聯繫的抽象分類
有了事物和聯繫,就能夠繪製出各類各樣的UML圖
按照他們的邏輯功能性質,又有了圖的分類
UML是軟件需求分析、設計的強大工具,並不是簡單介紹就能夠認知的
本文重在簡單瞭解基本知識以更好學習設計模式
UML經常使用關係
關聯關係使用一條直線表示,好比 A與B關聯

用於描述不一樣類的對象之間的結構關係,將多個類的實例聯繫在一塊兒
是一種靜態關係,基本與程序的運行沒有關係
好比,部門與員工的關係,就是關聯關係
關聯關係通常不強調方向,表示互相「知道」對方,也就是存在引用
關聯關係有多重性 好比一對一關聯 一對多關聯等 能夠任意關聯N對N關聯
若是特別強調方向,就使用箭頭,好比
那麼表示A知道B可是B不知道A
也就是說,關聯關係有兩種圖形
直線或者直線箭頭
關聯關係表示存在引用,好比員工類的定義中有「部門」屬性字段
|
實現關係是帶空心箭頭的虛線表示的,好比A實現B,箭頭指向父類、接口
 實現能夠狹隘的認爲是一種實現類與父類、接口的關係(其實在UML中實現的含義遠不止實現類這層含義) |
泛化關係是帶空心箭頭的直線表示的,好比A繼承B
 用於說明繼承關係 泛化關係是從子類到父類的關係,箭頭指向的是父類 |
聚合關係是帶空心的菱形的直線表示的,好比 A聚合到B上,也就是B由A組成
 聚合關係用於類圖,表達總體由部分構成的語義,好比部門由許多人員組成 總體和部分不是強依賴的,即便總體不存在,依然能夠存在部分,即便沒有部門,人員仍舊存在 |
組合關係是帶實心的菱形的直線表示的,好比A組合成B,或者說B由A構成
 表達總體擁有部分的含義,組合關係是一種特殊的強依賴的聚合關係 若是總體不存在,那麼部分也不存在了 好比,汽車由輪胎底盤發動機構成,汽車不存在了,天然也不存在發動機了 |
依賴關係使用帶箭頭的虛線表示,好比 A依賴B
 用於描述一個對象在運行期間會使用到另一個對象的關係 依賴關係是一種臨時性的,簡言之就是不一樣場景會發生變化 好比人和車 若是是駕駛場景,車依賴人(駕駛員),若是是乘車出行,那就是人依賴車(公交、出租) 很顯然,依賴關係比關聯關係更加弱 依賴關係是一種使用關係 好比一個類的方法中的局部變量、方法的參數或者對靜態方法的調用,都是一種依賴 |
UML類的屬性和方法
類包括類名、屬性、方法
都在類圖中
屬性:可見性 名稱 :類型 [ = 缺省值]
方法:可見性 名稱(參數列表) [ : 返回類型]
中括號表示缺省的
可見性使用+ - #表示
+ public
- private
# protected
經常使用工具
UML的工具備不少,好比 StarUML 、astah
astah,前身是JUDE
下圖爲astah中的sample
如下圖爲例簡單的瞭解下UML的圖形標識符號
Tracer中與Engine、Steering、Monitor單項關聯,也就是含有引用
與State雙向關聯
Engine與Steering由Motor組成 他們是能夠獨立存在的
Monitor由LightSensor組成 他們是能夠獨立存在的
Idle OnCourse OutOfCourse 是State的實現類
Monitor中,Threshold是boolean類型的私有屬性
isBlack和isWhite是返回類型爲void的 public方法
總結
本文簡單介紹了UML的歷史以及組成部分,目的不在於詳細介紹UML,只在於可以讀懂以及繪製類圖
UML是可視化的程序設計描繪語言,經過圖形和符號直觀的表達含義
對於類圖須要理解清楚類圖相關的關聯關係
另外,不一樣的軟件對於各類圖形的表示可能局部細節會有差異,實際使用時應該注意
UML是Unified Modeling Language ,並非一種具體的工具,而是標準
UML建模工具就如同「實現類」同樣,細節上有差別也很正常,不少軟件也能夠調整顯式的式樣,好比StarUML就能夠