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