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