它意義之前是沒有含義的。”語言的語法和語義,就是這樣一種“瓶和酒”、“罐和糖”關系。
UML是可視化建模語言的工業標準,在業界已經被廣泛應用。和其他所有語言一樣,UML也對思維具有反作用——是促進思維還是阻礙思維,全憑UML的使用者對UML內涵的掌握程度了!抖ㄎ弧返淖髡哒f過:“有些人玩不好定位游戲,因為他們太依賴字面意義。”同樣,要想玩好UML“游戲”——達到UML促進思維的境界——也必須將UML語法和UML語義緊密結合。
承接上篇,本文繼續結合實例來說明圖論思想在UML應用中的意義,希望能對讀者有所啟發。
一、著色頂點
在圖論的基本理論中,有加權頂點的概念。頂點具有的與之相關的數,稱為權(weight);該頂點稱為加權頂點。
這里我們做個擴充,引入著色頂點的概念:頂點具有的與之相關的顏色,稱為著色(color);該頂點稱為著色頂點。
舉個例子,討論圖的定義時的圖,現在每個頂點都被著了色。著色頂點可以表達更為豐富的含義:比如在本圖中,紅色、藍色和黃色的頂點可以分別代表大、中、小型城市,邊代表它們直接的直達航班;從中型城市V1到中型城市V6,沒有直達航班,要在大型城市V4轉乘,一目了然。
二、著色頂點的UML應用——通過顏色為圖元分類
用UML為問題及解決方案建模的時候,有時UML圖會比較復雜,不容易讀懂。下面以兩個例子來說明如何運用著色頂點的方法,提高UML圖的易讀性。
下圖是J2SE集合類框架的UML圖,運用了藍、黃兩種彩色。每個看這幅UML圖的人,在留意眾多細節之前,都會首先注意到本圖的大局——多個藍色的類組成的層次結構,周圍分布著一些黃色的類。繼續看下去,藍色的類和黃色的類之間使用的是“實現”關系——于是知道黃色的類是接口。至此,整個結構清楚了——多個具體類組成了類層次結構,不同的具體類可能實現特定接口。接下來,分析該UML圖的語義細節……
再舉一例。下圖試圖為整個軟件工程學科建立概念模型,涉及到的圖元比較多,概念也比較復雜,所以使用了黃、紅、綠、藍等多種彩色。實際上,上述四種顏色分別代表過程、項目管理、方法論、任務四個子范疇;一方面,這些色彩的含義要大致讀懂了該UML圖之后,才能反映到讀者的腦海中;另一方面,其實在讀者看圖過程中,這些色彩就起了很大作用了——它們將一幅比較大的類圖劃分成四個相對獨立的小區域,使讀者看起圖來有條不紊。
建模的本質是抽象,抽象的目的是把握重點,以使結構清晰化。如果我們畫的UML圖太復雜,那就應當想一想,我們是不是犯了“為建模而建模”的毛病,忘記了原本的目的呢?
使UML圖清晰易讀的方法有很多,為圖元著色就是其中一種,并且它是令人愉快的。仔細想來,上面兩例都是用顏色為圖元分類,這種分類帶來了兩條令人興奮的好處:其一,為原圖附加了一層大局信息,這些大局信息會被讀者最先注意到,并為進一步理解圖的細節打下基礎;其二,由于大局信息是通過著色的方式提供的,并沒有引入任何新的圖元,所以圖的復雜性并沒有增加。
三、著色頂點的UML應用——UML彩色建模方法介紹
如果問我,看完《人月神話》這本書,給我印象最深的一個詞是什么,我會毫不猶豫地回答:概念完整性。為了達到概念完整性,領域建模(domain modeling)是非常重要的一個環節?上驳氖,領域建模已經越來越被業界所重視,也有不少好書和好的方法浮出水面。本節介紹Peter Coad大師的著作《Java Modeling In Color With UML: Enterprise Components and Process》中講述的彩色建模方法——一種領域建模方面的優秀技術。
Peter Coad認為,領域模型主要由四種元素組成,它們分別是:瞬間事件(MomentInterval)、角色(Role)、人-物-地點(PartyPlaceThing)、描述(Description)。彩色建模技術的目的是“為模型增加一層‘視覺可監測的’信息”,具體而言,它定義了四種顏色分布標識上述四種領域元素。
- 粉紅:代表“瞬間事件”。在模型中,瞬間事件往往封裝了我們最感興趣的方法(method),這些方法和系統將來的功能有直接的聯系,它們可以說是模型的靈魂。它們也是最容易變的,因此選用了最活躍的粉紅色代表。
- 黃色:代表“角色”。瞬間事件的發生,往往會牽涉到多個角色,角色具體由“人-物-地點”來扮演。角色意味著在特定場景下的責任,它們也是比較容易變化的,但比起瞬間事件還是要穩定些,所以用比較活潑的黃色代表。
- 綠色:代表“人-物-地點”。業務領域不同,會牽涉到不同的人、物、地點。它們都比較穩定,用安靜的綠色表示。
- 藍色:代表“描述”。最后為人、物、地點引入更抽象一級的描述元素,這些描述元素可以被多個不同的“人-物-地點”所共享。比如Date就是描述元素,人可以有生日,汽車可以有生產日期,等等。描述是最為穩定的一類模型元素,用穩定得幾乎憂郁的藍色代表。
好了,舉個例子吧。下圖是網管軟件領域建模時的模型之一角。Ping是瞬間事件元素,其涉及兩個角色元素:Pinger和Pingee。這兩個角色都由IPDevice來扮演,IPDevice屬于“人-物-地點”元素。IPDevice擁有零到多個IPAdress,IPAdress是描述元素。當然,IPDevice和其四個子類Router、Switch、Server和Host都是“人-物-地點”元素。
Edward R. Tufte在其經典著作《Envisioning Information》中指出,顏色在信息設計中的基本作用有四:
- 分類
- 度量
- 模仿
- 裝飾
彩色建模方法充分利用了顏色的分類和度量功能(當然經過顏色裝飾的模型也比原來更賞心悅目):它不僅利用了四種顏色來為圖元分類,而且粉紅、黃、綠、藍四種顏色分別代表不同等級的“易變程度”,具有度量意義。
由于篇幅所限,以上只是對彩色建模方法的簡單介紹,感興趣的朋友還是找書來看看吧。
四、著色邊
在上文中,我們對經典圖論進行了小小擴充,并且體會了這種擴充的應用價值。接下來,我們對邊的概念進行類似的擴充——著色邊。
邊具有的與之相關的顏色,稱為著色(color);該邊稱為著色邊。
五、著色邊的UML應用——標識良性依賴與惡性依賴
合理處理依賴關系,是“擁抱變化”的關鍵所在。在《擁抱變化:敏捷設計從理論到實踐》(《程序員》2004年第11期)一文中,筆者闡述了敏捷設計的理解基礎:良性依賴原則。不會“在實際中”造成危害的依賴關系,都是良性依賴;依賴的“理論危害”不一定成為“實際危害”,反之亦然。這就是良性依賴原則。
那么,如果能使用著色邊的方法,將依賴的良、惡性可視化,對軟件設計人員無疑是大有裨益的。我們規定:
- 良性依賴用綠色表示;
- 惡性依賴用紅色表示。
例如,敏捷設計大師們提倡的“通過重構得到設計模式”,在著色邊方法的幫助下,變得易于理解,并且極具可操作性;其步驟如下:
1. 使用最簡單的設計,完成當前的功能。此時,往往是類之間的直接調用,但由于功能需求也簡單,所以類之間的依賴關系也往往是良性依賴。
2. 當需求有所變化或增加時,首先考察原先的設計是否可以直接支持新需求;如果可以通過直接增強某個類來達到目的,但是原先的良性依賴也隨之變成了惡性依賴,那就應當否定這種方案,而去做第3步的重構。
3. 通過重構改變原先的設計,使新的設計為支持新需求做好準備,且保證依賴關系都是良性依賴。
4. 在新設計的基礎上,增加新功能的支持。這時你往往會發現,哇,設計模式出現了。
下面舉例。為了突出著色邊方法給“通過重構得到設計模式”帶來的可操作性,我們再來看看(上)篇的那個例子:需求跟蹤矩陣工具,其最初的需求是支持項目以專有格式保存,后來,又要求能夠導出成HTML格式的網頁。下面的四幅設計類圖都運用了著色邊方法,它們概括了整個設計變化的過程:
1. 最初的設計。符合敏捷設計的簡單性原則。
2. 考察老設計在新需求下的情況。CProjectSaver要支持多種保存策略,違反了單一職責原則。
3. 重構得到的新設計。很好的設計,但對最初的需求而言,卻是過度設計(over-engineering)。
4. 在新設計之上添加新功能。就是策略(strategy)模式呀
通過上面的例子可以看出,著色邊方法在某種程度上,將設計的依據“可視化”了,因此為設計人員帶來了方便。
六、圖的同構
稱圖G與圖H同構,如果
(1) 存在V(G)與V(H)的一一對應;
(2) 存在E(G)與E(H)的一一對應;
(3) 在(1)與(2)的一一對應保持頂點與邊的關聯關系不變。
比如下面兩個UML類圖,其語義是完全相同的。
七、圖的同構的UML應用——UML風格
互為同構的UML圖,其語義雖然是完全相同的,但其易讀性,卻可能相差極大。因此,我們提倡好的UML風格。
下圖是一幅UML狀態圖,描述了Java線程的狀態變化情況。該圖的起始點在最左邊,終止點在最右邊,始態和終態分別在次左邊和次右邊,整個圖結構清晰,語義一目了然。
再看這幅圖,語義完全相同,但是看起來卻費勁多了。
這里不再舉更多例子了,《UML風格》一書,匯集了很多繪制UML圖的專家級建議,值得一讀。
文章來源于領測軟件測試網 http://www.kjueaiud.com/
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月