Visual Basic

微軟公司開發的驅動編程語言

Visual Basic(簡稱VB)是Microsoft公司開發的一種通用的基於對象的程序設計語言,為結構化的、模塊化的、面向對象的、包含協助開發環境的事件驅動為機制的可視化程序設計語言。是一種可用於微軟自家產品開發的語言。 

“Visual” 指的是開發圖形用戶界面 (GUI) 的方法——不需編寫大量代碼去描述界面元素的外觀和位置,而只要把預先建立的對象add到屏幕上的一點即可。 “Basic”指的是 BASIC (Beginners All-Purpose Symbolic Instruction Code) 語言,是一種在計算技術發展歷史上應用得最為廣泛的語言。

Visual Basic源自於BASIC編程語言。VB擁有圖形用戶界面(GUI)和快速應用程序開發(RAD)系統,可以輕易的使用DAO、RDO、ADO連接資料庫,或者輕鬆的創建Active X控制項,用於高效生成類型安全和面向對象的應用程序 。程序員可以輕鬆的使用VB提供的組件快速建立一個應用程序。

發展歷史


Visual Basic
Visual Basic
1991年,微軟公司推出了Visual Basic 1.0版。這在當時引起了很大的轟動。這個連接編程語言和用戶界面的進步被稱為Tripod(有些時候叫做Ruby),最初的設計是由阿蘭·庫珀(Alan Cooper)完成的。許多專家把VB的出現當做是軟體開發史上的一個具有劃時代意義的事件。其實,以我們現在的目光來看,VB1.0的功能實在是太弱了;(不過最近VB6.0, VB.NET的功能相當大!)。但在當時,它是第一個“可視”的編程軟體。這使得程序員欣喜之極,都嘗試在VB的平台上進行軟體創作。微軟也不失時機地在四年內接連推出VB2.0,VB3.0,4.0三個版本。並且從VB3開始,微軟將ACCESS的資料庫驅動集成到了VB中,這使得VB的資料庫編程能力大大提高。從VB4開始,VB也引入了面向對象的程序設計思想。VB功能強大,學習簡單。而且,VB還引入了“控制項”的概念,使得大量已經編好的VB程序可以被我們直接拿來使用。VB1.0的DOS版本VB1.0於1991年發布。
2002年Visual Basic .NET 2002 (v7.0)問世,2003年Visual Basic .NET 2003 (v7.1)問世,2005年11月7日Visual Basic 2005 (v8.0)問世,同時間推出Visual Basic 2005的免費簡化版本Visual Basic 2005 Express Edition給Visual Basic初學者及學生使用。
VB 2005的“顯著”優點是,可以直接編寫出XP風格的按鈕,以及其他的控制項。但是其編寫的小程序佔用近10MB的內存。
通過幾年的發展,它已成為一種專業化的開發語言和環境。用戶可用Visual Basic快速創建Windows程序,現在還可以編寫企業水平的客戶端/伺服器程序及強大的資料庫應用程序。
VB會吸引更多的讚譽和批評,也會繼續為廣大的用戶和程序員使用。它非常適合用來開發擁有友好界面的程序(比如針對終端的數據),但是不適合開發其它程序(比如聯合計算程序)。

歷史版本

1991年4月,Visual Basic 1.0 Windows版本發布
1992年9月,Visual Basic 1.0 DOS版本發布。
1992年11月,VB2.0發布。它對於上一個版本的界面和速度都有所改善。
1993年夏天,VB3.0發布,分為標準版和專業版。其中包含一個數據引擎,可以直接讀取Access資料庫。
1995年8月,VB4.0發布了32位版本和16位的版本。其中包含了對類的支持。
1997年2月,VB5.0發布。程序員可以用32位的版本導入由4.0版本創建的16位程序,並且能順利編譯。同時還包含了對用戶自建控制項的支持。
1998年夏天,VB6.0發布。
2001年,Visual Basic.net和.NET Framework發布。由於其使用了新的核心和特性,所以很多VB的程序員都要改寫程序。
2003年,Visual Basic.net 2003和.NET Framework 1.1發布。
2004年,微軟開放了Visual Studio 2005的測試版本(代號Whidbey)。包含了.NET Framework2.0的測試版本。
2005年,微軟宣布將不會再對非.NET版本的VB進行支持。VB社群立即作出反應表示關心這個消息,一些老用戶還遞交了希望能夠繼續對VB進行技術支持的請願書。微軟目前還不願意改變他們的決定。

