摘要:基于構件的軟件開發方法是目前一種流行的軟件生產技術,其核心圍繞著構件的開發與組裝技術。但如何結合實際應用要求實施基于構件組裝的軟件開發過程是一個值得進一步研究的課題。為此,根據基于構件的軟件組裝技術的概念和原理,提出一種應用系統組裝框架,從軟件體系結構的角度研究了構件的開發與組裝方法,并將這一技術應用到軟件工程網絡課堂教學系統的開發上。相關實踐活動表明,提出的方法可有效地獲得一個適應性強的應用系統。
關鍵詞:構件; 軟件體系結構; 構件組裝; 網絡課堂教學系統
中圖分類號:TP311文獻標志碼:A
文章編號:1001-3695(2008)06-1736-03
在當前信息化社會中,各行各業對應用軟件的需求量越來越大,所需軟件的規模和復雜度也不斷增加。傳統的“數據結構+算法=程序”設計模式已經無法滿足不斷增長、日趨復雜應用的需求,而龐大的軟件系統在維護上也困難重重,人們不斷地探索著這一危機的解決方法,基于構件的軟件開發方法就是這一探索中的方法之一。基于構件的軟件開發能有效地縮短開發周期,降低應用系統的開發成本,提高系統的可維護性。
目前國內外對構件組裝技術的研究已取得一定成果。美國OMG的CORBA、Microsoft的COM、SUN的JavaBeans/EJB;國內北京大學軟件工程研究所的青鳥工程也已取得了很好成果。我國自主研發的“和欣”操作系統(英文名Elastos)就是使用構件技術開發的典型,創新性地實現了CAR(component assembly runtime)構件技術,即一種完全面向下一代的網絡服務。
在基于構件的軟件開發中,構件的開發、構件組裝及其開發過程是關鍵技術。目前,對于構件組裝技術的應用基本上還停留在手工組裝的階段,半自動化甚至自動化的構件組裝的實現還有待時日。
1研究基礎
構件是指是指可方便地插入到語言、工具、操作系統、網絡軟件系統中的一種接口定義良好的、獨立可重用的二進制形式的代碼和數據;而可復用構件是指具有相對獨立的功能和可復用價值的構件[1]。
1.1構件的開發[2]
構件包括構件接口和構件規約兩部分。構件接口是構件間的契約(圖1)。一個接口提供一種服務,完成某種邏輯行為。構件接口包括名稱部分和行為(圖2)。前者是構件本身提供服務的描述;后者是構件行為的描述。一個構件可以有一個或多個接口,而構件接口可以由多個構件實現。構件接口是外部訪問構件的訪問點。構件規約是構件開發商向構件使用者提供的、用于進行構件組裝的文檔。
從上述構件的定義可以看出,構件的開發涉及兩個方面:設計構件接口和實現構件的行為。眾所周知,接口是構件描述其行為的機制,并且提供了對其所提供服務的訪問。由于實現是完全隱蔽的,接口描述就成為構件的潛在客戶所能依賴的所有信息。這使得接口描述的表達力和完整性在任何基于構件的軟件方法中都是一個需要著重考慮的問題。
1.2構件組裝
基于體系結構的組裝技術的優點是受現實環境的影響很小。該構件組裝是指將構件庫中的構件經過適當修改后相互連接,或者將它們與當前開發項目中的軟件元素相連接,最終構成新的目標軟件。基于體系結構的構件組裝包括基于功能的組裝技術和基于數據的組裝技術[2]。本文采用基于功能的組裝技術,開發人員首先應對目標軟件系統進行功能分解,將系統分解為強內聚、松耦合的功能構件;然后根據各構件的功能需求提取構件,對其進行適應性修改后再組裝到相應的功能分解框架中。
1.3構件組裝過程
基于體系結構的構件組裝過程如下:a)根據用戶需求和實現環境,設計應用系統的軟件體系結構框架,并定義結構中的構件及構件之間的關系,由此設計構件規約和構件接口規約;b)并行設計和實現構件及其接口/連接件規約,并按一定規則將這些構件和接口/連接件放入相應的庫中;c)在可復用構件庫和接口/連接件庫中查找并獲得符合要求的構件與接口/連接件,必要時可開發新的滿足要求的構件、接口/連接件;d)根據應用系統的軟件體系結構框架將相關的構件和接口/連接件組裝起來,生成新的應用系統。圖3給出了基于軟件體系結構的構件組裝框架。
應用系統的軟件構造過程包括分析構件、設計構件、實現構件和組裝構件。圖4為基于軟件系統結構的系統開發過程。
2基于構件組裝的軟件工程網絡課堂教學系統的設計與實現
2.1系統需求概述
教學資源信息化是現代教學中最為關鍵的要素之一,也是高校信息化建設的重點內容。與傳統教學模式相比,網絡教學是一種全新的教育模式,可以突破時間和空間的限制,幫助學生隨時隨地學習,讓更多的學習者共享優秀的教學資源。網絡教學既具有開放性、交互性、協作性和自主性等特點,又集異步性、實時性、生動性和大容量等優勢于一身。因此,在網絡教學系統的建設中,單純地構建各種功能單一的系統并不能完全滿足遠程教育設計的需要,只有對數據和信息進行有效組織,整合多種資源,才能為用戶提供個性化服務的系統,充分發揮網絡教學的作用。
《軟件工程》是一門研究軟件開發與維護的普遍原理和技術的工程學科。其運用非常廣泛,包括技術方法、工具和管理等許多方面。軟件所解決的問題十分復雜,學生在課后的編程實踐中,會在需求分析和開發周期等問題上遇到一些困難,因此,在這門課程的學習過程中,教師與學生的交流起著非常重要的作用,而使用合適的案例進行教學與參考可以有效地提高教學的效率和質量。
軟件工程網絡課堂教學系統包括三大功能:a)精品課程申報。主要以文本和圖片的形式介紹課程的教學及建設情況。b)網絡課堂教學。它是作為傳統課堂授課的補充,學生通過使用網絡課堂、案例教學和在線測試等功能將在課堂上所學的知識加深和強化;教師在網上發布學習資料供學生下載,并能在線批閱學生提交的課后作業,及時了解學生的學習情況。c)互動。提供完善的消息和論壇功能,以方便教師和學生之間的交流,進行課后作業及實驗指導。目前,該系統運行情況良好(http://cs.ccnu.edu.cm/seweb)。
2.2系統設計
2.2.1軟件工程網絡課堂教學系統的構件模型
軟件工程網絡課堂教學系統軟件體系結構涉及靜態和動態兩個方面。其靜態體系結構如圖3所示。
靜態體系結構包括課程申報構件。該構件負責介紹課程的教學、申報、改革以及創新等情況。該構件的構造主要是在一個事先設計好的模板上填寫信息,在填寫過程中,用戶可以定制相關界面風格。
動態部分主要涉及網絡課堂教學系統中的運行時構件及相關交互,包括公告發布管理、課件發布管理、作業發布批閱、作業下載提交、案例教學、在線測試、試題管理、學習論壇和消息交流等構件,以及這些構件與底層構件、與使用者間的交互。
2.2.2構件模型的組裝
將圖1所示的構件通用模型實例化,得到軟件工程網絡課堂教學系統的構件模型。該模型采用三層結構,即表示層、業務邏輯層和數據訪問層。根據三層結構的原理,可以將系統的構件進一步細化,這樣,軟件工程網絡課堂教學系統可劃分成橫向三層且縱向三層的結構,如圖5所示。其中,基礎構件包括用戶界面中的窗口構件、菜單構件、表格構件、按鈕構件等;領域通用構件包括系統功能構件中的查詢構件、添加構件、刪除構件和統計構件等;領域專用構件為最高層次,涉及與使用者之間的交互。
根據系統的構件體系,整個系統的集成采用漸增式與非漸增式相結合的組裝策略。組裝過程為:a)選取合適的、層次較高的構件作為模板,如果沒有合適的模板就要重新設計,以補充構件;b)選取較低抽象層次的構件作為子構件,進行組裝;同樣,如果可選用的構件中沒有合適的子構件,也需要重新設計;c)如果子構件仍然是抽象層次較高的構件,則重復以上過程。
對于耦合性低的獨立構件,一旦開發完成即可組裝進來,并進行調試與測試;對于具有一定關聯性的構件組裝時,采用漸增式順序集成。
2.3系統中的構件實現
軟件工程網絡課堂教學系統的開發環境為前臺開發選擇ASP,后臺采用SQL Server 2000數據庫,2.2.2節提出的構件模型通過B/S構架的三層體系結構(表示層、業務邏輯層和數據訪問層)實現。
現以課件上傳構件的開發過程為例,說明一個構件中的用戶界面/表示層、功能/業務邏輯層和數據訪問層的實現。
1)課件上傳構件的用戶界面層實現
表示層的用戶界面可分成動態和靜態兩種。通過Dreamweave 的模板實現靜態界面功能,通過ASP 技術生成動態頁面。動態頁面中常見的動作是:解釋用戶請求;分發這些請求到相應的業務邏輯;選擇下一個顯示視圖;生成和傳送下一個視圖給用戶。其界面實現效果如圖6所示。
2)課件上傳構件的功能/業務邏輯層實現
課件上傳的業務邏輯層的作用是將用戶上傳的文件存入數據庫,并將與文件相關的說明在用戶界面層上顯示出來。出于系統安全性的考慮,在構件設計時,對文件格式進行了限制,只能上傳RAR壓縮文件,并按照上傳時間以“年+月+日+分+秒”的數字組合為文件重新命名,這將有效避免文件重名。
該層實現上使用VBScript腳本語言構造了一個類模塊(add.asp)。該類包括如下屬性:MMtitle(課件標題)、MMteacher(上傳用戶(系統自動生成))、MMunit(所屬章節)、MMdiscrib(內容說明)、set upload(上傳路徑)、set file(存儲路徑(系統自動生成))。其邏輯流圖如圖7所示。
3)課件上傳構件的數據訪問層實現
在系統數據庫的開發過程中,為了方便今后數據庫的維護與重用,將其具體功能如查詢、插入等操作封裝到一個構件(kejian.asp)中,如圖8所示。
該構件與數據庫連接的代碼如下:
2.4基于構件的系統組裝
2.4.1原子構件的組裝
現以課件上傳構件為例,說明原子構件的組裝過程。原子構件組裝的思想是將構件模型中涉及到的三個層次組裝成構件。通過原子構件的組裝,以上用戶界面、功能/業務和數據訪問三個層次的成分組合成一個完整的課件上傳構件。
在上述三個構件中,功能/業務層處于用戶界面層之下、數據訪問層之上,因此以功能/業務層構件add.asp作為組裝的基礎。其具體組裝過程為:將用戶界面層構件module.asp用VBScript腳本進行引用。引用語句為:
〈!--#include file=\"module.asp\"--〉
數據訪問層調用采用面向對象方式,將類FileInfo和類upload_file通過內部接口與類kejian組裝成一個高內聚低偶合的原子構件,再通過外部接口與功能構件add.asp連接。
2.4.2復合構件的組裝
復合構件是由多個原子構件組裝后形成的獨立構件,封裝在文件夾中,構件之間既沒有數據上的耦合,也沒有行為上的耦合,故采用黑盒方法進行組裝。在組裝時,通過接口綁定建立復合構件組裝的外部接口和內部接口的對應關系。通過各種不同的連接件可以完成一些復雜的接口綁定,以實現所需的復合構件。復合構件的外部接口采用擴展連接件。由于擴展連接件據具有可擴展的特性,由其組裝成的復合構件也具有可擴展的特性,同時內部接口是基于消息傳遞的,從而使組裝出來的復合構件具有動態性。
本系統中復合構件有公告發布管理構件、課件發布管理構件、作業發布批閱構件、作業下載提交構件、在線測試構件、試題管理構件、學習論壇構件和消息交流構件。其功能都封裝在獨立的文件夾中,其外部接口為各自文件夾下的index.asp頁面。在該頁面的功能菜單中給出了不同的功能按鈕,連接構件的內部接口。
3結束語
基于構件的軟件開發方法與傳統的面向過程、面向對象的軟件開發方法相比,具有良好的適應性、靈活性和易維護性,能較好地支持軟件復用。
參考文獻:
[1]馮沖,江賀,馮靜芳.軟件體系結構理論與實踐[M]. 北京:人民郵電出版社,2004.
[2]馬亮,孫艷春.軟件構件概念的變遷[J].計算機科學,2002,29 (4):28-30.
[3]楊芙清.軟件復用及相關技術[J].計算機科學,1999,26(5):1-4.
[4]崔寶慧,蔚成香,高明國.基于構件的軟件組裝復用方式問題的研究[J].陜西師范大學學報:自然科學版,2002(S1):91-95.
[5]張世琨,張文娟,常欣,等.基于軟件體系結構的可復用構件制作和組裝[J].軟件學報,2001,12(9):1351-1353.
[6]黃柳青,王滿紅.構件中國:面向構件的方法與實踐[M].北京:清華大學出版社,2006.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文