摘要:可配置的程序設計是為了解決面向對象的程序設計關于接口的局限性而提出來的一種程序設計方法,其優勢體現在開發人員可以使用配置文件來更改設置,而不必重編譯應用程序,使得業務邏輯分離出來。本文詳細介紹了一些應用程序所使用的配置文件,從而體現出可配置的程序設計的優勢,程序設計必將沿著該技術路線發展下去。
關鍵詞:面向過程;面向對象;可配置;程序設計
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)14-20880-03
1 引言
隨著計算機技術的發展,計算機應用領域不斷擴大,軟件的規模及結構的復雜程度也不斷增加,為了滿足軟件生產在質量和數量上的需求,軟件開發人員不斷尋求更好的軟件開發技術,程序設計方法也在不斷發展。從最初的面向過程的程序設計,到后來流行的面向對象的程序設計,目前可配置的程序設計以其優勢得到了越來越廣泛的應用。
2 面向過程的程序設計
早期的計算機存儲器容量非常小,人們設計程序時首先考慮的問題是如何減少存儲器開銷,硬件的限制不容許人們考慮如何組織數據與邏輯,程序本身短小,邏輯簡單,也無需人們考慮程序設計方法問題。隨著大容量存儲器的出現及計算機技術的廣泛應用,程序編寫越來越困難,程序的大小以算術基數遞增,而程序的邏輯控制難度則以幾何基數遞增,人們不得不考慮程序設計的方法。
最早提出的方法是面向過程的程序設計方法,是一種自上而下的設計方法,即分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了。其考慮問題和解決問題的方法是:怎樣做(HOW)→怎樣做(HOW)→怎樣做(HOW)。
面向過程的程序設計的優點是易于理解和掌握,這種逐步細化問題的設計方法和大多數人的思維方式比較接近。然而,過程式設計對于比較復雜的問題,或是在開發中需求變化比較多的時候,往往顯得力不從心。這是因為過程式的設計是自上而下的,這要求設計者在一開始就要對需要解決的問題有一定的了解。在問題比較復雜的時候,要做到這一點會比較困難,而當開發中需求變化的時候,以前對問題的理解也許會變得不再適用。事實上,開發一個系統的過程往往也是一個對系統不斷了解和學習的過程,而過程式的設計方法忽略了這一點。
3 面向對象的程序設計
隨著信息系統的加速發展,應用程序日趨復雜化和大型化。傳統的軟件開發技術難以滿足發展的新要求。20世紀80年代后,面向對象的程序設計技術日趨成熟并逐漸地為計算機界所理解和接受。面向對象的程序設計方法和技術是目前軟件研究和應用開發中最活躍的一個領域。
面向對象設計自下而上的特性,允許開發者從問題的局部開始,在開發過程中逐步加深對系統的理解。這些新的理解以及開發中遇到的需求變化,都會再作用到系統開發本身,形成一種螺旋式的開發方式。在面向對象設計中,類封裝了數據,而類的成員函數作為其對外的接口,抽象地描述了類。用類將數據和操作這些數據的函數放在一起,這可以說就是面向對象設計方法的本質。
面向對象是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。其考慮問題和解決問題的方法是:有誰做(WHO)→誰是誰(WHO)→誰怎么做(HOW)。
可以明顯地看出,面向對象是以功能來劃分問題,而不是步驟。如果把過去十年稱為“OO時代”,相信不會引起太多的異議。面向對象技術會如此受到廣泛的重視,主要是面向對象的思想接近于客觀世界的實際和符合人們通常的思維方式從而易于為人們所接受。人們在傳統的OO三要素(封裝性,繼承性,多態性)的基層上發展了更多的新技術,借以彌補OO的缺陷,使OO方法和技術能夠更好地解決軟件開發中的問題。
然而,OO技術存在一大局限性就是:它對軟件職責的劃分是“垂直”的。在一個標準的對象繼承體系中,每一繼承類主要是負責軟件系統中一個特定部分的功能,對象的行為是在編譯期間被決定的。OO技術的另一大問題是接口問題。在傳統的OO環境下,對象開發者沒有任何辦法確保使用者按照自己的要求來使用接口。由于OO技術的這些缺點,按照事物發展的規律,必然促使新的程序設計方法出現來解決這些問題。
4 可配置的程序設計
由于面向對象的程序設計存在的局限性,軟件開發者為了彌補該缺陷,提出了可配置的程序設計方法,用一個配置文件作為程序與外部的接口文件,這樣軟件使用者只需按照自己的要求來修改該接口文件,不需做其他任何更改就可滿足不同的需求。
應用程序配置文件是標準的 XML 文件,XML 標記和屬性是區分大小寫的。它是可以按需要更改的,其優勢體現在開發人員可以使用配置文件來更改設置,而不必重編譯應用程序,使得業務邏輯分離出來。管理員可以使用配置文件來設置策略,以便影響應用程序在計算機上運行的方式。
4.1 應用服務器JBOSS的數據源配置文件
<datasources>
<local-tx-datasource>
<jndi-name>jdbc/test</jndi-name>
<connection-url>jdbc:oracle:thin:@127.0.0.1:1521:oradb</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>guest</user-name>
<password>guest</password>
<min-pool-size>0</min-pool-size>
<max-pool-size>10</max-pool-size>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
</exception-sorter-class-name>
</local-tx-datasource>
</datasources>
上面是JBOSS的一個數據源配置接口文件,存放路徑為:jboss安裝路徑→server→default→deploy→oracle-ds.xml,其連接數據庫類型為ORACLE,其中,定義了一個名為jdbc/test的數據源,其參數包括JDBC的URL,驅動類名,用戶名及密碼等。直接使用JDBC或者通過JNDI引用數據源的編程代碼量相差無幾,但是現在的程序可以不用關心具體JDBC參數了。在系統部署后,如果數據庫的相關參數變更,只需要重新配置 oracle-ds.xml 修改其中的JDBC參數,只要保證數據源的名稱不變,那么程序源代碼就無需修改。由此可見,JNDI避免了程序與數據庫之間的緊耦合,使應用更加易于配置、易于部署。
當然除了ORACLE數據庫外,JBOSS還可連接其他類型的數據庫,比如SQL SERVER2000,用戶只需更換一個數據庫配置文件即可,無須做其他更改。
4.2 自定義的配置文件
<?xml version=\"1.0\" encoding=\"GB2312\"?>
<config>
<runmode>0</runmode><!-- 運行模式:0正常;1測試;2調試 -->
<servertype>0</servertype>
<!-- 服務器類型:0websphere,1weblogic,2jboss,3tomcat -->
<databasetype>1</databasetype><!-- 數據庫類型:0SQL;1Oracle;-->
<datasource>
<connection>
<connection-url>jdbc:oracle:thin:@192.168.10.8:1521:xbfmis</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>fmismain</user-name>
<password>fmismain</password
</connection>
</datasource>
<performance>
<check>1</check> <!-- 是否做性能檢查 -->
<warn>1</warn> <!-- 警告0 不做警告1 警告 當不滿足性能要求時是否警告 -->
<exception>0</exception>
<!-- 異常 0 不拋出異常 1 拋出異常 當不滿足性能要求時是否拋出異常 -->
</performance>
</config>
以上是用戶在開發程序過程中自定義的一個xml配置文件,其中包含很多用戶自定義的標簽,比如用servertype標簽可以設置應用服務器類型,用databasetype標簽設置連接的數據庫類型,用performance標簽設置性能檢查相關的參數等等。在外部環境發生變化時,用戶只需修改配置文件中相應的參數即可,無須修改代碼,重新編譯程序,大大節省了人力和物力,增強了程序的可擴展性及可重用性,而這點正是軟件工程提出的對應用程序最重要的目標。
如今,我們正處于信息時代,有人將信息時代形容為:知識爆炸+知識共享+即時通訊+即時查詢。從海量的信息中查詢到我們所需要的信息,已經成為應用軟件的一個重要的必不可少的功能,自定義的配置文件一個重要的應用就是可以實現通用查詢。通用查詢就是使用統一的查詢描述和通用查詢處理引擎,代替對不同的查詢應用編寫不同的查詢相關代碼,把大部分需要重復編寫的部分由通用引擎來處理,通過使用通用模板和引擎,做大部分應用開發時不需要開發頁面,不需要編寫業務邏輯,簡少大量重復工作,只需要對具體應用做一個相應的配置就行了。
使用基于模板和引擎的開發,產品的質量,如性能,可靠性等可以得到集中的控制和優化,可以使開發人員只關注應該關注的業務細節,從技術實現細節中解放出來。
配置文件框架如下:
<?xml version=\"1.0\" encoding=\"GB18030\" ?>
<sqldatasource>
<sqltext type=\"\"></sqltext> <!-- 0 SQL語句;1 名稱/值對;3 一個類名 -->
<displaycolumn></displaycolumn> <!-- 以逗號分隔的字段名,設置缺省哪些列顯示 -->
<topcount></topcount> <!-- 是否取前面多少條記錄,如果需要則記錄相應的數值 -->
<orderby></orderby> <!-- 排序字段列表-->
<groupby></groupby> <!-- 分組字段列表-->
<displaytotalrow></displaytotalrow> <!-- 是否顯示合計行 true 1 -->
<displaytotalcolumn></displaytotalcolumn> <!-- 是否顯示合計列 true 1 -->
<parameters> <!-- 參數定義 注意,參數是完全按照在下面出現的順序確定索引的 -->
<parameter default=\"\" source=\"\" type=\"\" name=\"\" alias=\"參數別名,如果沒有取name\" operator=\"<>\" dynamic=\"0\" emptyusedefault=\"true\"></parameter>
<!-- default 參數缺省值; source 參數的取值來源 [0 常量 1 總線節點 2 界面組件] ;
type 參數類型 0 無類型 1 NUMERIC 2 STRING 5 DATETIME ;name 全部使用大寫;
operator 比較關系操作符; dynamic 0 靜態參數 1 動態參數 需要動態形成過濾條件;
emptyusedefault 當沒有相應的參數時是否使用缺省值 -->
</parameters>
<actions> <!-- 查詢事件配置 -->
<action className=\"\"></action>
</actions>
<queryreturn>
<queryreturnfields></queryreturnfields><!-- 返回的值字段 順序返回-->
<queryreturntextfields></queryreturntextfields><!--返回的文本字段 順序返回-->
</queryreturn>
<fadisplayformat> <!-- 方案的顯示結果方案 -->
<gridset> <!-- 查詢結果格式信息 查詢表格的分組合計設置,列寬度高度等的設置-->
</gridset>
</fadisplayformat>
</sqldatasource>
使用者只需按照框架的格式要求編寫配置文件,而不需修改代碼,就可以實現各種各樣的查詢,從而加強了該程序的復用性。
5 結束語
可配置的程序設計得到了越來越多的軟件開發者和使用者的青睞,該技術也不斷地趨于成熟,程序設計必將沿著該技術路線發展下去。
參考文獻:
[1] 石雙元.面向對象開發方法[M].科學出版社,2007.
[2] 用例子說明面向對象和面向過程的區別[EB/OL].[2007-09-20].http://www.soft6.com/tech/9/90898.html.
[3] 陳曉紅.面向過程與面向對象--兩種程序設計方法的比較與思考[J].計算機時代,2001(11).
[4] XML配置文件的讀取處理[EB/OL].[2007-03-22].http://www.mp3sea.net/Java/2007-3-22/XML-PeiZhiWenJianDeDouQuChuLi-29ir12506.htm.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文