今天呢,主要是跟大家一起初步回顧和學習一下 UML。以及如何從入門到放棄……
首先跟大家說明一下,選擇跟大家分享UML,我覺得是我做的一個錯誤的選擇……
一、UML簡史
隨着市場所要求的軟件的複雜度不斷增大,軟件開發的方法學也在不斷進化。從沒有方法到簡單的功能分解法,再到數據流/實體關係法。進入20世紀90年代,面向對象分析設計(OOAD)方法學開始受到青睞,許多方法學家紛紛提出了自己的OOAD方法學。流行度比較高的方法學主要有Booch、Shlaer/Mellor、Wirfs-Brock負責驅動設計、Coad/Yourdon、Rumbaugh OMT和Jacobson OOSE。
這種百花齊放的局面帶來了一個問題:各方法學有自己的一套概念、定義和標記符號。造成了混亂,開發人員無從選擇,也妨礙了面向對象分析設計方法學的推廣。於是經過各方努力,1997年11月,OMG 組織(Object Management Group對象管理組織)發佈了統一建模語言(Unified Modeling Language,UML)
UML 是一種爲面向對象開發系統的產品進行說明、可視化、和編制文檔的標準語言
UML 作爲一種模型語言,它使開發人員專注於建立產品的模型和結構
UML 是不同於其他常見的編程語言,如Java等,它是一種繪畫語言,用來做軟件藍圖
UML 提出了一套 統一的,標準的建模符號,用於類的層次結構設計。
二、UML邏輯原理
UML是面向對象程序設計的建模語言。
基本邏輯是很簡單的:
將面向對象程序設計中的元素進行抽象,比如類還是接口,UML中稱之爲事物,就如同積木的基礎形狀。
將元素之間的聯繫關係進行抽象,比如到底是繼承還是組合(聚合),如同積木中的卡扣,可能有多種卡扣連接形式。
事物和關係,這兩者是UML的主體。事物就是面向對象程序設計中的元素,關係則是他們的相互聯繫形式,圖則是按照不同事物的組織形式進而產生的分類。
三、UML組成
上圖是UML的大致基本組成部分,並未全部列舉,只是一個大致的列舉。
事物是是實體抽象化的最終結果,是 UML 構建塊最重要的組成部分。最基本的是類和接口。關係是事物之間的聯繫的抽象分類。有了事物和聯繫,就可以繪製出各種各樣的UML圖。按照他們的邏輯功能性質,又有了圖的分類。
四、UML常用關係
五、UML基本表示法
下面的圖表示的 UML 類,該圖被分爲四個部分。
- 頂端部分被用來命名類。
- 第二個是用來顯示類的屬性。
- 第三部分是用來描述由類執行的操作。
- 第四部分是可選的顯示附加組件。
Student 類的 UML 大致如下:
六、UML 示例
下圖是從網上找的一個 UML 建模的示例。
七、思考
上圖看上去感覺還可以,條理清晰,但是這個東西真的有用嗎?我們需要去學習嗎?
作爲程序員我們做的事情是什麼呢,我們目前在做應該是編寫面嚮對象語言——也就是我們說的“源代碼”。
最初的源代碼是機器語言。程序員在紙帶或者卡片上打孔來表達0和1。後來,發現這個太累了,於是發明了一些助記符,這就是彙編語言。後來抽象級別提升,有高級語言C,面嚮對象語言Java 等。
如果人腦只需要編輯 UML模型就可以實現系統,那麼“模型就是源代碼”。當然最終這個模型也可以是X模型、Y模型。
UML是軟件需求分析、設計的強大工具,並非簡單介紹就可以認知的,學習成本和使用成本其實並不低。從我覺得這個可以分享並着手去學習了之後,個人認爲這個工具的使用簡單瞭解一下就可以,具體要去學習的應該是它的思想:如何去建模。至於根據 UML 生成代碼等功能沒有必要去了解,工具會過時,會被淘汰,但是思想可以一直髮光發熱。
今天回顧UML呢,並不是技術分享,就是聊一聊軟件方法。順帶拋出“建模”這個概念。在做一個系統的時候,我們要不要建模、怎樣去建模?很多人說建模是可以帶來競爭優勢的。這個也是我接下來要去了解、驗證和學習的。
Windows建議下載工具: WhiteStarUML
後記:
問大家一個問題:你們覺得編程語言發展的目的是爲了什麼?
個人感覺這個和我爲什麼而工作,爲什麼而加班是一樣的。我工作就是爲了不工作,加班也是爲了不加班。編程語言的發展就是爲了消除編程語言,一直是在追求一種簡單高效的方式去改變這個世界。爲此,當下我覺得軟件方法中的業務建模是很重要的。老大在年終總結上曾說過,有些人工作兩三年可能有行業三到五年的經驗,有些人工作了十年,可能只有兩年的行業經驗。成長是一個不斷審視自己、和自己對話的一個過程。