文/王瑞平 孫高飛
在當前軟件開發(fā)技術中,軟件開發(fā)方法主要有結構化開發(fā)方法和面向?qū)ο箝_發(fā)方法,其中結構化開發(fā)方法是采用模塊化、自頂向下逐步細化的方法,方法簡潔、易掌握,廣泛應用于實時嵌入式系統(tǒng)、過程控制、科學與工程計算等領域。面向?qū)ο箝_發(fā)方法則主要以對象為核心,設計完善對象模型、功能模型和行為模型。相對面向?qū)ο笤O計方法,結構化設計方更加簡單,容易掌握。
在結構化設計階段,軟件體系結構是對軟件各個組成部分的總體設計,主要通過軟件結構圖或軟件層次圖表示。其中結構圖中由模塊、以及模塊與模塊之間的關系構成,其中模塊在代碼實現(xiàn)時可以是函數(shù)、過程等。層次圖與結構圖類似,主要由模塊及模塊之間的關系構成,相對結構圖層次圖更加簡潔,結構圖較為詳細,但容易造成制圖繁瑣不易讀。無論是結構圖還是層次圖都不能夠直接轉(zhuǎn)換為代碼,由設計模型到源代碼實現(xiàn)階段有間隔。需要構建一種建模工具,實現(xiàn)模型圖到代碼轉(zhuǎn)換,將大大縮減模型到實現(xiàn)的距離,提高工作效率。當前對軟件建模進行研究主要集中在需求分析階段的建模,由設計到實現(xiàn)研究較少。在由設計模型轉(zhuǎn)換為代碼框架實現(xiàn)的系統(tǒng)也大多在支持面向?qū)ο蟮脑O計方法,例如IBM Rational Rose支持由類圖轉(zhuǎn)換為面向?qū)ο蟪绦蛟O計語言的類代碼框架,結構化設計到代碼編寫研究和實現(xiàn)較少。雖然現(xiàn)在開發(fā)的大部分交互性極強的大型軟件系統(tǒng)多采用面向?qū)ο蟮某绦蛘Z言實現(xiàn),但對流程明顯、科學計算要求高、交互少的小型軟件項目采用結構化設計,結合面向?qū)ο笳Z言實現(xiàn)也是非常方便快捷的。
為解決上述問題,設計一種建模工具軟件,結合層次圖和結構圖改進設計模型元素,在模塊中增加設置模塊的接口信息,繪制簡單的模型圖,實現(xiàn)由模型圖直接轉(zhuǎn)換為源程序代碼框架,并可以讀寫模型圖,實現(xiàn)模型圖的再編輯。軟件設計者不僅能通過工具可視化創(chuàng)建軟件模型圖,對系統(tǒng)進行總體認識,模塊之間關系層次分明,模塊傳遞參數(shù)明了,而且能快速生成相應的函數(shù)或過程調(diào)用代碼框架,將為后期代碼準確實現(xiàn)提供基礎。此建模工具不僅可以用于軟件開發(fā)的系統(tǒng)結構建模,而且可以用于程序設計教學,提高教學質(zhì)量。

圖1:模型圖示例

圖2:結構化建模工具系統(tǒng)層次圖

圖3:結構化建模工具系統(tǒng)核心類圖
結構化建模工具系統(tǒng)從模型圖設計、系統(tǒng)體系結構、核心類設計、系統(tǒng)實現(xiàn)等四個方面設計實現(xiàn)。
結構化建模工具中模型體系,吸收層次圖和結構圖的優(yōu)點,在新模型中基本元素是模塊,模塊由矩形框表示,框內(nèi)有模塊名稱、參數(shù)和返回值三類信息,通過設置模塊屬性,細節(jié)化模塊的信息,方便轉(zhuǎn)換代碼。模塊信息有內(nèi)碼和外碼,其中外碼顯示模塊信息,如漢字顯示,方便用戶閱讀;內(nèi)碼信息(符合編程語言要求的標識符名稱),用于轉(zhuǎn)換源程序代碼。模塊之間連線采用無箭頭的直線表示,表示位置在上層的模塊調(diào)用位置在下層的模塊。新模型圖擴充了層次圖的表示,同時也把結構圖中的接口信息放入了矩形框內(nèi),這樣的模型圖簡潔明了。模型圖示例如圖1所示。
結構化建模工具系統(tǒng)根據(jù)需求可以分為四個模塊,分別為模型圖繪制模塊、模塊屬性設置模塊、模型到源代碼轉(zhuǎn)換模塊、模型圖讀寫模塊。其中模型圖繪制模塊主要實現(xiàn)在可視化界面上通過拖放方式繪制模型圖;模塊屬性設置模塊主要實現(xiàn)界面上模塊的屬性詳細設置,包括模塊的名稱代碼、入口/出口參數(shù)、調(diào)用信息等;模型到源代碼轉(zhuǎn)換模塊實現(xiàn)根據(jù)選擇的程序設計語言生成源代碼框架預覽和源代碼文件;模型圖讀寫模塊主要實現(xiàn)把模型圖保存到文件,并可讀取模型圖文件,繼續(xù)編輯模型圖。結構化建模工具系統(tǒng)的軟件層次圖如圖2所示。

