在計算復雜的數學題時,我們必然會打草稿計算
在繪畫課中,我們可以素描出來看到的事物
那么在程序設計中呢?
如何描繪傳達你腦海中的關於這個程序 ,設計的藍圖草稿?
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常用關系
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就可以