即使在今天,用腳本語言編寫的應用程序的數目也遠多于用系統程序設計語言編寫的應用程序的數目.在Unix系統中有比C程序更多的外部腳本,而在Windows下Visual Basic的編程者和應用程序都比C或C++的要多.當然,多數大型和廣泛使用的應用程序都是用系統程序設計語言寫成的,所以,如果比較代碼總行數或是建立的副本數,則系統程序設計語言略勝一籌.不管怎么樣,腳本語言已經是應用程序開發的主動力,并且今后它的市場份額會繼續提高.
6.對象的作用
腳本語言在編程語言和軟件工程中通常被專家忽視.取而代之,他們更注重像C++和Java等面向對象系統程序設計語言.面向對象編程被認為是代表下一步編程語言發展的主流.像強類型和繼承等面向對象 特征 據說可以減少開發時間,提高軟件重用率,并解決包括腳本語言技巧等其他問題.
面向對象編程實際能提供多少好處?不幸的是,我還沒有看到足夠的數據可以確切地回答這個問題.在我看來,對象只能提供一定的好處:或許能提高20-30%的創作力,但決不會有兩倍,更不用說是十倍.現在抱怨C++的和喜歡它的一樣多,并且一些語言專家開始公開反對面向對象編程.這一段剩下的部分用于解釋為什么對象不能像腳本一樣顯著地提高創作力,并討論腳本語言中可以獲得的面向對象編程的好處.
面向對象編程不能顯著提高創作力的原因是他沒有提高編程層次或鼓勵重用.像C++等面向對象語言中編程者仍然使用需要用大量細節來描述和操縱的基本的小單元工作.理論上可以開發強大的函數庫包,并且如果這些函數庫被廣泛使用就將提高編程層次.然而,這樣的函數庫卻很少.大多數面向對象語言的強類型使包的定義受限制從而難以重用.每個包都需要特殊類型的對象,如果兩個包在一起工作,就必須寫轉換代碼在兩個包需要的類型間進行翻譯.面向對象語言的另一個問題是他們強調繼承.當一個類借用為另一個類寫的代碼時執行繼承并不是一個好主意,它使軟件難以管理和重用.它把類的執行綁在一起,因而沒有另外一個類任何一個其它類都不可理解:不知道其繼承的方法在父類中如何執行,則無法理解子類;而不知道其方法如何被子類繼承,則無法理解父類.在一個復雜的類繼承中,不理解它所繼承的所有其他的類就無法理解任何一個類.更糟的是,一個類無法從它繼承的類中被分離以用于重用.多重繼承使這個問題變得更麻煩.執行繼承導致和goto語句被重復執行時所看到的一樣的交錯和不可靠.因此,面向對象系統經常不能處理復雜問題并缺少重用.
另一方面,腳本語言實際引起了有效的軟件重用.在有趣的組件由系統程序設計語言建立使他們使用了模塊,隨后用腳本語言把他們膠著在應用程序中.這種勞動的分割提供了為重用的自然的框架結構.組件被設計為可重用的組件和腳本間有定義好的接口以利于組件的使用.例如,在Tcl中組件是C中執行的常規命令.他們看起來更象是內在的命令,因而更容易在Tcl腳本中使用.在Visual Basic中組件是ActiveX的擴展,可用于從工具面板直接拖到窗體中.
不管怎么樣,面向對象編程至少提供了兩個有用的特性.第一個是封裝:對象用某種隱藏執行細節的方法把數據和代碼聯系起來.這使管理大型系統更加容易.另一個有用的特性是接口繼承,這涉及提供同樣方法的類和APIs,即使他們有不同的執行,這時類之間可以相互轉化,從而鼓勵重用.
幸運的是,對象的這些好處在腳本語言中可以像在系統程序設計語言中一樣實現,并且所有的腳本語言都提供面向對象編程.例如,Python是面向對象腳本語言,Python第五版包括提供對象,Object Rexx是Rexx的面向對象版本,而Incr Tcl是Tcl的面向對象版本.有一點不同是,腳本語言中的對象事物類型的,而系統程序設計語言中的對象是強類型的.
7.其他語言
這篇文章不是所有編程語言的全部特性記述.除了類型長度和編程層次以外還有許多編程語言的其他特性,并且還有許多不能被明確定義為系統程序設計語言或腳本語言的其他有趣的語言.例如,Lisp系統的語言就處于腳本語言和系統程序設計語言之間,兩方的特性它都有一些.它開創了像解釋和活動類型等現在在腳本語言中很普遍的觀點,又有自動存儲管理和綜合開發環境等在腳本和系統程序設計語言中同時使用的觀念.
8.結論
腳本語言代表一套與系統程序設計語言不同的協定.他們犧牲執行速度和與系統程序設計語言相關的類型長度而提供更高的編程創作力和軟件重用.當計算機變得更快和比編程者的勞動力更便宜時這個協定越來越行得通.在復雜的數據結構和算法中系統程序設計語言也適于創建組件,而腳本語言更適合在聯系復雜的應用程序中進行膠著.膠著工作變得越來越盛行,因而腳本在下個世紀將成為比今天更為重要的編程范例.
我希望這篇文章可以在三個方面影響編程群體;
★在開始一個新的項目并為每個工作選擇最強大的工具時我希望編程人員能考慮到腳本和系統編程的不同
★我希望組件框架的設計者能認識到腳本的重要性并確信框架不僅是創建組件的工具,同時也是把他們膠著在一起的工具
★我希望編程語言研究協會能轉變他們對腳本語言的態度,并在將來幫助發展更強大的腳本語言.對語言設計者而言,提高編程層次應該是唯一重要的目標,因為他是提高編程者創造力的最重要的因素;強類型是否有助于達到這個目標還不清楚.
9.答謝
這篇文章得益于很多人的觀點,包括Joel Bartlett, Bill Eldridge, Jeffrey Haemer, Mark Harrison, Paul McJones, David Patterson, Stephen Uhler, Hank Walker, Chris Wright,IEEE計算機執行官,和許多熱心參與這篇文章早期草稿網上新聞組討論的人.Colin Stevens 寫了MFC按鈕例子的版本,Strphen Uhler寫了Java版本
文章來源于領測軟件測試網 http://www.kjueaiud.com/