期待更好更穩(wěn)定的開源FrameWork的出現(xiàn),讓我們一起努力吧!  
          日歷
          <2008年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345
          統(tǒng)計(jì)
          • 隨筆 - 78
          • 文章 - 1
          • 評論 - 29
          • 引用 - 0

          導(dǎo)航

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案(42)

          文章檔案(37)

          相冊

          搜索

          •  

          積分與排名

          • 積分 - 45228
          • 排名 - 1064

          最新隨筆

          最新評論

          閱讀排行榜

          評論排行榜

           

          UML基礎(chǔ): 統(tǒng)一建模語言簡介

          developerWorks
          文選項(xiàng)
           

          級別: 初級

          Donald Bell, IBM 全球服務(wù), IBM

          2004 年 2 月 01 日

          回顧20世紀(jì)晚期--準(zhǔn)確地說是1997年,OMG組織(Object Management Group對象管理組織)發(fā)布了統(tǒng)一建模語言(Unified Modeling Language,UML)。UML的目標(biāo)之一就是為開發(fā)團(tuán)隊(duì)提供標(biāo)準(zhǔn)通用的設(shè)計(jì)語言來開發(fā)和構(gòu)建計(jì)算機(jī)應(yīng)用。UML提出了一套IT專業(yè)人員期待多年的統(tǒng)一的標(biāo)準(zhǔn)建模符號。通過使用UML,這些人員能夠閱讀和交流系統(tǒng)架構(gòu)和設(shè)計(jì)規(guī)劃--就像建筑工人多年來所使用的建筑設(shè)計(jì)圖一樣。

          到了21世紀(jì)--準(zhǔn)確地說是2003年,UML已經(jīng)獲得了業(yè)界的認(rèn)同。在我所見過的專業(yè)人員的簡歷中,75%都聲稱具備UML的知識(shí)。然而,在同絕大多數(shù)求職人員面談之后,可以明顯地看出他們并不真正了解UML。通常地,他們將UML用作一個(gè)術(shù)語,或?qū)ML一知半解。大家對UML缺乏理解的這種狀況,促進(jìn)我撰寫這篇關(guān)于UML 1.4的快速入門文章。當(dāng)閱讀完本文時(shí),您還不具備足夠的知識(shí)可以在簡歷上聲稱自己掌握了UML,但是您已具有了進(jìn)一步鉆研該語言的良好起點(diǎn)。

          正如前面曾提到過的,UML的本意是要成為一種標(biāo)準(zhǔn)的統(tǒng)一語言,使得IT專業(yè)人員能夠進(jìn)行計(jì)算機(jī)應(yīng)用程序的建模。UML的主要?jiǎng)?chuàng)始人是Jim Rumbaugh、Ivar Jacobson和Grady Booch,他們最初都有自己的建模方法(OMT、OOSE和Booch),彼此之間存在著競爭。最終,他們聯(lián)合起來創(chuàng)造了一種開放的標(biāo)準(zhǔn)。(聽起來是不是很熟悉?這個(gè)現(xiàn)象類似J2EE、SOAP和Linux的誕生。)UML成為"標(biāo)準(zhǔn)"建模語言的原因之一在于,它與程序設(shè)計(jì)語言無關(guān)。(IBM Rational的UML建模工具被廣泛應(yīng)用于J2EE和.NET開發(fā)。)而且,UML符號集只是一種語言而不是一種方法學(xué)。這點(diǎn)很重要,因?yàn)檎Z言與方法學(xué)不同,它可以在不做任何更改的情況下很容易地適應(yīng)任何公司的業(yè)務(wù)運(yùn)作方式。

           

          既然UML不是一種方法學(xué),它就不需要任何正式的工作產(chǎn)品(即IBM Rational Unified Process?術(shù)語中所定義的"工件")。而且它還提供了多種類型的模型描述圖(diagram),當(dāng)在某種給定的方法學(xué)中使用這些圖時(shí),它使得開發(fā)中的應(yīng)用程序的更易理解。UML的內(nèi)涵遠(yuǎn)不只是這些模型描述圖,但是對于入門來說,這些圖對這門語言及其用法背后的基本原理提供了很好的介紹。通過把標(biāo)準(zhǔn)的UML圖放進(jìn)您的工作產(chǎn)品中,精通UML的人員就更加容易加入您的項(xiàng)目并迅速進(jìn)入角色。最常用的UML圖包括:用例圖、類圖、序列圖、狀態(tài)圖、活動(dòng)圖、組件圖和部署圖。

          深入討論每類圖的細(xì)節(jié)問題已超出了這篇入門文章的范圍。因此,下面僅給出了每類圖的簡要說明,更詳細(xì)的信息將在以后的文章中探討。 序列圖顯示具體用例(或者是用例的一部分)的詳細(xì)流程。它幾乎是自描述的,并且顯示了流程中中不同對象之間的調(diào)用關(guān)系,同時(shí)還可以很詳細(xì)地顯示對不同對象的不同調(diào)用。

          序列圖有兩個(gè)維度:垂直維度以發(fā)生的時(shí)間順序顯示消息/調(diào)用的序列;水平維度顯示消息被發(fā)送到的對象實(shí)例。

          序列圖的繪制非常簡單。橫跨圖的頂部,每個(gè)框(參見圖4)表示每個(gè)類的實(shí)例(對象)。在框中,類實(shí)例名稱和類名稱之間用空格/冒號/空格來分隔,例如,myReportGenerator : ReportGenerator。如果某個(gè)類實(shí)例向另一個(gè)類實(shí)例發(fā)送一條消息,則繪制一條具有指向接收類實(shí)例的開箭頭的連線,并把消息/方法的名稱放在連線上面。對于某些特別重要的消息,您可以繪制一條具有指向發(fā)起類實(shí)例的開箭頭的虛線,將返回值標(biāo)注在虛線上。就我而言,我總喜歡繪制出包括返回值的虛線,這些額外的信息可以使得序列圖更易于閱讀。

          閱讀序列圖也非常簡單。從左上角啟動(dòng)序列的"驅(qū)動(dòng)"類實(shí)例開始,然后順著每條消息往下閱讀。記住:雖然圖4所示的例子序列圖顯示了每條被發(fā)送消息的返回消息,但這只是可選的。


          一個(gè)示例序列圖

          圖4:一個(gè)示例序列圖

          通過閱讀圖4中的示例序列圖,您可以明白如何創(chuàng)建一個(gè)CD銷售報(bào)告(CD Sales Report)。其中的aServlet對象表示驅(qū)動(dòng)類實(shí)例。aServlet向名為gen的ReportGenerator類實(shí)例發(fā)送一條消息。該消息被標(biāo)為generateCDSalesReport,表示ReportGenerator對象實(shí)現(xiàn)了這個(gè)消息處理程序。進(jìn)一步理解可發(fā)現(xiàn),generateCDSalesReport消息標(biāo)簽在括號中包括了一個(gè)cdId,表明aServlet隨該消息傳遞一個(gè)名為cdId的參數(shù)。當(dāng)gen實(shí)例接收到一條generateCDSalesReport消息時(shí),它會(huì)接著調(diào)用CDSalesReport類,并返回一個(gè)aCDReport的實(shí)例。然后gen實(shí)例對返回的aCDReport實(shí)例進(jìn)行調(diào)用,在每次消息調(diào)用時(shí)向它傳遞參數(shù)。在該序列的結(jié)尾,gen實(shí)例向它的調(diào)用者aServlet返回一個(gè)aCDReport。

          請注意:圖4中的序列圖相對于典型的序列圖來說太詳細(xì)了。然而,我認(rèn)為它才是足夠易于理解的,并且它顯示了如何表示嵌套的調(diào)用。對于初級開發(fā)人員來說,有時(shí)把一個(gè)序列分解到這種詳細(xì)程度是很有必要的,這有助于他們理解相關(guān)的內(nèi)容。

          狀態(tài)圖表示某個(gè)類所處的不同狀態(tài)和該類的狀態(tài)轉(zhuǎn)換信息。有人可能會(huì)爭論說每個(gè)類都有狀態(tài),但不是每個(gè)類都應(yīng)該有一個(gè)狀態(tài)圖。只對"感興趣的"狀態(tài)的類(也就是說,在系統(tǒng)活動(dòng)期間具有三個(gè)或更多潛在狀態(tài)的類)才進(jìn)行狀態(tài)圖描述。

           

          如圖5所示,狀態(tài)圖的符號集包括5個(gè)基本元素:初始起點(diǎn),它使用實(shí)心圓來繪制;狀態(tài)之間的轉(zhuǎn)換,它使用具有開箭頭的線段來繪制;狀態(tài),它使用圓角矩形來繪制;判斷點(diǎn),它使用空心圓來繪制;以及一個(gè)或者多個(gè)終止點(diǎn),它們使用內(nèi)部包含實(shí)心圓的圓來繪制。要繪制狀態(tài)圖,首先繪制起點(diǎn)和一條指向該類的初始狀態(tài)的轉(zhuǎn)換線段。狀態(tài)本身可以在圖上的任意位置繪制,然后只需使用狀態(tài)轉(zhuǎn)換線條將它們連接起來。


          顯示類通過某個(gè)功能系統(tǒng)的各種狀態(tài)的狀態(tài)圖

          圖5:顯示類通過某個(gè)功能系統(tǒng)的各種狀態(tài)的狀態(tài)圖

          圖5中的狀態(tài)圖顯示了它們可以表達(dá)的一些潛在信息。例如,從中可以看出貸款處理系統(tǒng)最初處于Loan Application狀態(tài)。當(dāng)批準(zhǔn)前(pre-approval)過程完成時(shí),根據(jù)該過程的結(jié)果,或者轉(zhuǎn)到Loan Pre-approved狀態(tài),或者轉(zhuǎn)到Loan Rejected狀態(tài)。這個(gè)判斷(它是在轉(zhuǎn)換過程期間做出的)使用一個(gè)判斷點(diǎn)來表示--即轉(zhuǎn)換線條間的空心圓。通過該狀態(tài)圖可知,如果沒有經(jīng)過Loan Closing狀態(tài),貸款不可能從Loan Pre-Approved狀態(tài)進(jìn)入Loan in Maintenance狀態(tài)。而且,所有貸款都將結(jié)束于Loan Rejected或者Loan in Maintenance狀態(tài)。

          活動(dòng)圖


          活動(dòng)圖表示在處理某個(gè)活動(dòng)時(shí),兩個(gè)或者更多類對象之間的過程控制流。活動(dòng)圖可用于在業(yè)務(wù)單元的級別上對更高級別的業(yè)務(wù)過程進(jìn)行建模,或者對低級別的內(nèi)部類操作進(jìn)行建模。根據(jù)我的經(jīng)驗(yàn),活動(dòng)圖最適合用于對較高級別的過程建模,比如公司當(dāng)前在如何運(yùn)作業(yè)務(wù),或者業(yè)務(wù)如何運(yùn)作等。這是因?yàn)榕c序列圖相比,活動(dòng)圖在表示上"不夠技術(shù)性的",但有業(yè)務(wù)頭腦的人們往往能夠更快速地理解它們。

          活動(dòng)圖的符號集與狀態(tài)圖中使用的符號集類似。像狀態(tài)圖一樣,活動(dòng)圖也從一個(gè)連接到初始活動(dòng)的實(shí)心圓開始。活動(dòng)是通過一個(gè)圓角矩形(活動(dòng)的名稱包含在其內(nèi))來表示的。活動(dòng)可以通過轉(zhuǎn)換線段連接到其他活動(dòng),或者連接到判斷點(diǎn),這些判斷點(diǎn)連接到由判斷點(diǎn)的條件所保護(hù)的不同活動(dòng)。結(jié)束過程的活動(dòng)連接到一個(gè)終止點(diǎn)(就像在狀態(tài)圖中一樣)。作為一種選擇,活動(dòng)可以分組為泳道(swimlane),泳道用于表示實(shí)際執(zhí)行活動(dòng)的對象,如圖6所示。

          組件圖

          組件圖提供系統(tǒng)的物理視圖。它的用途是顯示系統(tǒng)中的軟件對其他軟件組件(例如,庫函數(shù))的依賴關(guān)系。組件圖可以在一個(gè)非常高的層次上顯示,從而僅顯示粗粒度的組件,也可以在組件包層次2上顯示。

           

          組件圖的建模最適合通過例子來描述。圖7顯示了4個(gè)組件:Reporting Tool、Billboard Service、Servlet 2.2 API和JDBC API。從Reporting Tool組件指向Billboard Service、Servlet 2.2 API和JDBC API組件的帶箭頭的線段,表示Reporting Tool依賴于那三個(gè)組件。


          組件圖顯示了系統(tǒng)中各種軟件組件的依賴關(guān)系

          圖7:組件圖顯示了系統(tǒng)中各種軟件組件的依賴關(guān)系

          部署圖


          部署圖表示該軟件系統(tǒng)如何部署到硬件環(huán)境中。它的用途是顯示該系統(tǒng)不同的組件將在何處物理地運(yùn)行,以及它們將如何彼此通信。因?yàn)椴渴饒D是對物理運(yùn)行情況進(jìn)行建模,系統(tǒng)的生產(chǎn)人員就可以很好地利用這種圖。

          部署圖中的符號包括組件圖中所使用的符號元素,另外還增加了幾個(gè)符號,包括節(jié)點(diǎn)的概念。一個(gè)節(jié)點(diǎn)可以代表一臺(tái)物理機(jī)器,或代表一個(gè)虛擬機(jī)器節(jié)點(diǎn)(例如,一個(gè)大型機(jī)節(jié)點(diǎn))。要對節(jié)點(diǎn)進(jìn)行建模,只需繪制一個(gè)三維立方體,節(jié)點(diǎn)的名稱位于立方體的頂部。所使用的命名約定與序列圖中相同:[實(shí)例名稱] : [實(shí)例類型](例如,"w3reporting.myco.com : Application Server")。


          部署圖

          圖8:部署圖。由于Reporting Tool組件繪制在IBM WebSphere內(nèi)部,后者又繪制在節(jié)點(diǎn)w3.reporting.myco.com內(nèi)部,因而我們知道,用戶將通過運(yùn)行在本地機(jī)器上的瀏覽器來訪問Reporting Tool,瀏覽器通過公司intranet上的HTTP協(xié)議與Reporting Tool建立連接。

          圖8中的部署圖表明,用戶使用運(yùn)行在本地機(jī)器上的瀏覽器訪問Reporting Tool,并通過公司intranet上的HTTP協(xié)議連接到Reporting Tool組件。這個(gè)工具實(shí)際運(yùn)行在名為w3reporting.myco.com的Application Server上。這個(gè)圖還表明Reporting Tool組件繪制在IBM WebSphere內(nèi)部,后者又繪制在w3.reporting.myco.com節(jié)點(diǎn)內(nèi)部。Reporting Tool使用Java語言通過IBM DB2數(shù)據(jù)庫的JDBC接口連接到它的報(bào)告數(shù)據(jù)庫上,然后該接口又使用本地DB2通信方式,與運(yùn)行在名為db1.myco.com的服務(wù)器上實(shí)際的DB2數(shù)據(jù)庫通信。除了與報(bào)告數(shù)據(jù)庫通信外,Report Tool組件還通過HTTPS上的SOAP與Billboard Service進(jìn)行通信。



          posted on 2008-06-26 22:42 BlueSky_itwangxinli 閱讀(405) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
           
          Copyright © BlueSky_itwangxinli Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 苍溪县| 青浦区| 临沧市| 新疆| 吉首市| 定南县| 盐源县| 讷河市| 黎川县| 湖州市| 庐江县| 宁晋县| 军事| 淅川县| 德清县| 广安市| 乾安县| 平昌县| 肇东市| 阿勒泰市| 衡阳市| 山阳县| 庐江县| 南乐县| 康马县| 玛多县| 金坛市| 宜阳县| 宜州市| 武定县| 石阡县| 若尔盖县| 宁城县| 庆安县| 任丘市| 沧州市| 弥勒县| 汕头市| 平阳县| 土默特右旗| 舒兰市|