摘要:基于框架的面向對象開發技術是實現大規模軟件復用的一種有效的途徑。由于框架本身層次的復雜性,往往導致框架實例化過程的復雜和煩瑣,通常采用記錄框架變化點的實例化過程和約束條件的方法來解決這個問題。但是,對于那些缺乏詳細記錄的“遺留”面向對象框架,框架變化點實例化記錄往往隱含在具體的實現細節中,從而使得“遺留”面向對象框架的復用變得十分困難。提出了一種基于版本信息獲取面向對象框架的實例化模式的方法,從而輔助框架的實例化工作。
關鍵詞:面向對象的框架;框架實例化;遺留系統;概念格;版本;模式
中圖分類號:TP391文獻標志碼:A
文章編號:1001-3695(2007)07-0176-04
0引言
軟件復用是解決軟件危機,提高軟件生產效率和質量的現實可行途徑[1]。特定于領域的、基于構架的復用策略有助于軟件復用的成功。軟件產品線是實現大規模軟件復用的重要手段,面向對象框架是一種在面向對象領域實現軟件產品線的方法,是一種高層次的軟件復用形式。
面向對象框架體現了領域內一組應用系統的共性設計,也用變化點的形式來表示其變化性設計以及強加于應用實現某些約束。面向對象框架提供的這種設計的靈活性和可復用能力,允許程序員建立相同應用領域的多種應用,能夠提供重要的軟件工程效益,即允許設計復用,減少應用系統開發時間,改善系統演化能力,提高應用程序間的一致性等。
但是實例化框架是非常困難的。一方面,因為框架本身層次結構有時是非常復雜的,識別框架變化點以及在合適的地方引入具體應用代碼也是非常困難的,特別是對于一些非專業用戶而言尤其困難。為了克服實例化的困難,研究者提出了各種輔助框架實例化的方法如基于語言的方法[2]等;另一方面,框架不斷地演化,框架實例化文檔與具體的實例化規則并不完全一致。特別地,對于那些沒有實例化框架文檔說明的遺留框架系統,往往沒有相應的框架實例化規則說明。
1 面向對象框架的實例化
面向對象框架由一組協作類組成,闡明了整個設計、類間依賴及成員類的責任分布。這些類通常是抽象類,實現細節放在具體子類中,構成一個抽象設計,不同的子類構成對設計的不同實現[3]。框架的實例化過程指的是從框架中導出具體應用程序的過程。從框架中導出的具體應用程序稱為框架實例。通常,實例化復用的是框架已經定義好了的結構、行為關系以及控制流,通過填充變化點如繼承抽象類或重載抽象方法的方式實現具體應用程序。同時,對框架的復用要求框架實例必須保持框架本身設計約束不發生變化,否則將會導致框架實例和框架的不一致性以及無法預料的行為。
描述框架的實例化約束和規則可以采用形式化的和非形式化的方法。非形式化的方法用代碼案例和自然語言來描述框架實例化規則;而形式化的方法基于符號和邏輯來描述,更具有準確性。形式化的方法包括:①設計模式途徑[4]。設計模式途徑用實例化模式(Specialization Pattern)表示程序中重復發生的結構規約。實例化模式包括角色和與角色相關的屬性集合,不同的程序元素如類在不同的語境中可以具有不同的角色。實例化模式實際上刻畫了框架實例化過程中的結構約束條件。②框架描述語言[2]。該描述語言(Framework Description Language,FDL)是一種類似于C++函數說明的框架描述語言,用于建立框架文檔。其主要作用是描述如何使用框架。 FDL語言可以用來描述繼承和引用關系、對象創建的順序等。③基于UML擴展的框架模型語言[5]?;赨ML擴展的框架模型語言中利用UML語言的擴展機制如衍型、標記值和約束[6],定義了面向對象框架的描述語言UML-F,UML-F采用一系列布爾類型的標志值來描述與框架擴展有關的內容。例如{variable}說明一個方法在框架實例化過程中是否必須被實現等。
2基于版本信息的框架實例化規則挖掘
基于版本信息的框架實例化方法通過分析多個遺留框架實例系統,來挖掘框架的變化點實例化模式整個框架,如圖1所示。
基本步驟包括:①用戶首先需要指明框架中需要分析的變化點,包括抽象類、抽象方法以及具體類中的虛函數等。②確定概念格所需要的具體屬性包括版本號。③從軟件配置管理系統提取框架實例版本,分析源程序,按照屬性尋找相應的概念格所需的對象,如類、構造函數等。這部分工作可以借助已有的程序理解工具完成如Understand C++[7]。④構造概念格,分析屬性相關性獲得實例化模式。
2.1實例化模式定義
設對象集合為O={o1, o2, o3,…},屬性集合為A={a1, a2, …},版本集合為V={v1,v2,…}。實例化模式分為強實例化模式和弱實例化模式。強實例化模式規定了實例化過程中需要的角色和規則。當不考慮實例化過程中的角色時,稱為弱實例化模式。
下面給出實例化模式的相關定義。
3系統原型框架
為支持上述基于版本信息的面向對象框架實例化模式挖掘策略,本文已經實現了一個系統原型(VPMinner)。這個原型系統采用層次軟件體結構風格,由對象元素分析器、實例化模式挖掘器和可視化工具三部分組成,如圖7所示。
其中對象元素分析器是一個改造過的C++編譯程序,通過對源程序編譯得到有關類之間的各種包含關系、虛函數之間的重載和調用關系;實例化模式挖據器包括一個概念格構造程序和一個概念格上的模式分析程序,是對第2章所述內容的具體實現。最后,可視化工具用圖形的方式展示最后得到的實例化模式的類圖和虛函數調用關系。
4結束語
概念格的思想最早是Birkhoff在1940年提出來的,隨后在20世紀70年代Ganter和Wille擴展了Birkhoff的概念格理論,研究如何具體應用概念分析。90年代初,Goldin和Mili等人首次提出在計算機科學特別是軟件技術中使用概念分析理論。近年來,概念格的方法大量地運用在軟件生命周期的各個階段,如用況的聚類分析[10]、構件提取[11]以及遺留系統的恢復[12]和類層次的重構[13]。另一方面,在文獻[14~16]中利用概念格技術挖掘面向對象框架中隱含的對象依賴模式。其方法主要針對的是一個應用系統,目的是理解類之間的復雜層次的依賴關系。筆者在擴充的構件演化模型[17~19]的研究工作基礎上,著眼于軟件的維護階段,針對的是多個演化的“遺留”框架實例,利用概念格技術從版本系統中挖掘蘊涵的框架變化點的實例化模式。
參考文獻:
[1]楊芙清.軟件技術與軟件產業[J].中國計算機學會通訊,2001(6).
[2]WILSON D A, WILSON S D.Writing frameworks-capturing your expertise about a problem domain,tutorial notes:proc.of the 8th Confe-rence on Object-Oriented Programming Systems, Languages and Ap-plications[C].Washington:[s.n.],1993.
[3]楊芙清,梅宏,吳穹,等.基于異質構件復用的軟件開發技術及其支持系統[J].中國科學,1997,27(3):275-281.
[4]HAKALA M,HAUTAMAKI J,KOSKIMIES K,et al.Generating application development environments for Java frameworks:proc. of the 3rd International Conference on Generative and Component-Based Software Engineering (GCSE’01)[C].[S.l.]:[s.n.],2001:163-176.
[5]FONTOURA M, PREE W,RUMPE B.UML-F:a modeling language for object-oriented frameworks:proc.of the 14th European Conference on Object Oriented Programming (ECOOP 2000), Lecture Notes in Computer Science 1850[C].Cannes, France:Springer,2000:63-82.
[6]Object Management Group Inc.OMG unified modeling language specification, version 1.3[R].[S.l.]:[s.n.],1999.
[7]Understand C++ [EB/OL].http://www.scitools.com/.
[8]WILLS R.Restructuring lattice theory: an approach based on hierarchies of Concepts[M].[S.l.]:Ordered Sets,1982:445-470.
[9]GODIN R, MISSAO U R,ALAOUI H.Incremental concept formation algorithms based on Galoisconcept lattices[J].Computational Intelligence,1995,11(2):246-267.
[10]ANDELFINGER U.Diskursive anforderung sanalyse.Ein Beitrag zum Reduktionsproblem bei Systementwicklungen in der Informatik[C].Peter Lang, Frankfurt:[s.n.],1997.
[11]LINDIG C,SNELTING G.Assessing modular structure of legacy code based on mathematical concept analysis:proc. of the International Conference on Software Engineering (ICSE’97)[C].Boston:[s.n.], 1997:349-359.
[12]TONELLA P.Concept analysis for module restructuring[J]. IEEE Trans on Software Engineering,2001, 27(4):351-363.
[13]SNELTING G.Software reengineering based on concept lattices:proc.of the 4th European Conference on Software Maintenance and Reengineering[C].[S.l.]:IEEE, 2000:3-12.
[14]RAY X.Views:understanding internals of classes gabriela arévalo, stéphane ducasse oscar nierstrasz:proc. of ASE 2003, IEEE Compu-ter Society[C]. Montreal,Canada:[s.n.],2003:267-270.
[15]ARVALO G,DUCASSE S,NIERSTRA O.Discovering unanticipated dependency schemas in class hierarchies:proc. of CSMR 2005 of the 9th European Conference on Software Maintenance and Reengineering[C].[S.l.]:IEEE Computer Society Press,2005:62-71.
[16]ARVALO G,BUCHLI F,NIERSTRASZ O. Detecting implicit collaboration patterns:proc. of WCRE 2004: the 11th Working Confe-rence on Reverse Engineering[C].[S.l.]:IEEE Computer Society Press, 2004:122-131.
[17]鐘林輝,謝冰,邵維忠.擴充CDL支持基于構件的系統組裝與演化[J].計算機研究與發展,2002,39(10):1361-1365.
[18]鐘林輝,謝冰,邵維忠.擴充CDL支持構件演化模型的方法研究[J].軟件學報,2002,13.
[19]鐘林輝,陳宇,劉洋,等.軟件配置管理系統XML數據模型及原型系統研究[J].計算機工程與應用,2001,37(19):82-84,120.
注:“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”