一、前言
談到面向?qū)ο蠹夹g(shù)的分析和設(shè)計,自然就離不開 UML。對于 UML 這個概念,很多程序員朋友耳熟能詳,也有在用,但在工作中,一些朋友其實并不擅長使用 UML 甚至對 UML 這個東西模棱兩可,也包括我自己。因此我希望可以結(jié)合自己的經(jīng)驗和實踐,寫一篇 UML 的入門文章,幫助做面向?qū)ο蟮某绦騿T朋友能更好的利用它,從而順利完成自己的編程設(shè)計工作。
以下是本文大綱。
二、從一個示例開始
先舉個現(xiàn)實世界的例子。我們上大學(xué)的時候,作為學(xué)生,每人都有一張學(xué)生證,會歸屬到一個班級,上學(xué)時可能會用到自行車。很多同學(xué)還會考駕照,挑放假時間練車,車可能是轎車也可能是皮卡。
如果想通過在線的方式記錄以上的信息和行為,在軟件世界中如何表達(dá)呢?
相信很多朋友的操作是,找到這段話里的主語和賓語,也就找到了這個例子中涉及的角色,然后通過動詞來判斷各個角色之間的關(guān)系和能力,最后用代碼的方式來表達(dá),產(chǎn)出可執(zhí)行的程序。
像下圖這樣,識別出關(guān)鍵的實體和它們之間的關(guān)系。
用軟件工程的方式,解決現(xiàn)實中的問題,是信息時代最明顯的特點,這讓我們的生活和工作變得更加便利。
但現(xiàn)實世界錯綜復(fù)雜,靈活多變,每個人的理解可能會有不同,從現(xiàn)實世界到軟件世界的映射,就變得困難重重,一團(tuán)亂麻。
如何讓現(xiàn)實世界到軟件世界映射變的簡單容易,這就是 UML 要解決的問題。
三、什么是 UML?
UML 全稱是 Unified Modeling Language(統(tǒng)一建模語言),它以圖形的方式來描述軟件的概念。
3.1 為什么稱為語言
先說語言,為什么稱為語言?
名稱的落腳點是語言。既然是語言,那么它就會具備語言的特性,比如結(jié)構(gòu)上它由詞匯和語法構(gòu)成,功能上它能解決溝通問題。
你熟知的語言里比較多的應(yīng)該是漢語和英語,如果從事軟件行業(yè),C 語言和 Java 語言你應(yīng)該也不會陌生。英語和 Java 語言明顯都是語言,卻常常不被放在一起討論,為什么?因為它們是不同維度的語言。英語是解決現(xiàn)實世界中人與人之間溝通問題的人類語言,Java 是解決軟件世界中程序員與計算機(jī)之間溝通問題的計算機(jī)語言。
人類語言本質(zhì)上是事實和觀點的表達(dá),計算機(jī)語言本質(zhì)上是0 和 1 的表達(dá)。前者的表達(dá)形式是難以確定的,而且可能會產(chǎn)生歧義,所以才會有「被誤解是表達(dá)者的宿命」這樣的觀點, 但后者就是確定性無歧義的 0 1 表達(dá)。
這么看來,UML 的目標(biāo)是通過一定結(jié)構(gòu)的表達(dá),來解決現(xiàn)實世界到軟件世界的溝通問題。
3.2 什么是建模
再說建模,模是什么,需要怎么建?
建模簡單講,是指通過抽象的方式解決某個領(lǐng)域的問題。各個抽象角度共同組成了一個問題領(lǐng)域。
對于傳統(tǒng)模型而言,建造它是為了證明這個問題領(lǐng)域下某件事物能否工作。當(dāng)然它有前提,即建造模型的成本遠(yuǎn)遠(yuǎn)低于建造實物的成本。比如造飛機(jī)或造高樓。
對于軟件模型而言,建造它是為了與他人溝通,也為了保存這個問題領(lǐng)域下軟件設(shè)計的最終成果。當(dāng)然它也有前提,就是模型比代碼更說明問題。
比如購物這個問題,甲可以在淘寶上買衣服,乙可以在亞馬遜上買書,丙可以在京東上買手機(jī)。
誰買東西?是甲、乙和丙,他們都能抽象成人。
買什么東西?有衣服、書和手機(jī),它們都能抽象成貨。
在哪里買?在淘寶,亞馬遜和京東,它們都能抽象成場。
整體抽象一下就是人到場里買貨。所以購物這個場景所抽象出來的人貨場,就用來解決零售領(lǐng)域的問題。當(dāng)然還可能會有些規(guī)則,比如成為注冊會員才能發(fā)生交易。
我們會發(fā)現(xiàn),一個特定的事件(比如購物)里,會有特定的人的行為(比如甲乙丙要上電商網(wǎng)站),會有特定的物(比如貨),有特定的規(guī)則(比如注冊會員),共同完成購物這件事。
特定的事 = 特定的人的行為 + 特定的物 + 特定的規(guī)則
在人貨場這個抽象角度里,就會涉及到很多特定的事,包括會員注冊,會員下單,會員支付,商家發(fā)貨,快遞公司郵寄等等。
模簡單講,就是人、事、物和規(guī)則。
人是一切的中心,人要做事,做事就會使用一些物并產(chǎn)生另一些物,同時做事需要遵循一定的規(guī)則。
人驅(qū)動系統(tǒng),事體現(xiàn)過程,物記錄結(jié)果,規(guī)則是控制。
建立模型的關(guān)鍵就是弄明白有什么人,什么人做什么事,什么事產(chǎn)生什么物,中間有什么規(guī)則,再把人、事、物之間的關(guān)系定義出來,一個模型也就基本成型了。
3.3 統(tǒng)一的意義在哪
統(tǒng)一的普遍意義是形成標(biāo)準(zhǔn)。所謂標(biāo)準(zhǔn),就是所有人都明白的表述,所有人都遵從的格式。標(biāo)準(zhǔn)可以讓信息在人群中無障礙地流通,即使這些信息來自不同地域、不同文化、不同社會或不同組織。
比如美元作為國際統(tǒng)一使用的貨幣方便了全球的經(jīng)濟(jì)貿(mào)易,我們國家普及普通話方便了不同地區(qū)的交流溝通。
在軟件世界,任何一種組件化開發(fā)模式背后都有一個標(biāo)準(zhǔn)在規(guī)范和指導(dǎo),比如 Java 的 JSR 標(biāo)準(zhǔn)。有了標(biāo)準(zhǔn),編程就容易組件化,協(xié)作效率也會提升很多。對 UML 來說,這就是統(tǒng)一的意義。
四、為什么需要 UML
一個軟件項目要經(jīng)歷業(yè)務(wù)調(diào)研、立項、需求采集、架構(gòu)設(shè)計、編碼開發(fā)和測試驗證等多個環(huán)節(jié)。
每個環(huán)節(jié)可能角色并不相同,同樣的文檔同樣的話語越向后傳遞就越容易失真。因此就容易出現(xiàn)最終交付的產(chǎn)品不是客戶真正想要的這種情況。
如何避免角色間信息傳遞的失真,保證信息能被準(zhǔn)確的傳達(dá)和準(zhǔn)確的理解?一種好的辦法就是大家使用標(biāo)準(zhǔn)化的語言。
統(tǒng)一建模語言(UML)就試圖用標(biāo)準(zhǔn)化的語言來覆蓋整個軟件過程,讓不同團(tuán)隊不同角色可以用相同的語言順暢的溝通。
在信息傳播方面,圖形相對于文字,人腦的接受能力顯然更強(qiáng)。因此,UML 采用了「可視化」的圖形方式來定義語言。
-
UML
+關(guān)注
關(guān)注
0文章
122瀏覽量
30908 -
面向?qū)ο?/span>
+關(guān)注
關(guān)注
0文章
64瀏覽量
10004 -
編程設(shè)計
+關(guān)注
關(guān)注
0文章
9瀏覽量
6482
發(fā)布評論請先 登錄
相關(guān)推薦
UML精準(zhǔn)入門指南2
![<b class='flag-5'>UML</b><b class='flag-5'>精準(zhǔn)入門</b><b class='flag-5'>指南</b>2](https://file1.elecfans.com/web2/M00/82/79/wKgaomRUdDWAMeqaAABkmbvEkDs823.jpg)
UML精準(zhǔn)入門指南3
![<b class='flag-5'>UML</b><b class='flag-5'>精準(zhǔn)入門</b><b class='flag-5'>指南</b>3](https://file1.elecfans.com/web2/M00/82/78/wKgZomRUdDWADPS6AAD9BxOAink090.jpg)
評論