1. 程式人生 > >UML簡單介紹-如何看懂UML(二)

UML簡單介紹-如何看懂UML(二)

  在計算複雜的數學題時,我們必然會打草稿計算 在繪畫課中,我們可以素描出來看到的事物 那麼在程式設計中呢? 如何描繪傳達你腦海中的關於這個程式 ,設計的藍圖草稿   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中稱之為事物,就如同積木的基礎形狀 將元素之間的聯絡關係進行抽象,比如到底是繼承還是組合(聚合),如同積木中的卡扣,可能有多種卡扣連線形式 image_5bdfa951_4298   而我們看到的UML圖也就是如同一整塊已經搭建好的積木 當然 UML肯定不會向積木那樣簡單,所以自然還會有很多的規則、限制、要求,這些一起構成了完整的UML 但是根本是事物和關係,這兩者是UML的主體   事物就是面向物件程式設計中的元素 關係則是他們的相互聯絡形式 圖則是按照不同事物的組織形式進而產生的分類  

UML組成

image_5bdfa952_5aa5   上圖是UML的大致基本組成部分,部分型別並未全部列舉 事物是是實體抽象化的最終結果,是 UML 構建塊最重要的組成部分 最基本的是類和介面 關係是事物之間的聯絡的抽象分類 有了事物和聯絡,就可以繪製出各種各樣的UML圖 按照他們的邏輯功能性質,又有了圖的分類   UML是軟體需求分析、設計的強大工具,並非簡單介紹就可以認知的 本文重在簡單瞭解基本知識以更好學習設計模式  

UML常用關係

關聯關係使用一條直線表示,比如  A與B關聯 image_5bdfa952_2b22
用於描述不同類的物件之間的結構關係,將多個類的例項聯絡在一起 是一種靜態關係,基本與程式的執行沒有關係 比如,部門與員工的關係,就是關聯關係 關聯關係一般不強調方向,表示互相“知道”對方,也就是存在引用 關聯關係有多重性 比如一對一關聯 一對多關聯等 可以任意關聯N對N關聯 如果特別強調方向,就使用箭頭,比如 image_5bdfa952_cb3 那麼表示A知道B但是B不知道A 也就是說,關聯關係有兩種圖形 直線或者直線箭頭   關聯關係表示存在引用,比如員工類的定義中有“部門”屬性欄位
實現關係是帶空心箭頭的虛線表示的,比如A實現B,箭頭指向父類、介面
image_5bdfa952_5816
實現可以狹隘的認為是一種實現類與父類、介面的關係(其實在UML中實現的含義遠不止實現類這層含義)
泛化關係是帶空心箭頭的直線表示的,比如A繼承B
image_5bdfa952_2a19
用於說明繼承關係
泛化關係是從子類到父類的關係,箭頭指向的是父類
聚合關係是帶空心的菱形的直線表示的,比如 A聚合到B上,也就是B由A組成
image_5bdfa952_4f4a
聚合關係用於類圖,表達整體由部分構成的語義,比如部門由許多人員組成
整體和部分不是強依賴的,即使整體不存在,依然可以存在部分,即使沒有部門,人員仍舊存在
組合關係是帶實心的菱形的直線表示的,比如A組合成B,或者說B由A構成
image_5bdfa952_57ed
表達整體擁有部分的含義,組合關係是一種特殊的強依賴的聚合關係
如果整體不存在,那麼部分也不存在了
比如,汽車由輪胎底盤發動機構成,汽車不存在了,自然也不存在發動機了
依賴關係使用帶箭頭的虛線表示,比如  A依賴B
image_5bdfa952_5dfc
用於描述一個物件在執行期間會使用到另外一個物件的關係
依賴關係是一種臨時性的,簡言之就是不同場景會發生變化
比如人和車
如果是駕駛場景,車依賴人(駕駛員),如果是乘車出行,那就是人依賴車(公交、出租)
很顯然,依賴關係比關聯關係更加弱
依賴關係是一種使用關係
比如一個類的方法中的區域性變數、方法的引數或者對靜態方法的呼叫,都是一種依賴
 

UML類的屬性和方法

類包括類名、屬性、方法 都在類圖中   屬性:可見性  名稱 :型別 [ = 預設值] 方法:可見性  名稱(引數列表) [ : 返回型別] 中括號表示預設的 可見性使用+  -  #表示 + public - private # protected  

常用工具

UML的工具有很多,比如 StarUML 、astah image_5bdfa952_7599   image_5bdfa952_544f astah,前身是JUDE  下圖為astah中的sample 以下圖為例簡單的瞭解下UML的圖形識別符號號   Tracer中與Engine、Steering、Monitor單項關聯,也就是含有引用 與State雙向關聯 Engine與Steering由Motor組成 他們是可以獨立存在的 Monitor由LightSensor組成 他們是可以獨立存在的 Idle OnCourse OutOfCourse 是State的實現類 image_5bdfa952_1ebb Monitor中,Threshold是boolean型別的私有屬性  isBlack和isWhite是返回型別為void的 public方法   image_5bdfa952_4642  

總結

本文簡單介紹了UML的歷史以及組成部分,目的不在於詳細介紹UML,只在於能夠讀懂以及繪製類圖 UML是視覺化的程式設計描繪語言,通過圖形和符號直觀的表達含義 對於類圖需要理解清楚類圖相關的關聯關係 另外,不同的軟體對於各種圖形的表示可能區域性細節會有差別,實際使用時應該注意 UML是Unified Modeling Language ,並不是一種具體的工具,而是標準 UML建模工具就如同“實現類”一樣,細節上有差異也很正常,很多軟體也可以調整顯式的式樣,比如StarUML就可以