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