舒毅,粟福嵩,楊書
(廣西科技大學(xué)第一附屬醫(yī)院 信息科,廣西 柳州 545002)
摘要:構(gòu)件化軟件開發(fā)是實(shí)現(xiàn)軟件標(biāo)準(zhǔn)化生產(chǎn)和流水化作業(yè)的前提條件?;跇?gòu)件化的軟件開發(fā)設(shè)計(jì)思想與建筑工程或機(jī)械工程的設(shè)計(jì)思想頗為相似,但在實(shí)際的軟件開發(fā)中,軟件可視化的構(gòu)件設(shè)計(jì)思想沒有建筑工程和機(jī)械工程領(lǐng)域的可視化設(shè)計(jì)這樣規(guī)范。如果將可視化的工程設(shè)計(jì)原則應(yīng)用到構(gòu)件化的軟件開發(fā)設(shè)計(jì)中,將對(duì)軟件開發(fā)工作大有益處。
關(guān)鍵詞:構(gòu)件化軟件設(shè)計(jì);可視化;JavaBean;
中圖分類號(hào):TP311.11文獻(xiàn)標(biāo)識(shí)碼:ADOI: 10.19358/j.issn.1674-7720.2016.24.008
引用格式:舒毅,粟福嵩,楊書. 構(gòu)件化軟件開發(fā)可視化設(shè)計(jì)研究[J].微型機(jī)與應(yīng)用,2016,35(24):25-29.
0引言
構(gòu)件化軟件開發(fā)設(shè)計(jì)[1]思想已被提出相當(dāng)長(zhǎng)一段時(shí)間,它與機(jī)械工程設(shè)計(jì)思想頗為相似,即通過(guò)零部件的生產(chǎn)裝配實(shí)現(xiàn)一個(gè)預(yù)期的生產(chǎn)系統(tǒng)。構(gòu)件化設(shè)計(jì)通過(guò)構(gòu)件復(fù)用(Reuse)和感知互動(dòng)(Perception Interactive)的特性使得軟件生產(chǎn)的效率和產(chǎn)品質(zhì)量大大提高,構(gòu)件化設(shè)計(jì)最終要實(shí)現(xiàn)的目標(biāo)是讓軟件能夠像硬件一樣可以組裝,像硬件一樣可以實(shí)現(xiàn)流水線作業(yè)。
在構(gòu)件化的軟件設(shè)計(jì)中,把一個(gè)軟件系統(tǒng)視為由N個(gè)構(gòu)件組裝而成的。每個(gè)構(gòu)件是由若干模塊組成的,每個(gè)模塊又由代碼行或函數(shù)組成。構(gòu)件與構(gòu)件之間以約定的接口進(jìn)行拼接。如此,一個(gè)軟件系統(tǒng)的開發(fā)設(shè)計(jì)工作可以分解為系統(tǒng)構(gòu)件的開發(fā)設(shè)計(jì)。而軟件構(gòu)件的開發(fā)設(shè)計(jì)采用圖形化的方法,一方面使系統(tǒng)的搭建更加方便和快捷;另一方面使得軟件開發(fā)設(shè)計(jì)更加直觀,便于開發(fā)團(tuán)隊(duì)的協(xié)同工作,有利于實(shí)現(xiàn)軟件開發(fā)流水線作業(yè)。
因此構(gòu)件化軟件開發(fā)可視化設(shè)計(jì)、標(biāo)準(zhǔn)化定義、層次化劃分是真正讓軟件系統(tǒng)能夠像實(shí)體工程那樣做到開工之前詳分析、生產(chǎn)加工有依據(jù)、質(zhì)量評(píng)估有標(biāo)準(zhǔn)、維護(hù)改造心中有數(shù)的有效方法。
1構(gòu)件可視化設(shè)計(jì)的形成
基于構(gòu)件的軟件系統(tǒng)開發(fā)中,構(gòu)件與軟件系統(tǒng)的關(guān)系就如同一臺(tái)機(jī)器與其零部件之間的關(guān)系。一臺(tái)機(jī)器在生產(chǎn)和加工之前,小到一顆螺絲,大到一個(gè)部件,每一步都有可視化的標(biāo)準(zhǔn)和依據(jù)。同理,軟件系統(tǒng)生產(chǎn)在開始著手代碼編寫之前,也有必要將構(gòu)件的標(biāo)準(zhǔn)和依據(jù)與系統(tǒng)集成模型用可視化的方式呈現(xiàn)出來(lái)。
多年以來(lái)無(wú)論是系統(tǒng)圖還是流程圖[2]都是以圖1所示的方式呈現(xiàn),如果從系統(tǒng)輪廓的角度來(lái)看,圖1也是可以滿足開發(fā)要求的,但是要將其上升至工程的視角,則還存在許多改進(jìn)之處。
圖1是某培訓(xùn)中心管理信息系統(tǒng)的數(shù)據(jù)流圖。第一,圖形的可讀性差,版面設(shè)計(jì)凌亂,方向忽左忽右,忽上忽下。第二,文字標(biāo)注不合理,如:圓圈內(nèi)的文字都表示的某一個(gè)處理的動(dòng)作,可是命名卻是以該動(dòng)作的結(jié)果描述。第三,圖形缺少層次感,缺少可以剖開的斷面,如果是更為復(fù)雜的流程圖,難以在一張圖紙上描述所有的內(nèi)容。第四,圓圈代表了一個(gè)個(gè)的構(gòu)件,對(duì)于構(gòu)件的特征沒有很好的描述,沒有進(jìn)行有效的分類,使得構(gòu)件的利用率降低。第五,從圖中無(wú)法體現(xiàn)出該項(xiàng)目的規(guī)模和項(xiàng)目的控制點(diǎn),不利于圖1某培訓(xùn)中心管理信息系統(tǒng)的數(shù)據(jù)流圖軟件開發(fā)項(xiàng)目的組織生產(chǎn)。下面針對(duì)圖1的問題進(jìn)行構(gòu)件可視化的改造。
1.1格式化數(shù)據(jù)流圖
將圖1中所有圓圈的數(shù)據(jù)加工體抽象成一個(gè)類似管道多通的數(shù)據(jù)轉(zhuǎn)換構(gòu)件,并對(duì)構(gòu)件的功能結(jié)構(gòu)、層級(jí)關(guān)系、構(gòu)件代碼進(jìn)行標(biāo)準(zhǔn)化的描述。這樣做目的是,(1)對(duì)數(shù)據(jù)構(gòu)件的復(fù)用提供一個(gè)通用的命名規(guī)則;(2)便于數(shù)據(jù)構(gòu)件分類,利于歸檔檢索;(3)通過(guò)名字將功能和功能的說(shuō)明分開,明確數(shù)據(jù)的動(dòng)態(tài)和靜態(tài)屬性;(4)將數(shù)據(jù)流向標(biāo)識(shí)轉(zhuǎn)化成數(shù)據(jù)構(gòu)件輸入和輸出元素。讓圖形更簡(jiǎn)潔,層次更清晰。
1.2構(gòu)件編碼格式
確定圖2所示的構(gòu)件編碼格式。
圖2構(gòu)件編碼格式對(duì)構(gòu)件編碼,除了可以通過(guò)構(gòu)件直觀地識(shí)別構(gòu)件類型外,還可以讓構(gòu)件易于自動(dòng)化檢索,易于比對(duì)構(gòu)件之間的相似度,利于代碼的復(fù)用。
構(gòu)件的編碼事實(shí)上還需考慮諸如操作系統(tǒng)、開發(fā)環(huán)境、輸入/輸出的數(shù)據(jù)類型、B/S或C/S架構(gòu)等一系列的開發(fā)和應(yīng)用環(huán)境因素。通過(guò)編碼的作用使得多個(gè)構(gòu)件形成一本構(gòu)件字典。再通過(guò)構(gòu)件字典,使得軟件生產(chǎn)企業(yè)能夠像工程裝配一樣在短時(shí)間內(nèi)高效生產(chǎn)出軟件產(chǎn)品。
1.3創(chuàng)建構(gòu)件明細(xì)表
建立表1所示的構(gòu)件明細(xì)表。
2舉例
將某培訓(xùn)中心管理信息系統(tǒng)的數(shù)據(jù)流圖格式化后的形態(tài)如圖3所示。
對(duì)格式化后的流程圖分析如下:
第一,將圖1中的數(shù)據(jù)流的方向統(tǒng)一,強(qiáng)制性規(guī)定數(shù)據(jù)傳輸方向只允許由左至右或者由上至下的方向,使得整個(gè)數(shù)據(jù)流程圖的可讀性大大增強(qiáng)。第二,圖形的層次感增強(qiáng),條理清晰。第三,利于團(tuán)隊(duì)協(xié)同工作,既有利于項(xiàng)目合理分工,也有利于軟件審計(jì)工作開展。第四,利用層次關(guān)系可以形成斷面,這樣對(duì)于在一張圖紙上無(wú)法描述所有流程和功能的情況,通過(guò)設(shè)置適當(dāng)?shù)臄嗝妫脠D紙索引可將其分開繪制。第五,圖中適當(dāng)?shù)恼f(shuō)明也可補(bǔ)充圖形無(wú)法表述的內(nèi)容。第六,通過(guò)圖號(hào)、構(gòu)件號(hào)將零散的構(gòu)件有機(jī)地連成一體,形成一套完整的軟件項(xiàng)目概要設(shè)計(jì)檔案。
2.1構(gòu)件創(chuàng)建實(shí)例
構(gòu)件(Component)從外觀形態(tài)上看就是一個(gè)具有輸入或者輸出功能的獨(dú)立的生產(chǎn)部件。不管是Microsoft公司所描述的COM,還是Sun公司所描述的JavaBean以及OMG組織所提到的CORBA,其目的和作用都是封裝和復(fù)用。
構(gòu)件設(shè)計(jì)與整個(gè)系統(tǒng)開發(fā)和使用環(huán)境息息相關(guān),上述三家公司在構(gòu)件的運(yùn)行機(jī)制和構(gòu)造技術(shù)上各有不同。COM構(gòu)件定義了客戶與構(gòu)件之間互操作的標(biāo)準(zhǔn),是一種以組件為發(fā)布單元的對(duì)象模型,這種模型使得各個(gè)軟件組件可以用一種統(tǒng)一的方式進(jìn)行交互。JavaBean是一種Java語(yǔ)言寫成的可重用組件[3],作為一個(gè)特殊的Java類,使用Java語(yǔ)言書寫并且遵守JavaBean API規(guī)范。開發(fā)者可以用JavaBean構(gòu)造器中的工具對(duì)其直接進(jìn)行可視化操作。JavaBean有3個(gè)接口面,可以獨(dú)立進(jìn)行開發(fā),包含可以調(diào)用的方法、提供的可讀寫的屬性及向外部發(fā)送或從外部接收的事件。公共對(duì)象請(qǐng)求代理體系結(jié)構(gòu)或通用對(duì)象請(qǐng)求代理體系結(jié)構(gòu)(Common Object Request Broker Architecture,CORBA)是由OMG組織制訂的一種標(biāo)準(zhǔn)的面向?qū)ο蟮膽?yīng)用程序體系規(guī)范,它包含對(duì)象請(qǐng)求代理ORB、對(duì)象服務(wù)、公共設(shè)施、域接口和應(yīng)用接口這幾部分,其核心是對(duì)象請(qǐng)求代理ORB。
以JavaBean的構(gòu)件創(chuàng)建方法為例,在表1中任選一個(gè)構(gòu)件0102010301,其代碼設(shè)計(jì)如下:
//創(chuàng)建JavaBean圖3將某培訓(xùn)中心管理信息系統(tǒng)的關(guān)聯(lián)圖格式化后的形態(tài)表1構(gòu)件明細(xì)表LayerCodeFunctionNameInput_dataOutput_data10102010301收集信息兩進(jìn)一出三通電子郵件、信函事務(wù)信息20202040601分類事務(wù)兩進(jìn)四出六通事務(wù)信息、學(xué)費(fèi)查詢請(qǐng)求、報(bào)名請(qǐng)求、
學(xué)費(fèi)、注銷請(qǐng)求30301030401處理注銷一進(jìn)三出四通注銷請(qǐng)求課程、注銷通知單、學(xué)生30301020302處理學(xué)費(fèi)一進(jìn)兩出三通學(xué)費(fèi)收據(jù)、收費(fèi)30301010203處理查詢一進(jìn)一出直通查詢請(qǐng)求回答信息40402030501處理報(bào)名兩進(jìn)三出五通報(bào)名請(qǐng)求、收費(fèi)注冊(cè)單、課程、學(xué)生50501010201產(chǎn)生收費(fèi)單一進(jìn)一出直通注冊(cè)單收費(fèi)單60603030601復(fù)審單據(jù)三進(jìn)三出六通注銷通知單、
收據(jù)、收費(fèi)單收據(jù)、入學(xué)通知單、
注銷通知單
Package cn.lyyfy.stuinfo;
Public class CollectInformation
{
Private String email;
Private String letter;
Public CollectInformation()
{
}
Public void setEmail (String email)
{
this.email =email;
}
Public void setLetter (Stringletter)
{
this.letter = letter;
}
Public String getEmail()
{
return this.email;
}
Public String getLetter()
{
return this.letter;
}
Public String outTransactionInformation()
{
return transactioninformation;
}
}
2.2構(gòu)件的聯(lián)結(jié)與集成的可視化設(shè)計(jì)
以JavaBean構(gòu)件為例代碼如下:
<!-- 聲明JavaBean對(duì)象 -->
<jsp:useBean id=”collinfo”
scope=”page”class=”n.lyyfy.stuinfo. ollectInformation”/>
<!-- 設(shè)置對(duì)象屬性 -->
<jsp:setProperty name=”collinfo”
property=”email”value=”610623429@qq.com”/>
<jsp:setProperty name=”collinfo”
property=”letter” value=”廣科大一附院”/>
<!-- 獲取對(duì)象屬性 -->
<jsp:getProperty name=" collinfo " property="email" />
<jsp:getProperty name=" collinfo " property="letter" />
<!-- 獲取事務(wù)信息 -->
<%=collinfo.outTransactionInformation()%>
通過(guò)上述構(gòu)件可視化的演變,最終封裝了一個(gè)圖4所示的邊界清楚、功能明確的構(gòu)件。從圖4中的可視化構(gòu)件實(shí)體可以推演出,每一個(gè)構(gòu)件都是在數(shù)據(jù)的輸入和輸出之間圖40102010301號(hào)構(gòu)件可視化代碼演變進(jìn)行了必要的生產(chǎn)加工,構(gòu)件之間的區(qū)別體現(xiàn)在輸入和輸出之間端口數(shù)量上和具體數(shù)據(jù)加工環(huán)節(jié)的區(qū)別,但是在構(gòu)件的實(shí)現(xiàn)框架和內(nèi)部邏輯關(guān)系具有極高的相似性。由此可見,構(gòu)件可視化設(shè)計(jì)的好處,一是在軟件工程從概要設(shè)計(jì)到詳細(xì)設(shè)計(jì)之間的過(guò)渡越來(lái)越直觀、具體;二是構(gòu)件和構(gòu)件之間的邊界越來(lái)越清晰;三是構(gòu)件的可視化設(shè)計(jì)可以映射到構(gòu)件代碼的設(shè)計(jì),直至映射到項(xiàng)目工程的實(shí)現(xiàn);四是利用構(gòu)件組成的一般性特點(diǎn)將封裝[4]的可視化構(gòu)件有序地進(jìn)行編目可以形成一本可視化的構(gòu)件工程圖紙。
3構(gòu)件可視化設(shè)計(jì)與傳統(tǒng)的UML規(guī)范圖形的關(guān)系
統(tǒng)一建模語(yǔ)言(Unified Modeling Language,UML)又稱標(biāo)準(zhǔn)建模語(yǔ)言,是一個(gè)支持模型化軟件系統(tǒng)開發(fā)的圖形化語(yǔ)言。UML從考慮系統(tǒng)的不同角度出發(fā),定義了用例圖、類圖、對(duì)象圖、狀態(tài)圖、活動(dòng)圖、序列圖、協(xié)作圖、構(gòu)件圖、部署圖9種圖。這些圖從不同的側(cè)面對(duì)系統(tǒng)進(jìn)行描述。系統(tǒng)模型[5]的這些不同側(cè)面綜合成一致的整體,便于系統(tǒng)的分析和構(gòu)造。
在此討論的構(gòu)件可視化設(shè)計(jì)使用了簡(jiǎn)化、合并和細(xì)化的方法,將UML所含的圖重新梳理,再配合工程圖紙的設(shè)計(jì)思想,使構(gòu)件的可視化設(shè)計(jì)能夠自上而下、層層遞進(jìn)地完成程序的設(shè)計(jì)。
以一個(gè)UML的狀態(tài)圖(圖5)為例,此圖看似很清楚、詳細(xì)地闡明了對(duì)象之間的關(guān)系,但是實(shí)質(zhì)上這幾個(gè)圖之間有很多的重復(fù)和相似的元素。從本研究的觀點(diǎn)看來(lái),只要把握住數(shù)據(jù)的流向就能把握住程序的靈魂。因此從圖6可以看出,借助工程圖形的設(shè)計(jì)原則(層次、美觀、布局合理、易讀)可使?fàn)顟B(tài)圖效果得到改進(jìn)。
再看UML的構(gòu)件圖(圖7),其表現(xiàn)了構(gòu)件之間數(shù)據(jù)的傳遞關(guān)系。從本文研究的觀點(diǎn)來(lái)看,將構(gòu)件明細(xì)表例(表1)、構(gòu)件編碼例(圖2)、關(guān)聯(lián)圖(圖3)這幾部分與概要設(shè)計(jì)階段的系統(tǒng)圖和詳細(xì)設(shè)計(jì)階段的代碼編寫聯(lián)系起來(lái)進(jìn)行可視化設(shè)計(jì),將會(huì)使系統(tǒng)構(gòu)件圖(圖7)更加具有代碼設(shè)計(jì)階段的參考性和軟件測(cè)試階段的針對(duì)性。
4結(jié)束語(yǔ)
面向構(gòu)件軟件設(shè)計(jì)技術(shù)還在不斷地產(chǎn)生新的技術(shù)和方法,以工程的眼光從可視化的視角將紛繁復(fù)雜的軟件系統(tǒng)直觀、簡(jiǎn)單地呈現(xiàn)出來(lái),無(wú)疑對(duì)抽象的軟件開發(fā)提供了一個(gè)流水化、實(shí)體型的設(shè)計(jì)模式。可以設(shè)想,軟件開發(fā)人員尤其是系統(tǒng)分析人員,在用了本文討論的構(gòu)件可視化的設(shè)計(jì)方法之后,將使系統(tǒng)的分析和交流變得十分輕松和方便。但是,事物都具有雙面性,構(gòu)件可視化設(shè)計(jì)必然也會(huì)帶來(lái)新的工作負(fù)荷,如協(xié)調(diào)平衡軟件開發(fā)的模式,有針對(duì)性地選擇開發(fā)場(chǎng)景等,讓構(gòu)件可視化成為軟件開發(fā)的一把利器。
參考文獻(xiàn)
?。?] 張海藩,呂云翔.軟件工程[M].北京:人民郵電出版社,2013.
?。?] 毋國(guó)慶,梁正平,袁夢(mèng)霆,等.軟件需求工程[M] 北京:機(jī)械工業(yè)出版社, 2008.
?。?] 文藝,袁道華,李曉娟,等,面向?qū)ο蟮臉?gòu)件化軟件開發(fā)[J].計(jì)算機(jī)應(yīng)用研究,2002,19(8):40 42.
[4]毛澄映,盧炎生.構(gòu)件軟件測(cè)試技術(shù)研究進(jìn)展[J].計(jì)算機(jī)研究與發(fā)展,2006,43(8):137 1382.
?。?] 夏苑,張為群.一種基于CBSE的嵌入式實(shí)時(shí)軟件建模方法圖7某圖書管理系統(tǒng)構(gòu)件圖
研究[J].計(jì)算機(jī)科學(xué),2005,32(8):213 215.