原則
軟件開發是一門綜合性學科,它包括哲學、基礎科學、技術科學、工程管理四個知識層次。哲學決定著整個學科建立的指導思想、認識論和世界觀。認識論就是人們認識客觀世界的規律和方法,我們稱它為認知體系。
應用軟件開發時,有自己必須遵循的哲理和認知觀,對基礎理論、研究方向以及采用的技術措施起著指導作用,符合學科就能發展,否則就會遇到各種問題,甚至導致失敗。從軟件發展的幾個里程碑中可看出,認知觀起到了決定性的作用。
軟件開發的初期階段,我們稱為程序設計時代,軟件開發處于小作坊個體生產方式水平。到了60年代中期,出現了一些大型復雜的軟件系統,人們認識到以個人的能力難以完成一個大系統的任務。W.E.Dijkstra 首先提出了一種解決方案,采用結構程序設計方法,就是把軟件開發看作數學求解,沿用數學上的枚舉、抽象、歸納、類比等思維方式,把問題簡化。用工程的概念、方法、原理和技術來開發和維護軟件,產生了結構化分析和設計的方法。這種開發方法長期左右著我國的軟件開發,無疑起到了重要作用,然而它仍然存在著認知上的缺陷,如開發周期長、成本高、質量差,特別是所開發的軟件不能適應系統的不斷演化。
到70年代,人們認識到,僅從軟件結構上脈絡清晰是遠遠不夠的,這只是"表",不是"里",軟件在結構上還應該適應客觀世界的自然結構。M.A.Jackson認為應用軟件應該忠于現實、高于現實,提出JSD系統開發方法,其指導思想是"仿真客觀世界",采用自底后上的設計步驟。JSD方法第一次揭示了客觀世界與軟件系統之間的關系,因而所開發的軟件悟性好、實用性強。然而JSD方法也存在著固有的缺陷:如何仿真要確定系統的實體和活動,它沒有給出準則可循;沒有區分客觀世界的模型和軟件系統模型,不能直接映射過去,其結果是系統結構混亂、效率低,軟件成份復用性差。
到了80年代,面向對象重新崛起,面向對象的認識論是將系統看成由多個對象組成,通過對象之間的通信形成了系統,為客觀世界過渡到軟件系統提供了途徑和編程的思維方法。其主要特征是:
(1) 類和封裝性,實現數據抽象和信息隱蔽,給出了對象類型和參數化,通過生成實例后組裝成系統,提供了實現復用的手段。
(2) 繼承性,提高了代碼復用性。
(3) 多態性。
面向對象給出了軟件系統的體系結構,引入了軟件復用的思維方法。近年來引起了越來越多的人關注,提出了多種對象模型、語言,設計了各種基類型庫,使得面向對象程序設計逐步成為熱點。
問題
面向對象技術雖然被大家接受,公認為當前的發展主流,然而在實際應用時,還存在著一系列問題。
(1) 模型和概念尚未統一,不同的人對系統和對象的理解不一致,導致了各種對象語言均有很大差異,且語言自身與純面向對象理論有許多不一致的地方,就難以形成統一的標準和開發規范。
(2) 要求使用面向對象技術的人員素質較高,要掌握的東西很多,如要熟練掌握C++必需了解大量的MFC類庫,且要了解每個類的細節。
(3) 面向對象復用僅僅是處于初級階段,未提出任何模式和規范以及相應的管理機制。
(4) 工程上難以實施。目前面向對象能很好應用的領域有限(如VB的界面設計、多媒體軟件設計),真正用純面向對象技術來開發大型軟件的并不多,其原因有:如何提煉對象類,采用OOA是不可行的;實際應用領域中的可復用領域專用構件缺乏;由于對象無統一標準,因此還停留在程序員自己復用,很難共享,更談不上分布式情況下復用;純面向對象要摒棄原有的許多技術等。產生上述問題的根本原因是由于認知體系上的不完整。由此基于面向對象的構件軟件應運而生。
概念
構件(component)是可復用的軟件組成成份,可被用來構造其他軟件。它可以是被封裝的對象類、類樹、一些功能模塊、軟件框架(framwork)、軟件構架(或體系結構Architectural)、文檔、分析件、設計模式(Pattern)等。構件分為構件類和構件實例,通過給出構件類的參數,生成實例,通過實例的組裝和控制來構造相應的應用軟件。
經過幾年的發展,構件本身的模型及其規范已經提出,較有影響是OLE的COM及CORBA的SOM。目前已發展到分件式構件規范,主要有CORBA、OLE/ActiveX和JaveBeans,其發展日趨明朗,最終將會趨向統一。
分類
為了更好地了解構件的性質,我們把它按多個側面進行分類:
(1) 按開發過程構件分為分析件、設計件、程序件和數據件。
(2) 按功能分,分為三層:基礎層為基本數據類構件和系統支撐構件;中間層為各種通用的中間件,頂層為針對領域的專用構件或子系統構件,從粒度上看,通常底層的粒度為較小,而頂層的粒度為較大。
(3) 按使用方式分為動態和靜態兩種。
(4) 按構件的結構分為原子構件及由多個構聚集的組合構件。
語言
構件是為了復用,就必需遵循一定的規范,通過語言的功能來實現規范是一種極好手段。按照應用軟件開發過程,可以提供下述語言。
(1) 構件描述語言,用來描述構件的規格說明,即描述設計件;也可用來檢索已有的可復用構件,是設計構件檢索語言的依據。
(2) 構件編程語言?梢圆捎矛F在流行的各種編譯程序,如VC、VB、Java等。
(3) 過程控制語言和系統集成。通過過程控制來制作專用構件、子系統構件和應用軟件,要提供連接和嵌入的功能,還要包括面界開發功能、構件庫的管理和實例生成,要提供數據庫設計和數據庫連接的功能,還提供大量的基本構件、中間構件及APL。如PB、Delphi等。由于PB易于掌握,除提供上述功能外,又能用于編程和構件管理,它通過不斷版本更新,能緊跟新技術的發展,因此普遍受到軟件開發者的青睞。
模型
研究構件軟件的兩個核心是:如何提取可復用構件以及如何組裝成系統并能實現互操作。目前討論的軟件體系結構、構件模型,均是為解決構件之間的接口、實現互操作。近年國際已提供了各種構件庫,如MFC、PBL、VBL等等。但是這類類庫絕大多數屬于基本數據類庫,制作界面的控件、各種中間件、支撐件及系統件等類庫。但是離要集成應用軟件所需要的構件還有很大距離。雖然國際上各種軟件公司正在開發各種中間件產品或領域構件,但常常是不能拿來就用,如開發MIS系統時的Form操作構件、查詢統計構件以及報表生存構件,特別是一些與領域有關的專用構件,必須要我國自己開發。那么如何提取領域構件,國際上還沒有一種可循的辦法,也就是說我們在開發應用軟件的同時,難以形成相應的領域構件,以便適應系統自身演化或可復用到同領域中的不同系統的開發中。針對基于構件的應用軟件開發過程,我們提出三個階段的生命周期,即軟件開發模型。
數據庫設計時分為概念設計、邏輯設計和物理設計三個階段,應用軟件開發過程也分三個階段。
第一階段為需求獲取,采用仿真辦法,描述客觀世界的人工系統。在八·五時期,我們試驗成功了"角色法"的描述方法,設計出領域需求報告可復用構件,用HIPO圖、半形式方式描述出客觀系統。
第二階段是分析客觀系統,設計出邏輯系統,我們稱為領域分析。由于客觀系統和軟件系統在概念、結構、功能,通信方式均有很大差異,雖然都是采用面向對象的概念來形成,但客觀世界的對象是實體,沒有類的概念;客觀世界是一種功能模型,而軟件系統是面向封裝后的對象組成。要把從客觀系統轉換到軟件系統,且要有利于實現復用,為此我們提出了一種過渡用的軟件系統,把與領域有關的不變部分和可變部分分開,設計出領域軟件的框架,提取出領域軟件,設計出主題數據庫,由此形成了與領域有關的邏輯系統,以上各部分結果,我們統稱為設計件。
在開出構件的規格說明后,就可以編制構件類、構件類樹,為實現領域的群體開發作好一切文檔準備。
第三階段為系統集成,找到合適構件類,將其生成實例,用過程控制語言描述出系統中的各子系統;配置用戶喜愛的操作界面;生成各種輸入輸出構件實例等。最后集成系統,通過實際運行,不斷修改,直到用戶完全滿意為止,這種方法也能適應今后系統的演化。一旦領域軟件系統形成后,在開發同一領域的應用軟件時僅僅是第三階段的工作,用戶自己可以來完成,維護工作也大大減輕。
上述開發過程中,軟件開發人員可以分工去做。先由咨詢公司或軟件公司完成第一、第二階段工作,由軟件產品開發公司完成邏輯系統,提供領域分析的設計件、領域專用或通用的構件類庫以及系統集成專用平臺,再由集成公司或用戶自己來完成第三階段工作。
構件軟件是基于面向對象發展起來的,但它卻擺脫了面向對象理論的束縛。盡管在理論上還未完備,但實際應用進展很快。在國內,構件軟件的理論和實際工程已被人們普遍關注。在理論上,北京大學、中科院軟件所、吉林大學、南京大學、復旦大學、中山大學等單位,均發表了不少有價值的學術論文。在實際工程上,青鳥公司、中軟公司、華科電腦公司、特寶科公司、天中公司等均采用基于構件技術開發應用軟件,積累了不少經驗,獲取極好的效益。預計在一、二年之內,構件軟件技術將會在全國普遍開花。構件軟件技術還處于發展階段,目前迫切需要解決以下問題:針對如何開發應用,需要有一套開發規范和質量保證體系;如何提取領域構件,仍然是處于摸索階段。開始時,我們是采用通過功能劃分來提取構件,這就影響構件的可復用性,目前可以采用領域中的模型和各種設計模式來提取構件是一條好的途徑,但還未總結出可操作的規程;最后鑒于分布式系統網絡系統和多媒體應用,國際上的復合文檔和Java正處于迅速發展時期,在我國還缺乏實際應用的經驗。最后,希望在我國出現一個有自主版權的Case工具,引導著我國構件技術的發展。
文章來源于領測軟件測試網 http://www.kjueaiud.com/