語言特性


製作應用程序安裝盤等為用戶提供了友好的集成開發環境,具體表現在:
可視化的設計平台:在使用傳統的程序設計語言編程時,一般需要通過編寫程序來設計應用程序的界面(如界面的外觀和位置等),在設計過程中看不見界面的實際效果。而在Visual Basic 6.0中,採用面向對象程序設計方法(Object-Oriented Programming),把程序和數據封裝起來作為一個對象,每個對象都是可視的。開發人員在界面設計時,可以直接用Visual Basic 6.0的工具箱在屏幕上"畫"出窗口、菜單、命令按鍵等不同類型的對象,並為每個對象設置屬性。開發人員要做的僅僅是對要完成事件過程的對象進行編寫代碼,因而程序設計的效率可大大提高。
事件驅動的編程機制:面向過程的程序是由一個主程序和若干個子程序及函數組成的。程序運行時總是先從主程序開始,由主程序調用子程序和函數,開發人員在編程時必須事先確定整個程序的執行順序。而Visual Basic 6.0事件驅動的編程是針對用戶觸發某個對象的相關事件進行編碼,每個事件都可以驅動一段程序的運行。開發人員只要編寫響應用戶動作的代碼。這樣的應用程序代碼精簡,比較容易編寫與維護。
結構化的程序設計語言:Visual Basic 6.0具有豐富的數據類型和眾多的內部函數。其採用模塊化和結構化程序設計語言,結構清晰,語法簡單,容易學習。
強大的資料庫功能:Visual Basic 6.0利用數據控制項可以訪問Access、FoxPro等多種資料庫系統,也可以訪問Excel、Lotus等多種電子表格。
ActiveX技術:ActiveX發展了原有的OLE技術,使開發人員擺脫了特定語言的束縛,方便地使用其他應用程序提供的功能,使Visual Basic 6.0能夠開發集聲音、圖像、動畫、字處理、電子表格、Web等對象於一體的應用程序。
網路功能:Visual Basic 6.0提供的DHTML(動態HTML)設計工具可以使開發者動態地創建和編輯Web頁面,使用戶能開發出多功能的網路應用軟體。

專業術語


在討論Visual Basic時,經常可以聽到以下這些術語,因此對這些術語的基本理解十分有幫助。
控制項——簡單的說,控制項就是構成或者說建造Visual Basic應用程序的圖形化工具,包括窗體、按鈕、複選框、列表框、數據控制項、表格控制項和圖片控制項等等...。
事件——由用戶或操作系統引發的動作。事件的示例有擊鍵、單擊滑鼠(Click)、雙擊滑鼠(DblClick)、一段時間的限制,或從埠接收數據。
方法——嵌入在對象定義中的程序代碼,它定義對象怎樣處理信息並響應某事件。例如,資料庫對象有打開紀錄集並從一個記錄移動到另一個記錄的方法程序的基本元素,它含有定義其特徵的屬性,定義其任務和識別它可以響應的事件的方法。控制項和窗體是Visual Basic中所有對象的示例。
對象——一個控制項、窗體等都可被看作一個對象。
過程——為完成某些特定的任務而編寫的代碼段,過程通常用於響應特定的事件,也可以當作應用程序的用戶自定義函數來使用。
屬性——屬性是組成用戶界面的各對象的性質的具體描述。例如上述“對象”中所提到的尺寸、位置、顏色、寬度、高度等等都稱為控制項的 屬性。屬性決定對象的外觀,有時也決定對象的行為。對象的屬性絕大部分是VB中已經事先定義好的,但也有的屬性是需要在應用 過程中才去定義的。屬性即可為對象提供數據,也能從對象取回信息。
VB的局限性
VB5和VB6都是面向對象的編程語言,但是不包含繼承特性。VB中提供了特殊的類的功能,但是還是不能滿足程序員的需求。VB.net 包含了所有面向對象的特性。
多線程支持 (VB.Net 2002以及之後的版本,都支持多線程技術。)
異常處理。VB.net中使用了Try-Catch-Finally來處理異常。而VB中只有"On Error Goto line"語句。
對指針的支持非常有限。
VB只能支持8到32位的整形,很多語言都有無限制的支持。
VB不允許在任何數組內存在不變的變數。
VB不支持以上特性,程序員需要自己建構方法來實現相似的功能。

有何爭議


反對觀點

