程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 利用VFI提高Delphi程序的重用性

利用VFI提高Delphi程序的重用性

編輯:Delphi
 摘要:程序重用性是軟件質量的重要指標之一,提高重用性對於減少程序潛在缺陷,提高程序開發效率,降低維護成本具有重要的影響。本文針對Delphi所提供的VFI,給出了具體應用VFI來提高程序重用性的實例。該實例表明,使用VFI可以極大地簡化程序代碼,並保持界面的一致性,提高程序開發效率。
  關鍵詞:重用性、Delphi、VFI

1 引言
         軟件重用(Software Reuse)已經深入人心,早在1968年的NATO軟件工程會議上就已經提出可復用庫的思想。軟件重用,又稱軟件復用或軟件再用,它的定義也很多,比較權威和通用的一種是:軟件重用是利用事先建立好的軟件部產品創建新軟件系統的過程。這個定義蘊含著軟件重用所必須包含的兩個方面:
         1.系統地開發可重用的軟件部產品。這些軟部品可以是代碼,但不應該僅僅局限在代碼,還可以是分析,設計,測試數據,原型,計劃,文檔,模板,框架等等。
         2.系統地使用這些軟部品作為構築模塊,來建立新的系統。
  軟件重用可以帶來很多好處,如提高軟件生成率,縮短開發周期,降低軟件開發和維護費用,生產更加標准化的軟件,提高軟件開發質量,增強軟件系統的互操作性等。
         在面向對象技術成為當今軟件開發的主流技術的今天,軟件復用更是提高到了一個重要的位置。復用性是面向對象的一個目標,同時,從另一方面來說,面向對象技術為軟件復用提供了更好的手段。它將軟件復用的層次從常見的源代碼復用、庫函數復用等較為低層次的復用提高到類的復用,構件的復用,以至於是架構、框架的復用。

2 Delphi中的VFI
            Delphi作為一種支持面向對象的開發工具,采用Object Pascal作為其語言,並提供了可視化的開發環境,極大地提高了軟件開發的效率。
          與常見的RAD工具(如Visual Basic、C++ Builder和Power Builder等)相同,Delphi提供了窗體設計器。而Delphi的窗體設計器的與眾不同之處在於,Delphi是建立在一個真正面向對象的框架結構基礎之上的,對基類所做的改變都將會傳遞給所有的派生類,它所采用的關鍵技術就是VFI(Visual Form Inheritance),即可視化窗體繼承。VFI技術使開發人員能夠動態地繼承當前項目或對象庫中的任何其他窗體,一旦基窗體發生改變,派生的窗體會立即更新。
          窗體繼承早在Delphi 5中就成為一個內置功能。要基於一個已有的窗體創建一個新的窗體,只要使用File | New菜單命令,Delphi將打開New Items對話框。這個對話框列出了對象庫中的所有對象。翻到Forms頁,這裡列出了所有已經加到對象庫中的窗體;也可以選擇Project頁,來選擇一個本項目中已有的窗體。
          有三個選項用於把窗體加到項目中:Copy、Inherit和Use。如果選擇Copy,則意味著把所選窗體的副本加到當前項目中。如果對象庫中的窗體發生變化,不會影響到當前項目中的副本。如果選擇Inherit,則意味著從所選窗體派生出一個新的窗體加到當前項目中。如果對象庫中的窗體發生變化,則派生的窗體也會跟著變化。如果選擇Use,則意味著所選的窗體直接加到當前項目中,就好像這個窗體是當前項目創建的一樣。以Inherit方式使用窗體即采用了可視化繼承——VFI。


  
3 應用實例
  
        下面以一個實例對VFI的應用進行說明。在一MIS中,需要對多個數據庫中的表格進行統計,為了獲得較好的顯示效果,采用了dxDBGrid控件作為顯示數據結果的主要控件,並使其在統計界面中記住每次退出時的字段的位置,字段列標題的寬度等信息,因此,對每一個統計界面都提供一個窗體來實現。
          為實現此要求,通常的做法是對每一個統計窗體進行如下設置:(為方便說明,下面各個組件的名稱均采用了默認的名稱)
          1.新建窗體(為每一個統計界面提供一個窗體類);
          2.放置需要的組件(放置dxDBGrid、wwDBNavigator、OpenDialog等組件);
          3.設置組件屬性(調整各個字段的可見性、顯示寬度等);這些工作又可以細分為兩類:
             3.1:對所有窗體中的組件的一樣的設置,如DataSource1的DataSet屬性,dxDBGrid1與wwDBNavigator1、wwFilterDialog1的DataSource屬性等;
             3.2:各個窗體中設置不同的工作,典型的操作是設置DataSet1的數據來源,dxDBGrid1中Column的屬性。
          4.設置窗體及其他組件的事件屬性(如在窗體打開事件中打開數據集,在窗體關閉事件中關閉數據集,在導出事件中完成dxDBGrid數據的導出)。
  窗體中主要的組件如下圖所示:

[發表時發現,沒有該圖也可以,所以省略了]

        在這一過程中,有些工作是要求不同的,比如工作1、工作3;但有些工作是重復性的,工作2、工作4,在這種情況下,多個統計窗體之間,會出現很多代碼的剪切、拷貝工作,既容易出現錯誤,在以後需要修改程序的時候,又不容易進行完全的、徹底的修改。比如,實現導出dxDBGrid1中數據的代碼,就會可能出現在多個窗體中。雖然將導出數據的功能封裝成函數可以在一定程度上,在各個統計窗體中進行調用的方法,可以減少這類重復性代碼。但是對於組件屬性的設置,及大部分事件的判斷,如PopupMenu彈出事件中對是否進行“導出選定數據”可用性的判斷,則必須要在每個窗體中出現。(雖然,可以在程序中設置一個通用的OnPopup事件處理,但是需要保證“導出選定數據”的菜單項具有相同的名字,或者在程序中進行判斷,仍然少不了重復的工作,並且也容易出錯,或者忘記設置菜單項的屬性)。
          而如果采用VFI,這些重復性的工作都可以解決。可以為這些統計設置一個父窗體(類名稱為TFormBaseTongji),窗體如下所示:

  [發表時發現,沒有該圖也可以,所以省略了]        

           所有的重復性的工作,如工作2、工作3.1,工作4都在父窗體中完成。如OnFormShow中設置代碼:AdoDataSet1.Open;。
          之後,各個具體的子窗體從該窗體繼承而來,在子窗體中進行的設置只需要工作3.2。這樣所進行的操作,將極大地減少工作量。不僅如此,使用VFI,還可以保持各個窗體之間的一致性,使之具有相似的外觀,從而保證軟件界面的一致性。由於重復工作的消除,也給軟件維護帶來了很大的好處,比如,如果要再增加一個公用功能,或者調整界面的細節,都可以在父窗體類中實現,子窗體中不再做任何工作;同時,VFI還允許子窗體,增加自己的功能,改變父窗體中的行為(即實現多態)。可以說,VFI為可視化開發提供了一個強有力的支持。

  
  
4 結束語
           在重用性顯得日益重要的今天,VFI為進行可視化的面向對象的開發提供了可能,有效地使用VFI,可以極大地改進程序重用性,改善程序的一致性,降低維護的成本。


  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved