追求最佳可視化模型的公司可以更快地開發(fā)它們的軟件,并且建立更高質(zhì)量的系統(tǒng)。Unified Modeling Language (UML)就是可視模型化的軟件工業(yè)標(biāo)準(zhǔn)。
在這里,我們將向你介紹如何運(yùn)用UML和Rational Rose 2001a,它是現(xiàn)今最流行的基于UML的軟件模型化和開發(fā)工具,可用于開發(fā)基于J2EE的企業(yè)應(yīng)用。
什么是UML?
Unified Modeling Language (UML),是始于1997年一個(gè)OMG標(biāo)準(zhǔn),它是一個(gè)支持模型化和軟件系統(tǒng)開發(fā)的圖形化語言,為軟件開發(fā)的所有階段提供模型化和可視化支持,包括由需求分析到規(guī)格,到構(gòu)造和配置。
使用UML作可視化模型主要是為了了解系統(tǒng)的重要細(xì)節(jié),以便項(xiàng)目的需求可以清晰地表達(dá)、開發(fā)出解決方案體系、并且一個(gè)選擇的實(shí)現(xiàn)可以清晰地標(biāo)識和構(gòu)造。為達(dá)到這個(gè)目的,需要豐富的符號來表達(dá)模型化的軟件系統(tǒng)。UML不但為基本的構(gòu)造塊提供了符號表示,它還提供了方法來表達(dá)基本構(gòu)造塊之間的復(fù)雜關(guān)系。這些關(guān)系都以UML框圖的形式表示出來。
以下就讓我們來看一下UML和Rational Rose是如何有助于理解、設(shè)計(jì)和實(shí)現(xiàn)J2EE應(yīng)用的。
理解需求
項(xiàng)目失敗的原因通常是由于需求沒有很好地理解或者進(jìn)行溝通。我們也可以很容易地理解,無論是口頭或者書面的語言,都是不嚴(yán)密的。
你可以應(yīng)用UML用例模型來開發(fā)一個(gè)精確的模型來表示系統(tǒng)的需求,然后以這些用例為基礎(chǔ)來推動(dòng)系統(tǒng)開發(fā)的其它方面。用例的作用就好象是項(xiàng)鏈上的一條線,它將所有的珍珠綁定在一起。用例在最終的用戶和系統(tǒng)需求之間建立起一座橋。它們可用來在功能需求和系統(tǒng)實(shí)現(xiàn)本身之間進(jìn)行回溯。用例也可以作為一個(gè)連接點(diǎn),連接到一個(gè)詳細(xì)的說明需求細(xì)節(jié)的用例文檔。
圖1展示了一個(gè)在線CD商店的部分用例框圖,它們是從文本和口頭的功能需求中提取出來,然后轉(zhuǎn)為用例。在這個(gè)例子中,很明顯購買者(由幾條線條組成的人物,表示為UML中的角色)可以通過4種方式來使用系統(tǒng)(在UML中以橢圓表示一個(gè)用例)。
***********圖1********
一個(gè)簡單的用例圖
每個(gè)用例則通過順序框圖中的一個(gè)或者多個(gè)場景來精確描述。當(dāng)然,在需求捕捉和分析的早期階段,順序圖是相對簡單,而且也可能是不完整的。順序圖的這樣一個(gè)例子如圖2所示。在Rational Rose中,要為某個(gè)用例創(chuàng)建順序圖,你可以在瀏覽器中選擇它,然后從用例的菜單中選擇New>Sequence Diagram。
***********圖2************
一個(gè)解釋付費(fèi)用例的順序圖
設(shè)計(jì)一個(gè)方案
隨后的階段是用例分析,對于內(nèi)部元素是如何交互來滿足系統(tǒng)的功能需求,以及它們是如何相關(guān),這個(gè)階段提供了一個(gè)初始的、高級別的定義。這個(gè)分析需要進(jìn)行反復(fù)的試驗(yàn),直到產(chǎn)生滿意的解決方案。“Analysis classes(分析類)”的行為通常是通過自然的語言描述的,比較抽象,在這個(gè)分析階段中,它是一個(gè)有用的工具。分析類通常都不在軟件中實(shí)現(xiàn),雖然我們可以做到這一點(diǎn),實(shí)際上,在總體設(shè)計(jì)過程中,分析類才會(huì)轉(zhuǎn)換為精確定義的設(shè)計(jì)類和子系統(tǒng)。
我們首先要精心地制造順序圖,以便它們可以揭露出系統(tǒng)的內(nèi)部運(yùn)作,我們并不是通過展示角色和一個(gè)系統(tǒng)的交互來分析系統(tǒng),而是將系統(tǒng)分解成獨(dú)立的分析對象。系統(tǒng)的職責(zé)被分解到分析級別的對象中,以便可以得到一個(gè)更好的順序圖。在這里我們要介紹三種分析對象:
.邊界對象
邊界對象代表系統(tǒng)的內(nèi)部工作和它所處環(huán)境之間的交互。它包括有一個(gè)用戶通過圖形界面的交互,與其它角色的交互(例如代表其它系統(tǒng)的角色),和設(shè)備的交互等。邊界對象將系統(tǒng)的其它部分和外部的相關(guān)事物隔離和保護(hù)起來。簡單地說,每一個(gè)角色-用例交互對映射到一個(gè)邊界對象。
. 實(shí)體對象
實(shí)體對象代表系統(tǒng)的重要信息。在一個(gè)很長的時(shí)間內(nèi),它們都是持久和存在的。它們的主要目的是表達(dá)和管理系統(tǒng)中的信息。在模型中,系統(tǒng)中的關(guān)鍵概念以實(shí)體對象來表現(xiàn)。
. 控制對象
控制對象是用來模型化系統(tǒng)中的行為的??刂茖ο蟛⒉恍枰獙?shí)現(xiàn)這個(gè)行為,它可能是與其它對象協(xié)作以實(shí)現(xiàn)用例的行為。它的想法是為了將行為和模型下層的信息隔離開來,這樣在處理以后的改變時(shí)就比較容易。
UML提供了stereotype符號,它表示為放在一個(gè)雙角括號中的文本,以便和不同類型的類區(qū)別開來。在Rational Rose中,你可以很容易地創(chuàng)建分析類,只需將類的stereotype字段分別修改為<
付款用例順序圖的一個(gè)更新版本如圖3所示,這里系統(tǒng)被分解為分析對象。在這個(gè)圖中,使用圖標(biāo)來代表邊界、控制和實(shí)體對象(分別以一個(gè)T、帶箭頭的圓圈和一個(gè)帶切線的圓表示)。
當(dāng)然,類通常都參與到幾個(gè)用例中,因此為確保系統(tǒng)的一致性,理解它們的靜態(tài)關(guān)系也是同樣重要的。對于捕捉不同結(jié)構(gòu)元素的靜態(tài)模型,UML類圖是很有用的。
首先,我們標(biāo)識和放置用例中所有的類到一個(gè)類框圖中。我們已經(jīng)將用例的行為分布到對象中,所以要分析每個(gè)類的操作就變得相對簡單了。要注意的是,這些是分析的操作,這意味著隨著我們不斷地進(jìn)行分析和設(shè)計(jì),這些操作將會(huì)不斷地需要細(xì)化。
Rational Rose可讓你很簡單地在順序圖中的分析類上定義新的操作,你只要選擇現(xiàn)有的信息,并且在菜單上選擇
****圖3:帶有分析對象的精確順序圖****
這是Rational Rose中的一個(gè)典型方法,它可以提高用戶的生產(chǎn)力,并且確保整個(gè)模型的一致性和質(zhì)量,另一個(gè)類似的有用特性包括有查詢模型哪個(gè)類和消息是沒有解釋的(例如在模型中沒有映射到真正的類或者操作)。
還有一個(gè)方面是需要標(biāo)識每個(gè)類的屬性。屬性代表的信息,可能是其它類需要的,也可能是類自身為履行自己的職責(zé)需要的。在這個(gè)分析階段,應(yīng)將屬性標(biāo)識為普通的類型,例如數(shù)字、字符串等。
要完成用例的類圖,你還需要標(biāo)識類間的關(guān)系。在這個(gè)階段中我們特別感興趣的關(guān)系是關(guān)聯(lián)、依賴和繼承。
在分析完所有的用例和為每個(gè)用例創(chuàng)建類框圖后,我們就需要接合各種不同的分析類來得到一個(gè)統(tǒng)一的分析模型。這是一個(gè)重要的活動(dòng),因?yàn)槲覀冃枰玫揭粋€(gè)最小集合的類,并且為了避免在最后的分析模型中出現(xiàn)不必要的冗余。
這個(gè)階段的主要任務(wù)是標(biāo)識在用例間重復(fù)出現(xiàn)的類或者只有很小改變的類。例如,對于跨用例間擁有類似行為或者表示同樣概念的控制類,我們應(yīng)該將它們合并。擁有同樣屬性的實(shí)體類也應(yīng)該被合并,它們的行為也合并為一個(gè)類。
圖4展示了一個(gè)初步分析級的類框圖(這是根據(jù)圖1的用例得到的)。由于我們現(xiàn)今只是關(guān)系類間的關(guān)系,所以我們使用Rational Rose的顯示過濾能力來過濾掉每個(gè)類的細(xì)節(jié)(通過不勾選Format>Show all attributes和Format>Show all operations就可以了)。
**********圖4************
初步分析級的類框圖