VB是一種充滿了爭議的語言:很多程序員對VB程序的質量有強烈的感受。很多人認為VB不配他們使用,認為它是一種給兒童和菜鳥程序員的語言。它自從設計開始就是一種簡單的語言。一些C++和Java中的特性在VB中並沒有出現。在感受開發的方便和快速的同時,一些類似於編譯時進行類型和聲明檢查的功能在默認情況下是關閉的。這樣一些程序員一邊感嘆VB的易用性,一般沮喪地地看著一些類似於“未定義類型”錯誤的發生。
一些批評家認為VB的簡單特性使得其在未來具有傷害性。很多人自學了VB,但是並沒有學到好的編程習慣。當VB進入課堂的時候,學生們不會學到很多基礎的程序技術和結構,因為很多技術已經包含在那些對用戶可見的組件裡面了。不用學習標準的編程習慣,因為VB具有可視化的特性,所以導致了一些莫名其妙的代碼的產生。而且很多錯誤和警告的檢查默認情況下都是關閉的,程序員很難找到隱藏的錯誤。有經驗的程序員在用VB編程的時候都會把這些選項打開。
很多批評家批評微軟簡單地拷貝了BASIC的思想到VB中。著名的計算機科學家Edsger Dijkstra說過一句名言:“如果一個學生最早學過BASIC,那麼幾乎不可能讓他學會優秀的編程:因為這些人已經放棄了涅磐的希望。”(Dijkstra對待Fortran、PL/1、COBOL和APL同樣也毫不留情。)
另外一個笑話是:“真正的程序員不用BASIC。12歲以下的孩子才用。”
並不是非常簡便,它開發的程序只能運行在Microsoft Windows中。
個頭太大了。Visual Studio要用好幾張盤才能裝下。VB程序在運行時候還需要一個1.4M大小的運行庫。
IDE中有錯誤。
VB不能很好的綜合Windows的基礎API,很多時候要使用低級運算的“小伎倆”來進行編程。而C語言的低級內存運算比VB的要簡單得多。

支持觀點

