使用VBScript进行面向对象程序设计


随着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

你可能感兴趣的:(Class,VBScript,inheritance,终端,destructor,scripting)