使用VBScript進行物件導向程式設計

來源:互聯網
上載者:User

隨著VBScript 5.0引擎的面世,開發人員可以利用VBScript中建立類的功能,就像別的物件導向語言一樣,先看一下物件導向編程:

1.物件導向程式設計:
物件導向程式設計(Object-Oriented Programming,OOP)是程式設計方法學中的一種,在該方法中,實體(Entity)被看作現實事物的抽像.對象具有屬性(狀態)和方法(行為),屬性:用於描述對象的特徵;方法:是對象本身所固有的一些行為動作.

注意:
真正的物件導向程式設計應進一步定義為新對象具有繼承現有對象屬性和方法的能力,具有動態綁定和派生新對象的能力,VBScript中的OOP並沒有這兩種要素,因此並不能說是一種真正的物件導向程式設計語言.

2.對象與執行個體
要透徹理解物件導向程式設計,首先要理解對象與對象執行個體之間的區別:
對象(Object):如ADO的Connection對象,是抽像的概念.物理上並不存在,相反,它只是作為建立執行個體的一個模板
執行個體(Instance):則是對象的一個物理存在的實體.例如:
ADODB.Connection是一個對象,而objConn就是ADODB.Connection的一個執行個體,代碼如下:

Dim objConn
Set objConn=Server.CreateObject("ADODB.Connection")

要調用對象的方法,設定或擷取它的屬性值,就必須要擁有一個對象的執行個體.

3.封裝複雜的代碼
物件導向程式設計,可對特定任務是的複雜開發進行封裝.例如:設想你需要在網站內開啟一個文字檔,計算檔案的行數,然後把獲得的資料記錄在另一個檔案裡.假設你不使用物件導向的方法,那麼每次當你要實現這個任務時,都不得不重複如下的步驟:
a:開啟某個文字檔
b:計算文字檔的行數
c:關閉這個檔案
d:開啟記錄檔案
e:將b步驟中獲得的行數記錄下來
f:關閉記錄檔案

我們可以在以上過程封裝在單個對象內,下面看看這個對象有什麼?
對象:LogTextFileLines
屬性:TextFilePath //用來設定記錄檔案在磁碟上的實體路徑
方法:UpdateLog //負責計算某個文字檔的行數,並將結果寫入適當的記錄檔案中

一旦該對象被建立,上面的步驟就變得十分簡單:
Dim objLog
Set objLog=new LogTextFileLines
objLog.TextFilePath="c:/Log/Linecount.log"

If objLog.UpdateLog("c:/Txt/Scott.txt") then
    Response.write "logged successfully!"
Else
    Response.write "an Error when attempting to log"
End If

這裡使用了黑箱的方法來處理整個過程,這將會大大節約開發的時間,最重要的是減少了錯誤的產生

4.在VBScript中使用類
VBScript中的類只能有一個建構函式(Constructor:是在類執行個體建立時自動執行的過程),更糟糕的是,VBScript的建構函式不能使用任何輸入參數,並且在VBScript裡不支援繼承(Inheritance).

建立類:
可以使用Class語句,文法格式如下:
Class className
...類的屬性和方法
End Class

初始化和終止事件:
在建立類時,一定要注意兩個重要的事件處理器(event handler):初始化和終止
當使用關鍵字New建立一個類執行個體時,就會觸發初始化事件.例如:
Dim objLog
Set objLog=new LogTextFileLines

當類執行個體被釋放時就會觸發終止事件.既可以顯式聲明:
Set objLog=Nothing
也可以在它超出範圍時隱式自動釋放

可以在類中自已定義這些事件處理器.初始化事件處理器可用於初始化類的屬性或進行一些在啟動任務時必須作的事情.初始化事件在類中一般稱為:建構函式
終止事件可以用於進行一些關閉任務的工作,一般稱為解構函式(Destructor).代碼:
Class LogTextFileLines
    Private Sub Class_Initialize() //初始化
    ....
    End Sub

    Private Sub Class_Terminate() //終止
    ...
    End Sub
End Class

5.屬性,方法,成員變數與成員函數
從一個終端開發人員(只使用已建立的類的開發人員:end developer;類開發人員---為其它開發人員建立類的編程者:class developer)的觀點看,一個類包含屬性(Property)和方法(Method).
屬性是變數,終端開發人員通過它來設定類的狀態
方法是類提供的函數,終端開發人員使用它就可以執行一定的任務.
例如:
ADODB.Connection對象就包括了描述對象執行個體狀態的屬性:ConnectionString,ConnectionTimeout,Provider
同時還包括可以執行一定操作的方法:Open,Close

從類開發人員的觀點看,還可以有終端開發人員不能直接調用的變數和函數.這些"隱藏"的變數與函數分別被稱為:成員變數(Member variable)和成員函數(Member function)

6.public和private
物件導向程式設計的一個目標就是提供一個黑盒,讓所有具體實現的細節對終端開發人員透明.為了實現封裝,VBScript允許隱藏對象的方法和屬性.但要記住,對象對終端開發人員應該是透明的,所有作為對象的建立者,你一定希望可以防止使用者直接調用某種方法或設定一些屬性.

要建立成員函數和成員變數,就要在成員變數和成員函數的定義前面加上關鍵字:private.一個成員函數只能被同一個類內的其它方法或成員調用.成員變數也只能被類裡的方法和成員函數訪問或通過Property Get,Property Let,Property Set語句訪問.

要建立屬性或方法,就要在屬性和方法的定義前加上關鍵字:public.若你沒有顯式聲明一個屬性或方法是公有成員或私人成員,那麼這個屬性或方法就會被定義為公有成員.

範例程式碼:
Class LogTextFileLines
    Public TextFilePath
    Public Sub UpdateLog(param)
    ...
    End Sub
  
    Private A_Private_Property
    Private Sub  A_Private_Method()
    ...
    End Sub
End Class

注意:
在變數前不管使用Private還是Public,都會省略Dim語句,若決定不顯式聲明變數是Private還是Public,那你就必須在屬性名稱前加上Dim語句,這就會自動將變數設為Public.然而,最明智的作法還是顯式聲明變數或方法是Private還是Public.

以上文章取自:
O'REIILY的Designing Active Server Pages
Property Get,Property Let,Property Set的文法請參考:
Windows Scripting Technologies(script56.chm)中的VBScript/VBScript Language Reference/Objects and Collections/Class Object
MSDN Library:
http://msdn2.microsoft.com/en-us/library/23t9k18c(VS.85).aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.