但是很多VB的支持者解釋說VB的易用性就是它最大的優勢,可以讓經驗豐富的VB程序員或是剛剛懂得皮毛的人都能用自己的方式快速開發程序。而且VB的程序可以非常簡單的和資料庫連接。比如利用控制項可以綁定資料庫,這樣一來用VB寫出的程序就可以掌握資料庫的所有信息而不用寫一行代碼。
很多語言的特性比如GoSub、On Error和用變數名字的最後一個字元判斷聲明類型(比如字元串型str a,b,c As Integer”聲明了c為整形變數,但是a、b都是Variant類型的。 {這兒我說明一下,如果想申明3個Integer,必須寫 Dim a as Integer, b As Integer, c as Integer;而直接寫Dim a,後面不寫類型,則自動變成Variant類型——佔用大量資源。} 還有一些特性,比如下劃線字元“_”用於一行代碼分多行寫時候。一些程序員在使用的時候由於不規範使得便引起報錯。

衍生語言


微軟開發了一系列有關VB的腳本語言:
Visual Basic for Applications,即VBA,包含在微軟的應用程序中(比如Microsoft Office),以及類似WordPerfect Office這樣第三方的產品裡面。VBA這樣嵌入在各種應用程序中看起來有些矛盾,但是它的功能和VB一樣強大。
VBScript是默認的ASP語言,還可以用在Windows腳本編寫和網頁編碼中。儘管它的語法類似於VB,但是它卻是一種完全不同的語言。VBS不使用VB運行庫運行,而是由Windows腳本主機解釋執行。這兩種語言之中的不同點影響ASP網站的表現。
當微軟準備開發一種新的編程工具的時候,第一決定就是利用最搶手的VB6來進行舊改,或者就是重新組建工程開發新工具。微軟後來開發了VB的繼任者Visual Basic .NET,同時也是.NET平台的一部分。VB.net編程語言是一種真正的面向對象編程語言,和VB並不完全兼容。
關於VB.NET
Visual Studio.net 2005已經在2005年11月7日發布。
Visual Basic.NET(簡稱VB.NET)是新一代的VB。它不是vb 6.0的簡單升級,VB.NET與VB之間有非常大的區別。其新特性主要表現在以下幾方面:
1.VB.NET完全集成到Visual Studio集成開發環境中,在這種集成開發環境與VB在若干方面有差異。主要體現在窗體的布局以及菜單等方面都有所不同。
2.VB.NET項目與VB不同。它使用基於文件夾的模型,所有項目均放置在項目文件夾層次結構中。
3.VB.NET中使用ADO.NET來訪問資料庫,ADO.NET是.NET框架的一部分。在VB.NET中實現數據訪問的方法重要有兩種:其一是在程序設計階段,通過創建、配置數據適配器DataAdapter和生成數據集DataSet;其二是在運行中,通過編程方式動態創建配置數據適配器和創建、生成數據集。
4.在VB.NET中是使用ASP.NET技術來編寫Web頁面的。在ASP.NET中使用的也不是腳本語言,而是真正意義的編程語言。憑藉ASP.NET的Web應用程序、XML Web Services等基於Web的功能,使得VB.NET開發Web頁面與開發Windows應用程序很相似,Web頁面代碼也顯得有條有理了。
5. VB.NET已經成為完全的面向對象的編程語言。

語言特點


基本特點
VB 的中心思想就是要便於程序員使用,無論是新手或者專家。VB使用了可以簡單建立應用程序的GUI 系統,但是又可以開發相當複雜的程序。VB 的程序是一種基於窗體的可視化組件安排的聯合,並且增加代碼來指定組件的屬性和方法。因為默認的屬性和方法已經有一部分定義在了組件內,所以程序員不用寫多少代碼就可以完成一個簡單的程序。過去的版本裡面 VB 程序的性能問題一直被放在了桌面上,但是隨著計算機速度的飛速增加,關於性能的爭論已經越來越少。
窗體控制項的增加和改變可以用拖放技術實現。一個排列滿控制項的工具箱用來顯示可用控制項(比如文本框或者按鈕)。每個控制項都有自己的屬性和事件。默認的屬性值會在控制項創建的時候提供,但是程序員也可以進行更改。很多的屬性值可以在運行時候隨著用戶的動作和修改進行改動,這樣就形成了一個動態的程序。舉個例子來說:窗體的大小改變事件中加入了可以改變控制項位置的代碼,在運行時候每當用戶更改窗口大小,控制項也會隨之改變位置。在文本框中的文字改變事件中加入相應的代碼,程序就能夠在文字輸入的時候自動翻譯或者阻止某些字元的輸入。
VB 的程序可以包含一個或多個窗體,或者是一個主窗體和多個子窗體,類似於操作系統的樣子。有很少功能的對話框窗口(比如沒有最大化和最小化按鈕的窗體)可以用來提供彈出功能。
VB 的組件既可以擁有用戶界面,也可以沒有。這樣一來伺服器端程序就可以處理增加的模塊。
VB 使用參數計算的方法來進行垃圾收集,這個方法中包含有大量的對象,提供基本的面向對象支持。因為越來越多組件的出現,程序員可以選用自己需要的擴展庫。和有些語言不一樣,VB 對大小寫不敏感,但是能自動轉換關鍵詞到標準的大小寫狀態,以及強制使得符號表入口的實體的變數名稱遵循書寫規則。默認情況下字元串的比較是對大小寫敏感的,但是可以關閉這個功能。
VB 使得大量的外界控制項有了自己的生存空間。大量的第三方控制項針對 VB 提供。VB 也提供了建立、使用和重用這些控制項的方法,但是由於語言問題,從一個應用程序創建另外一個並不簡單。
語言缺點
Visual Basic 語言具有不支持繼承、無原生支持多線程、異常處理不完善等三項明顯缺點,使其有所局限性(此些缺點皆已在 vb .net 獲得改進)。
不支持繼承
VB 5.0 和 VB 6.0 都是基於對象的編程語言,但是不包含繼承特性。VB 中提供了特殊的類的功能,但是還是不能滿足程序員的需求。
無原生支持多線程
Visual Basic 對於多線程無原生支持,只能通過Windows API的調用實現,且極其的不穩定。因為在API創建的線程中,並沒有自動初始化運行時庫,導致部分的函數無法使用。一般的,在VB6等早期的VB開發環境下,使用API創建線程的目的是完成容易使程序假死的大量數據或者邏輯的計算。
異常處理不完善
Visual Basic 中內置異常處理,即使未寫異常處理代碼,一旦用戶出錯也會彈出一個明確寫出出錯原因對話框,接著程序終止。
Visual Basic 中可以使用 Err.Raise拋出異常。對系統及用戶拋出的異常的處理常用兩種模式:一是使用 On Error Resume Next 處理錯誤;另一種是使用 On Error Goto 將運行引入錯誤處理代碼。但相對 C++ 等語言而言,這樣的異常處理破壞了代碼的結構。