面向?qū)ο蟮姆治?/strong>
在您準(zhǔn)備為企業(yè)作出系統(tǒng)和軟件投資前,必須首先了解企業(yè)的實(shí)際需求,明確所部署的技術(shù)將如何幫助您的企業(yè)獲取更大的成功。您能夠使用 UML,借助用例圖、序列圖和活動(dòng)圖來進(jìn)行分析。這些圖表將幫助您規(guī)劃系統(tǒng)的范圍、動(dòng)態(tài)性能、連同表現(xiàn)方式等。不必考慮實(shí)施細(xì)節(jié),您希望獲得的只是按照您的需求而表現(xiàn)的系統(tǒng)性能。
用例圖(The Use Case Diagram)
UML 用例圖提供了一個(gè)系統(tǒng)環(huán)境的建模方式。他能夠幫助您確定系統(tǒng)/應(yīng)用程式的外部和內(nèi)部元素連同系統(tǒng)范圍。作為圖像建模模式,他在您需要和所收集的系統(tǒng)需求進(jìn)行對話時(shí)也將有所幫助,對于研制成品的研發(fā)團(tuán)隊(duì)來說,更是有著舉足輕重的重要性。對于企業(yè)的任何者,或第一次接觸該軟件產(chǎn)品的用戶也有很大的幫助作用。用例圖能夠以可視化的方式,表達(dá)系統(tǒng)如何滿足所收集的業(yè)務(wù)規(guī)則,連同特定的用戶需求等信息。
在項(xiàng)目后期,也能夠用到 UML 用例圖。您能夠通過用例圖中定義的需求來協(xié)助測試項(xiàng)目的相關(guān)功能。您不但能夠驗(yàn)證系統(tǒng)性能是否無錯(cuò)誤(無崩潰或明顯的非邏輯響應(yīng)),還能夠驗(yàn)證系統(tǒng)運(yùn)行時(shí)是否按照需要,執(zhí)行了指定命令。這樣,您能夠測試系統(tǒng)是否完全滿足了需要,以確信成品能夠投入生產(chǎn)——也就是說,他已完全滿足了用戶的需求。
只有確保滿足了合理、實(shí)用的各項(xiàng)需求,才能確保 IT 項(xiàng)目的更大成功。
您能夠使用 UML 序列圖細(xì)化需求并對設(shè)計(jì)元素進(jìn)行鏈接。序列圖允許高層和低層對象間的交互文檔。該交互在角色(和用例圖中的角色相同)和類實(shí)例(運(yùn)行于電腦內(nèi)存中的技術(shù)對象和細(xì)節(jié)對象)之間顯示。
通過序列圖,您能夠按照系統(tǒng)特定方案中事件(消息)的精確順序來描述隨時(shí)間變化的系統(tǒng)行為。使用序列圖進(jìn)行用例分析并引導(dǎo)設(shè)計(jì):您能夠決定將對用例圖所定義的管理任務(wù)負(fù)責(zé)的系統(tǒng)對象類型,并決定哪種對象將管理系統(tǒng)內(nèi)外的“會(huì)話”或通信。由于消息已從序列圖中抽出,您能夠描述類和接口(我們最后要編譯和部署的代碼元素)所需的某些關(guān)鍵操作(方法)。
活動(dòng)圖(The Activity Diagram)
UML 活動(dòng)圖設(shè)計(jì)用于幫助您了解系統(tǒng)中對象的動(dòng)態(tài)變化。用于描述某一特定類或一組類如何協(xié)同工作。和序列圖有所不同,活動(dòng)圖不是一系列和時(shí)間相關(guān)的通信,而是從一個(gè)任務(wù)到另一任務(wù)的控制轉(zhuǎn)移,同時(shí)指定誰(哪個(gè)對象)對發(fā)生的任務(wù)負(fù)責(zé)。
UML 活動(dòng)圖也是業(yè)務(wù)流程的技術(shù)視圖。可對業(yè)務(wù)工作流進(jìn)行分析或在“業(yè)務(wù)流程建模”工作后可獲得活動(dòng)圖。
活動(dòng)圖還可幫助構(gòu)造系統(tǒng)內(nèi)元素的周詳動(dòng)態(tài)視圖(EJB 如何互操作等)。
通過分析模型可捕獲單獨(dú)于實(shí)施細(xì)節(jié)之外的系統(tǒng)意向和預(yù)期行為,和使用的語言、部署的應(yīng)用程式服務(wù)器或使用的體系結(jié)構(gòu)都沒有關(guān)系。但是,設(shè)計(jì)階段開始后,一切都發(fā)生了變化。您必須進(jìn)入生產(chǎn)環(huán)境的細(xì)節(jié)并將軟件構(gòu)建至特定的體系結(jié)構(gòu)。設(shè)計(jì)是對系統(tǒng)的實(shí)施。
假如設(shè)計(jì)是由分析得到的,您能夠更加確信所編寫的系統(tǒng)行為的正確性,確認(rèn)所研發(fā)的成果將是個(gè)按需求構(gòu)建的系統(tǒng)。您將獲得高度成功——讓用戶得到所需要的系統(tǒng)。您還能夠直接利用分析得出的信息而無需在設(shè)計(jì)過程中重新生成,從而縮減研發(fā)時(shí)間,由于不必“重新復(fù)制”任何工作,因此減少了人為錯(cuò)誤。
通過分析,我們可獲得什么呢?通過用例圖能夠發(fā)現(xiàn)對象并促進(jìn)類和接口的創(chuàng)建。一個(gè)或更多類和接口能夠?qū)崿F(xiàn)一個(gè)角色,您能夠在角色定義中直接創(chuàng)建類和接口。您還能夠?qū)⒔巧溄拥浆F(xiàn)有的類和接口,顯示如何使用一條代碼來滿足所分析的多個(gè)元素。
通過序列圖能夠發(fā)現(xiàn)方法并促進(jìn)類操作的創(chuàng)建。假如您需要向類發(fā)送消息,您能夠調(diào)用該類的方法。序列圖中的消息能夠用來自動(dòng)創(chuàng)建操作或鏈接到現(xiàn)有操作。您能夠通過鏈接跟蹤方法的功能,包括將哪些作為輸入內(nèi)容和必須返回哪些內(nèi)容等等。
設(shè)計(jì)所包含的內(nèi)容
您已知道要構(gòu)建的內(nèi)容,現(xiàn)在您需要表述如何構(gòu)建。您需要確定業(yè)務(wù)邏輯所在的位置:能夠置于應(yīng)用程式服務(wù)器的 EJB 等組件中,也能夠置于使用 VB 或 PowerBuilder 等語言、作為客戶端應(yīng)用程式一部分的類或組件中,或做為觸發(fā)器和過程內(nèi)置于關(guān)系數(shù)據(jù)庫中。您需要根據(jù)需求做出一些選擇,包括擴(kuò)展性、安全、性能和可訪問性等方面。
UML 類圖和組件圖將用于定義周詳?shù)募夹g(shù)系統(tǒng)靜態(tài)結(jié)構(gòu)。
類圖 (The Class Diagram)
UML 類圖、業(yè)務(wù)邏輯和任何支持結(jié)構(gòu)一同被用于定義全部的代碼結(jié)構(gòu)。既然類圖用來模擬研發(fā)中所維護(hù)的實(shí)際代碼,顯然他是 Java 或 PowerBuilder 等對象語言的概括性表述。您還能夠使用 UML 類圖來概括 XML 中的復(fù)雜結(jié)構(gòu),令其更易于研發(fā)和理解。
能夠從 UML 類圖上生成代碼。還能夠在研發(fā)過程中編輯該代碼以完善、測試和部署最終運(yùn)行的應(yīng)用程式。由于 PowerDesigner 在對象語言和 UML 類圖之間具備 1:1 的映射功能,您還能夠?qū)嵤┓聪蚬こ檀a,讀取源文檔并創(chuàng)建新的類圖。您能夠更深入地理解現(xiàn)有系統(tǒng)并簡化集成和維護(hù)工作。
組件圖(The Component Diagram)
UML 組件圖將被用于在更大的黑匣視圖(Black Box View)中描述高級(jí)對象的定義和相關(guān)性。他仍然是個(gè)設(shè)計(jì)模型,并且是代碼的直接概括。例如,一個(gè) EJB 的組件標(biāo)識(shí)直接鏈接到實(shí)施所必需的一系列類和接口,并將生成所需代碼來推動(dòng)最終 bean 的研發(fā)。
組件圖比組件體系結(jié)構(gòu)的代碼層視圖更容易理解和管理。還能夠通過編寫組件接口的文檔來實(shí)現(xiàn)代碼的共享和反復(fù)使用,用戶無需(或很少)了解組件的實(shí)施細(xì)節(jié)即可在其他項(xiàng)目和系統(tǒng)中使用這些代碼。
右擊Customer EntityBean_CMP,選擇Create/Update Class Diagram,生成如下class diagram:
循環(huán)疊代工程
世界不是一成不變的,您的 IT 項(xiàng)目也如此。在您了解需求,通過分析進(jìn)行了設(shè)計(jì),并構(gòu)建了系統(tǒng)的某些元素后,必然還會(huì)碰到新的變化,如要更新定義,又或現(xiàn)有用例圖中存在某些需要改正的錯(cuò)誤,代碼在 IDE 和文本編輯器中被編輯連同數(shù)據(jù)庫被DBA 優(yōu)化等。必須管理和掌控任何需要更改的細(xì)節(jié),以確保所構(gòu)建的系統(tǒng)能夠和業(yè)務(wù)需求保持一致。
往返工程的一個(gè)方案是當(dāng)代碼在研發(fā)過程中被更改時(shí),需要在類圖中反映出來。具體細(xì)節(jié)如下:
1. 創(chuàng)建類圖并將業(yè)務(wù)邏輯元素添加到模型中
2. 生成文檔系統(tǒng)的應(yīng)用程式代碼
3. 在 IDE 或文本編輯器中編輯代碼
4. 編輯設(shè)計(jì),此時(shí)忽略在生成的代碼中所發(fā)生的更改
5. 對編輯內(nèi)容實(shí)施反向工程,直到和現(xiàn)有類圖一致
6. 將設(shè)計(jì)過程中完成的工作和研發(fā)時(shí)編輯的內(nèi)容同步(合并)
7. 生成新代碼,該代碼是設(shè)計(jì)代碼和研發(fā)人員更改代碼的總和
當(dāng)對類圖進(jìn)行了修改以反映新的設(shè)計(jì)內(nèi)容時(shí),應(yīng)該使用同步/合并技術(shù)防止丟失研發(fā)人員的工作成果,同時(shí)允許設(shè)計(jì)人員接受或拒絕研發(fā)過程中所做的更改。這樣,PowerDesigner 令 IT 能夠完全控制體系結(jié)構(gòu),這正是制勝的關(guān)鍵。
PowerDesigner 的功能并不是僅限于此!現(xiàn)在設(shè)計(jì)模型已被更新,您能夠?qū)⑦@些更改鏈接到分析中。有可能您在分析中發(fā)現(xiàn)了新的需求,能夠?qū)⑦@一更改反映到設(shè)計(jì)中并編寫代碼。使用 PowerDesigner 中領(lǐng)先的 Compare/Merge 技術(shù)(在 September Blueprint 中討論過),您能夠在研發(fā)周期的任何模型和階段中獲得真正的往返同步。
對象圖(Object Diagram)
和類圖相同,對象圖也是個(gè) UML 靜態(tài)結(jié)構(gòu)圖;他定義了系統(tǒng)在給定時(shí)刻具備的物理元素,而沒有具體考慮系統(tǒng)的動(dòng)態(tài)活動(dòng)。他和代碼一一對應(yīng),但和類圖不同,我們現(xiàn)在討論的是具體的分類器,而不是分類器定義。將對象圖描述為類實(shí)例圖可能最為合適。
對象圖的主要用途是進(jìn)行分析。類圖中無法表示的類之間存在不確定的約束。我們將使用對象圖來記錄這些約束。而且,在我們查看所管理的具體類實(shí)例示例以闡明這些元素之間的交互作用關(guān)系時(shí),對象圖還允許我們定義具體的“What if”場景。
以下內(nèi)容適用于 OO 建模的初學(xué)者:分類器是抽象的對象結(jié)構(gòu)定義。分類器能夠告訴我們所管理的是什么類型的數(shù)據(jù)(屬性/成員表示數(shù)據(jù)元素)連同該分類器具備什么能力(操作/方法表示對象的行為)。實(shí)例是具體的分類器示例。假定定義一個(gè)名為 Customer 的類,該類具備 Name 屬性。類 Customer 的實(shí)例“Jane Doe”是姓名恰為“Jane Doe”的客戶。實(shí)例通常具備比分類器更豐富的含義,這是因?yàn)榉诸惼鞅硎灸撤N級(jí)別的概述。收集某個(gè)分類器的若干個(gè)實(shí)例或示例可能有助于您理解其用途并更好地使用他。
因此,對象圖是類圖的具體形式,表示類實(shí)例樣本,并且顯示了鍵值和關(guān)系。例如,CustomerBean 類具備以下客戶實(shí)例:該客戶的 ID 為 52271,姓名為“John Doe”。該客戶實(shí)例和三個(gè)訂單實(shí)例(三份訂單)相關(guān),訂單編號(hào)分別為122047、122103 和 122399。
協(xié)作圖(Collaboration Diagram)
協(xié)作圖和序列圖很相似。實(shí)際上,序列圖和協(xié)作圖能夠有效地交替使用,并能夠簡便的相互轉(zhuǎn)換。其區(qū)別在于用戶閱讀和理解的方式不同。序列圖具備很好的層次性,并且圍繞時(shí)間構(gòu)造。協(xié)作圖則主要是圍繞對象結(jié)構(gòu)構(gòu)造。通過在圖中對消息進(jìn)行編號(hào)能夠表示消息的順序。采用這種方式時(shí),即使圖的結(jié)構(gòu)不是基于時(shí)間的,也將保持定時(shí)關(guān)系。
協(xié)作圖借助于系統(tǒng)中元素或?qū)ο笾g的交互作用,表示系統(tǒng)的動(dòng)態(tài)方面,即在一段時(shí)間內(nèi)的表現(xiàn)方式。他通過表示系統(tǒng)的靜態(tài)結(jié)構(gòu)來對類圖和對象圖進(jìn)行補(bǔ)充,但不是借助于基于結(jié)構(gòu)的關(guān)系,而是在系統(tǒng)對象之間傳遞交互作用“消息”。
構(gòu)造協(xié)作圖時(shí)還能夠在概念級(jí)測試靜態(tài)模型。在類圖中定義了類實(shí)例,這些類實(shí)例之間的交互作用定義了一個(gè)具體的使用方案連同將在這些元素之間發(fā)生的內(nèi)部通訊。我們還能夠使用其他角色來表示系統(tǒng)的外部作用者和內(nèi)部使用者,如用例圖。
例如,我們能夠建立一個(gè)訂單輸入系統(tǒng),以供客戶和銷售代表使用??蛻敉ㄟ^創(chuàng)建新訂單和該系統(tǒng)交互作用。訂單對象和銷售對象之間進(jìn)行對話,該對話由鏈接消息表示,在此情況下,只有兩個(gè)消息:一個(gè)是來自 Orders 類的訂單請求,一個(gè)是來自 Sales 類的訂單確認(rèn)。對一個(gè)鏈接上的消息數(shù)量沒有限制。我們在此討論的對話以一個(gè)訂單請求開始,然后是對該訂單的確認(rèn)。
適用性
協(xié)作圖對于設(shè)計(jì)人員尤其重要,因?yàn)樗U明了對象的作用。您能夠在序列圖之前構(gòu)造協(xié)作圖(假如您計(jì)劃構(gòu)造這兩個(gè)圖),但通常是在完成類圖之后構(gòu)造協(xié)作圖以說明從類中導(dǎo)出的對象之間的交互作用。能夠使用一個(gè)或多個(gè)協(xié)作圖來實(shí)現(xiàn)一個(gè)用例,或?qū)?fù)雜行為分割成多個(gè)邏輯子行為。
狀態(tài)圖(Statechart Diagram)
狀態(tài)圖(也稱為狀態(tài)機(jī))描述了特定類或組件在其整個(gè)生命周期中不斷變化時(shí)的行為。該圖顯示是什么觸發(fā)了從一種狀態(tài)向另一種狀態(tài)的轉(zhuǎn)換,連同在該類上調(diào)用哪些操作以提供該狀態(tài)的行為或觸發(fā)這種轉(zhuǎn)換。例如,訂單在被創(chuàng)建時(shí)處于初始狀態(tài)。在客戶確認(rèn)訂單正確后,訂單將進(jìn)入確認(rèn)狀態(tài)。在發(fā)貨以后,訂單需要從確認(rèn)狀態(tài)進(jìn)入發(fā)貨狀態(tài)。
因此,每當(dāng)一個(gè)類在其生命周期的不同階段具備不同的可用選項(xiàng)(不同的有效行為)時(shí),您都能夠使用狀態(tài)圖來將這些規(guī)則和條件建模。生命周期中的每個(gè)階段都是該對象的一種狀態(tài),而每個(gè)改變狀態(tài)的觸發(fā)器都代表從一種狀態(tài)到另一種狀態(tài)的轉(zhuǎn)換。能夠根據(jù)需要從某個(gè)狀態(tài)轉(zhuǎn)換到任意多個(gè)其他狀態(tài),也能夠從其他多個(gè)狀態(tài)進(jìn)入某個(gè)狀態(tài)。
子狀態(tài)圖
若要保持狀態(tài)圖簡單和易讀,您可能發(fā)現(xiàn)所定義的一個(gè)或多個(gè)狀態(tài)實(shí)際上涉及到更為復(fù)雜的行為,以至于他本身就能夠定義為一個(gè)狀態(tài)圖。此時(shí),和向主圖中添加大量復(fù)雜細(xì)節(jié)的做法相比,更好的做法是將這個(gè)單獨(dú)的狀態(tài)分解為多個(gè)子狀態(tài),進(jìn)而組成一個(gè)輔助圖,以定義父狀態(tài)的更為復(fù)雜的內(nèi)部行為。
部署圖(Deployment Diagram)
部署圖能夠幫助我們確定任何代碼元素在服務(wù)器、工作站和數(shù)據(jù)庫中的存放位置。有的節(jié)點(diǎn)需要依賴硬件或軟件框來運(yùn)行部分業(yè)務(wù)邏輯。這些節(jié)點(diǎn)交互作用以演示我們研發(fā)的多個(gè)電腦和系統(tǒng)是如何交互作用和集成的。節(jié)點(diǎn)中包含將部署到數(shù)據(jù)庫、應(yīng)用程式或 Web 服務(wù)器中的組件實(shí)例。
部署圖用于將組件實(shí)際部署到服務(wù)器中。通過定義希望組件運(yùn)行的位置,我們能夠快捷的映射、部署和管理分布在客戶端應(yīng)用程式和應(yīng)用程式服務(wù)器端組件之間的業(yè)務(wù)邏輯或數(shù)據(jù)庫端服務(wù)器邏輯。以下是要管理的物理體系結(jié)構(gòu)的 1:1 模型。
例如,假定我們已決定實(shí)現(xiàn)兩個(gè) Enterprise Java Beans,并且在應(yīng)用程式服務(wù)器上運(yùn)行他們。下圖顯示了單個(gè)節(jié)點(diǎn)連同該節(jié)點(diǎn)內(nèi)的兩個(gè)組件(每個(gè) EJB 一個(gè)組件)。我們能夠看出 EmployeeBean 依賴于同一應(yīng)用程式服務(wù)器內(nèi)的 CustomerBean。
結(jié)論
在我們借助用例圖、序列圖、活動(dòng)圖、類圖和組件圖完成基本 UML 建模時(shí),我們將需要其他一些工具來定義有關(guān)系統(tǒng)中某些特定元素的周詳信息。我們可能希望在對象圖中使用精確的示例來表示對象的結(jié)構(gòu),或借助于狀態(tài)圖來更多地了解在其內(nèi)部具備多個(gè)復(fù)雜狀態(tài)的類的行為。我們需要使用協(xié)作圖從結(jié)構(gòu)角度而不是從時(shí)間角度來考察系統(tǒng)組件之間的交互作用。最后,還需要使用部署圖來顯示任何系統(tǒng)組件在運(yùn)行環(huán)境中的物理硬件或服務(wù)器中所處的位置,從而更詳盡的了解分布式體系結(jié)構(gòu)的使用方式。
UML 為我們提供了更加實(shí)用的圖表,以便完成對業(yè)務(wù)邏輯的技術(shù)分析、設(shè)計(jì)、研發(fā)、或部署。將這 9 種圖表和傳統(tǒng)的數(shù)據(jù)建模方法和新的業(yè)務(wù)流程建模方法相結(jié)合,我們能夠在從高級(jí)需求到技術(shù)和數(shù)據(jù)需求,連同物理實(shí)現(xiàn)的各個(gè)方面來全面了解推動(dòng)軟件研發(fā)的任何因素
聯(lián)系客服