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就可以
 
 
 


免責聲明!

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



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