圖4:結構化建模工具主界面

圖5:程序源代碼預覽
在結構化建模工具系統(tǒng)中,系統(tǒng)中以父模塊類(FatherModule)為核心,派生有C函數(shù)模塊類(CFuntionModule)、Python函數(shù)模塊類(PythonFunctionModule)和存儲模塊類(SaveModule),其中SaveModule用于存儲模型時轉(zhuǎn)換JSON格式,參數(shù)類(Parameters)為模塊中參數(shù)的類型。結構化建模工具系統(tǒng)核心類圖如圖3所示。
結構化建模工具系統(tǒng)采用WPF(Windows Presentation Foundation,Windows呈現(xiàn)基礎)技術實現(xiàn)。WPF是微軟公司推出的基于DirectX和GPU加速來實現(xiàn)的圖形界面顯示技術,使用XAML描述界面,后臺代碼由C#語言實現(xiàn),界面與代碼實現(xiàn)分離,顯示速度和效果優(yōu)于Win Form技術。
2.4.1 模型圖繪制模塊
模型圖繪制模塊,首先選擇轉(zhuǎn)換目標語言,然后在繪圖區(qū)繪制模型圖。模塊元素表示為具有名稱的方框,包括模塊名稱、參數(shù)和返回值三項內(nèi)容,模塊與模塊之間的關系為連線。在實現(xiàn)上通過鏈表存儲當前模型圖的模型信息,即在圖形界面上添加或刪除模型元素的同時,系統(tǒng)相應在鏈表中添加或刪除模型元素對象。設計主界面如圖4所示。
2.4.2 模塊屬性設置模塊
模塊屬性設置模塊,可以根據(jù)在圖形界面上選擇的模型元素設置模塊的屬性,包括模塊的名稱、代碼、注釋、參數(shù)名列表、參數(shù)代碼列表、返回值列表、返回值代碼列表等,也可以查看模塊的子模塊、父模塊和當前模塊的源代碼預覽等信息。設置屬性完成后系統(tǒng)自動更新對應模型元素對象鏈表信息和界面上顯示信息。
2.4.3 模型到代碼轉(zhuǎn)換模塊
模型到代碼轉(zhuǎn)換模塊,根據(jù)圖形界面上的模型圖對應的模型元素鏈表信息轉(zhuǎn)換為相應程序源代碼框架,提供給用戶預覽,并可以在計算機文件系統(tǒng)保存源代碼文件。根據(jù)在模型圖中模塊的屬性設置和調(diào)用關系就可以創(chuàng)建源代碼框架,內(nèi)容包括函數(shù)聲明、函數(shù)定義及函數(shù)調(diào)用。支持的程序設計語言有C和Python,C和Python的模塊對應都是函數(shù),但語法格式不同。C語言是結構化程序設計語言,完全符合結構化設計的要求;Python雖然是面向?qū)ο蟪绦蛟O計語言,但可以采用函數(shù)式編程,把程序過程寫成一系列的函數(shù)調(diào)用,通過函數(shù)調(diào)用提高封裝級別,非常易用理解和使用,在如機器學習算法、網(wǎng)絡爬蟲等在小規(guī)模項目廣泛使用。轉(zhuǎn)換代碼預覽效果如圖5所示。
2.4.4 模型圖讀寫模塊
根據(jù)圖形界面上的模型元素對象鏈表信息,把鏈表中的模塊對象轉(zhuǎn)換為JSON格式保存至計算機文件系統(tǒng)。JSON(JavaScript Object Notation)能夠以一種完全獨立于編程語言的文本格式來存儲和表示數(shù)據(jù),非常方便數(shù)據(jù)對象的操作。在存儲數(shù)據(jù)時,需要把對象的孩子鏈表和父親鏈表對象信息轉(zhuǎn)成字符串格式,其余屬性信息直接轉(zhuǎn)換存儲即可。
模型圖文件讀取模塊,讀取計算機文件系統(tǒng)中已存在的模型文件,根據(jù)文件內(nèi)容轉(zhuǎn)換為對應模型元素對象鏈表,然后把模型元素對象鏈表中的元素在圖形界面上創(chuàng)建相應的圖形,實現(xiàn)模型圖的再現(xiàn),可以對模型圖再編輯。
結構化建模工具作為一種CASE工具,它不僅能構建系統(tǒng)體系模型,展現(xiàn)模型中模塊組成和模塊之間的接口,而且可把模型圖轉(zhuǎn)換成相應的程序代碼框架,實現(xiàn)由模型到代碼實現(xiàn)的無縫連接。該系統(tǒng)設計不僅能夠應用于軟件開發(fā)企業(yè)進行軟件體系結構設計、方便代碼開發(fā)工作分解,而且能夠應用于學校軟件設計類課程訓練,幫助學生理解和掌握結構化設計。