何 鋒
(云南財(cái)經(jīng)大學(xué)信息學(xué)院,云南昆明 650221)
順序圖在軟件工程實(shí)踐中的演化作用分析
何 鋒
(云南財(cái)經(jīng)大學(xué)信息學(xué)院,云南昆明 650221)
以苗圃管理系統(tǒng)的設(shè)計(jì)為例,從類圖及其對應(yīng)的程序代碼引申出順序圖,再進(jìn)一步演化出協(xié)作圖、活動圖、狀態(tài)圖和部署圖,為軟件工程設(shè)計(jì)的實(shí)踐化方法提供了有效的途徑,有利于設(shè)計(jì)工作的開展.
軟件工程;苗圃管理系統(tǒng);順序圖;演化式設(shè)計(jì)
軟件工程包含了技術(shù)和管理 2個方面的內(nèi)容,是管理與技術(shù)的緊密結(jié)合[1].其本身的特點(diǎn)決定了它不是完全可以從書本和課堂上學(xué)會,理解和實(shí)踐是非常重要的.在實(shí)際的“動手做”和“真正練”中體會和掌握軟件工程的設(shè)計(jì)思想,將當(dāng)前軟件企業(yè)的實(shí)際案例融入在基本原理的學(xué)習(xí)和設(shè)計(jì)之中,才能縮短與實(shí)際的軟件工程實(shí)踐的明顯差距.
目前,使用的最廣泛的軟件工程方法學(xué)主要是傳統(tǒng)方法學(xué)和面向?qū)ο蠓椒▽W(xué).傳統(tǒng)方法學(xué)在分析和設(shè)計(jì)上主要用到了 E-R圖、DFD圖、IPO表和數(shù)據(jù)字典卡片;而面向?qū)ο蠓椒▽W(xué)在分析和設(shè)計(jì)上主要采用的是 UML圖.隨著面向?qū)ο蠓椒▽W(xué)在軟件研發(fā)過程中的越來越深入人心,面向?qū)ο蠹夹g(shù)也就成為當(dāng)前最好的軟件開發(fā)技術(shù),而由此也使得 UML圖的作用也就越來越重要了.
UML(Unified Modeling Language)是一種標(biāo)準(zhǔn)的圖形化 (即可視化)建模語言,它可以為具有靜態(tài)結(jié)構(gòu)和動態(tài)行為的系統(tǒng)建立模型.它的重要性在于表示方法的標(biāo)準(zhǔn)化有效地促進(jìn)了不同背景的人們的交流,有效地促進(jìn)了軟件分析、設(shè)計(jì)、編碼和測試人員的相互理解[1].
UML由圖和元模型組成.圖是 UML的語法,而元模型給出圖的含義,是 UML的語義.其中,UML的主要內(nèi)容可以用 5類圖 (共 9種圖形)來定義[1],即:①用例圖 (Use-Case Diagram);②靜態(tài)圖 (Static Diagram),包括:類圖 (Class Diagram)和對象圖 (ObjectDiagram);③行為圖 (Behavior Diagram),包括:狀態(tài)圖 (State Diagram)和活動圖 (ActivityDiagram);④交互圖 (Interactive Diagram),包括:順序圖 (Sequence Diagram)和協(xié)作圖 (Collaboration Diagram);⑤實(shí)現(xiàn)圖 ( Implementation Diagram),包括:構(gòu)件圖(Component Diagram)和配置圖 (Deployment Diagram).這里主要關(guān)注的是順序圖.
順序圖描述對象之間的動態(tài)交互關(guān)系,著重表現(xiàn)對象間消息傳遞的時間順序.順序圖的縱向表示時間,橫向表示不同的對象.瀏覽順序圖的方法是,由上至下 (按時間順序)、從左到右地查看對象間交換的消息.
對象間的通信用對象生命線之間的水平消息線來表示,消息箭頭的形狀表示消息的類型 (同步、異步或簡單).當(dāng)收到消息時,接收對象立即開始執(zhí)行活動,即對象被激活了.激活用對象生命線上的細(xì)長矩形框表示.消息通常用消息名和參數(shù)表來標(biāo)識.消息還可以帶有條件表達(dá)式,用以表示分支或決定是否發(fā)消息.如果用條件表達(dá)式表示分支,則會有若干個互斥的箭頭,也就是說,在某一時刻盡可發(fā)送分支中的 1個消息.
在面向?qū)ο蠼<夹g(shù)中,將建立起 3種模型:對象模型、動態(tài)模型和功能模型.其中的動態(tài)模型表示了瞬時的、行為化的系統(tǒng)的“控制”性質(zhì),它規(guī)定了對象模型中的對象的合法變化序列.而順序圖在其中就起著至關(guān)重要的作用,它將顯示若干個對象之間的協(xié)作關(guān)系,強(qiáng)調(diào)對象之間發(fā)送消息的先后順序,描述對象間的交互過程.同時,根據(jù)順序圖,我們還可以演化出狀態(tài)圖和活動圖來.
順序圖在面向?qū)ο髣討B(tài)建模技術(shù)中占至關(guān)重要的作用,它著重表現(xiàn)對象間消息傳遞的時間順序,這對軟件項(xiàng)目的進(jìn)度控制和里程碑管理起到很好的指導(dǎo)作用.本文以苗圃管理系統(tǒng)的設(shè)計(jì)為例,從類圖及其對應(yīng)的程序代碼引申出順序圖,再進(jìn)一步演化出協(xié)作圖、活動圖、狀態(tài)圖和部署圖,這為軟件工程設(shè)計(jì)的實(shí)踐化方法提供了有效的途徑,有利于設(shè)計(jì)工作的開展.
在苗圃管理系統(tǒng)的分析設(shè)計(jì)中,可以把參與者分為 3個大類:客戶大類、苗圃員丁大類和苗木大類.其中,客戶大類可分為:新客戶和老客戶;苗圃員丁大類又分為:普通員工類、主管員工類和系統(tǒng)管理員類;苗木大類可分為:喬灌木類、移栽大樹類、扦插小苗類、樹樁盆景類、竹類植物類、藤本植物類、草本花卉類、草皮草種類、造林苗類、新優(yōu)果苗類和種籽種苗類等.為了講解方便,這里主要關(guān)注苗木大類中的喬灌木類 (以銀杏為例)、樹樁盆景類 (以羅漢松為例)和造林苗類 (以馬尾松為例).
在苗木類 (Seedlings)的設(shè)計(jì)中,應(yīng)該有 2個可訪問性為 private的數(shù)據(jù)成員 input和 seedlingsName,分別用于存儲苗木的投入和苗木的名稱,因?yàn)樵撍接谐蓡T僅供在 Seedlings類內(nèi)部使用,所以受到嚴(yán)格的保護(hù).Seedlings類的函數(shù)成員包括:構(gòu)造函數(shù) Seedlings和 3個方法 grow、harvest和 gain,他們是公有成員,可訪問性為 public,可以被外部其他對象調(diào)用.Grow和 harvest方法實(shí)現(xiàn)了苗木生長和收獲的操作.Gain方法則計(jì)算并返回培育苗木的收益(這里假設(shè)收益是投入的 2倍).
另外,還需要設(shè)計(jì)有 1個園丁類 (Gardener),它顯示了園丁的工作是培育喬灌木中的銀杏 (ginkgo)、樹樁盆景中的羅漢松 (podocarpus)和造林苗中的馬尾松 (pinus)等苗木.Plant和 gain方法是私有方法,說明它只能在 Gardener類中內(nèi)部使用;work方法是公有的,它可以對外公開,它調(diào)用了私有的plant和 gain方法作為其工作的一部分.Gardener的gardenerName是私有的,該信息對外部是隱匿的,不能隨意修改.所設(shè)計(jì)的園丁類 (Gardener)和苗木類(Seedlings)見圖 1所示.
在設(shè)計(jì)過程中,一個苗圃管理系統(tǒng)程序雖然是由Gardener和 Seedlings這 2個類組成,但是卻產(chǎn)生了gardener,ginkgo,podocarpus和 pinus 4個交互對象,因此苗圃管理系統(tǒng)程序是這 4個交互對象集合.他們的交互過程可以由UML順序圖來表示,見圖2所示.
順序圖給出了一組對象之間發(fā)生的交互順序,標(biāo)出了涉及對象以及這些對象之間傳遞的消息類型.順序圖的水平軸表示不同的對象,垂直軸表示時間.順序圖用帶標(biāo)簽的矩形表示對象,對象可以接受和發(fā)送消息.每個對象下方顯示一個虛線標(biāo)出的對象生命線,表示該對象的生存時間.生命線上包括有一些矩形的激活,表示對象某個交互動作的活動時間.對象與對象生命線之間的箭頭表示對象間的消息發(fā)送.
在圖2中,gardener對象向 ginkgo對象發(fā)送 1條 grow消息,則表示為從 gardener對象生命線指向ginkgo對象生命線的標(biāo)記為 grow的箭頭.這也可以理解成 gardener對象調(diào)用了 ginkgo對象的 grow方法,因?yàn)榉椒ㄕ{(diào)用是對象間傳遞消息的機(jī)制.如果對象是與自身通信而發(fā)送消息,則箭頭指向自己的生命線,例如 gardener對象發(fā)送給自己的 plant消息,即 gardener對象調(diào)用了自己的 plant方法.另外順序圖中還可以看出對象的依存關(guān)系.在圖2中,gardener對象通過構(gòu)造函數(shù)創(chuàng)建了 ginkgo對象,在圖上表示為 ginkgo對象收到消息后被創(chuàng)建激活.最后,我們還注意到順序圖有一個 actor角色,該角色是系統(tǒng)外部的使用者,負(fù)責(zé)激活系統(tǒng)對象.在圖中,該角色名為 main,即指啟動程序的 main方法.
我們除了把順序圖設(shè)計(jì)得很詳細(xì),讓它與程序代碼對應(yīng)起來之外,還要把順序圖設(shè)計(jì)得很抽象,讓它對苗圃管理系統(tǒng)中的一些典型的工作流程進(jìn)行描述.有了這樣的既宏觀,又微觀地設(shè)計(jì)順序圖之后,對開發(fā)后繼設(shè)計(jì)過程的理解是相當(dāng)有幫助的.
以客戶訂購苗木以例,其工作流程為:客戶在瀏覽器上,進(jìn)入相應(yīng)的苗圃管理系統(tǒng)網(wǎng)站,瀏覽相關(guān)的苗木列表,選擇所需的苗木,其訂購信息就會通過網(wǎng)絡(luò)傳遞到Web/App應(yīng)用服務(wù)器,到 DBMS數(shù)據(jù)庫服務(wù)器中進(jìn)行存儲,并把存儲后的確認(rèn)信息顯示到客戶所在的瀏覽器界面上.客戶再通過手機(jī)等通訊工具提醒苗圃的管理人員,并把相應(yīng)的款項(xiàng)劃撥到苗圃的銀行賬號上.苗圃的管理人員收到這些信息后,對苗圃管理系統(tǒng)中的相關(guān)信息進(jìn)行登記、編輯、統(tǒng)計(jì)、審核和確認(rèn),直到整個交易的完成.其所對應(yīng)的順序圖見圖3所示.
順序圖在動態(tài)建模過程中意義重大,我們在描述 Gardener類的基礎(chǔ)上建立了順序圖,描述了類實(shí)例的生命周期運(yùn)行情況,由于順序圖和協(xié)作圖是可以相互轉(zhuǎn)化的,故可以很快地設(shè)計(jì)出相應(yīng)的協(xié)作圖來,見圖4所示.協(xié)作圖則描述了對象按照消息順序進(jìn)行的相互協(xié)作過程.協(xié)作圖的重點(diǎn)是通過消息流的形式給出了對象之間的交互細(xì)節(jié).在從順序圖中演化出狀態(tài)圖和活動圖的過程中,對象與對象生命線之間的箭頭 (即為對象間的消息)表示的是一個個的活動,從順序圖中當(dāng)前所考慮的激活上射出的箭頭線 (即消息),是這條激活上的對象達(dá)到某個狀態(tài)時所做的行為.每一條消息就是一個活動或事件,由此,在 Gardener類的基礎(chǔ)上再結(jié)合 Seedlings類,參照實(shí)際苗木的生長周期和培育工作流程,可以設(shè)計(jì)出活動圖來,見圖5所示.
由于 2個事件之間的間隔就是 1個狀態(tài),同一個對象對相同的事件有不同的響應(yīng),則對象所處的狀態(tài)也不同,故也可以結(jié)合活動圖,設(shè)計(jì)出狀態(tài)圖,見圖6所示.
同樣,結(jié)合圖3所設(shè)計(jì)的比較宏觀抽象的順序圖,也可以設(shè)計(jì)出部署圖,見圖7所示.由以上各種UML圖的演化過程中,我們可以發(fā)現(xiàn)到這樣的一些規(guī)則:在經(jīng)過可行性論證和對用戶的需求進(jìn)行深入分析后,設(shè)計(jì)出系統(tǒng)的用例圖和類圖 /對象圖后,將工作重點(diǎn)逐漸移向順序圖的設(shè)計(jì)上.隨后,根據(jù)對象按照消息順序進(jìn)行的相互協(xié)作過程,將順序圖中的各個對象由時間關(guān)系映射到空間關(guān)系,建立起協(xié)作圖來.再關(guān)注過程中各個對象的狀態(tài)演變和各個狀態(tài)切換之間的動作,設(shè)計(jì)出狀態(tài)圖和活動圖來.最后,結(jié)合基于計(jì)算機(jī)系統(tǒng)的各種組成元素和Web工程設(shè)計(jì)的理念,構(gòu)建出宏觀意義上的順序圖和部署圖來.
總之,在軟件系統(tǒng)的開發(fā)設(shè)計(jì)過程中,通過順序圖,逐步從抽象的 UML圖到具體的代碼實(shí)現(xiàn),再由具體的代碼演化出其它更高層次抽象的UML圖來,達(dá)到了舉一反三的演化效果,這有利于軟件工程過程在執(zhí)行過程中的前后連貫和融會貫通.
[1]張海藩.軟件工程 [M].2版.北京:人民郵電出版社,2009.
[2]劉藝.Java程序設(shè)計(jì)大學(xué)教程[M].北京:機(jī)械工業(yè)出版社,2006.
[3]冀振燕.UML系統(tǒng)分析與設(shè)計(jì)教程 [M].北京:人民郵電出版社,2009.
[4]賁可榮,何智勇.軟件工程—基于項(xiàng)目的面向?qū)ο笱芯糠椒╗M].北京:機(jī)械工業(yè)出版社,2009.
[5]鄭人杰,馬素霞,殷人昆,等.軟件工程概述 [M].北京:機(jī)械工業(yè)出版社,2010.
[6]何偉,趙昆.基于UML的超市移動商務(wù)系統(tǒng)分析與設(shè)計(jì)[J].云南民族大學(xué)學(xué)報(bào):自然科學(xué)版,2009,18(4):372-374,382.
[7]吳波,郭素敏.工作流技術(shù)在軟件測試中的應(yīng)用 [J].云南民族大學(xué)學(xué)報(bào):自然科學(xué)版,2009,18(2):169-172.
[8]陳江,陳建國,陸慧娟,等.UML時間順序圖的實(shí)時系統(tǒng)建模及驗(yàn)證[J].中國計(jì)量學(xué)院學(xué)報(bào),2010,21(1):46-51.
[9]張敏輝,唐慧佳,楊劍.基于網(wǎng)絡(luò)的采購系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].云南民族大學(xué)學(xué)報(bào):自然科學(xué)版,2005,14(4):346-348.
[10]侯劍,李斌,潘文林.WEB網(wǎng)絡(luò)考試系統(tǒng)實(shí)現(xiàn)技術(shù)研究[J].云南民族大學(xué)學(xué)報(bào):自然科學(xué)版,2004,13(2):116-117,121.
[11]劉會然,潘文林.云南民族大學(xué)科技處經(jīng)費(fèi)管理系統(tǒng)設(shè)計(jì)[J].云南民族大學(xué)學(xué)報(bào):自然科學(xué)版,2004,13(1):68-69,72.
[12]趙波,張玉琢,夏幼明.基于 UML的整體與部分關(guān)系的可視化表示研究 [J].云南師范大學(xué)學(xué)報(bào):自然科學(xué)版,2007,27(5):25-29.
(責(zé)任編輯莊紅林)
The Evolutionary Role of Sequence Diagram in Software Engineering Application
HE Feng
(Information College,Yunnan University of Finance and Economics,Kunming 650221,China)
This paper uses the nursery management system as a case study, and then goes through the class diagram and derives the corresponding code sequence diagram , collaboration diagram , activity diagram , state diagram and dep loyment p lan, which help s imp rove the software engineering app lication.
software engineering; nursery management system; sequence diagram; evolutionary designing
TP 311.5
A
1672-8513(2011)01-0058-05
10.3969/j.issn.1672-8513.2011.01.014
2010-09-25.
云南省自然科學(xué)基金 (2006F0047M).
何鋒 (1973-),男 (白族),碩士,講師.主要研究方向:軟件工程與計(jì)算智能.