ASP怎么谈到应用到类的?_ASP CLASS类

先摘录天极网扬老师一篇文章中的一段:
面向对象的程序设计

  随着程序的设计的复杂性增加,结构化程序设计方法又不够用了。不够用的根本原因是“代码重用”的时候不方便。面向对象的方法诞生了,它通过继承来实现比较完善的代码重用功能。很多学生在应聘工作,面试的时候,常被问及一个问题“你来谈谈什么是面向对象的程序设计”,学生无言,回来问我,这个问题应该怎么回答。我告诉他,你只要说一句话就够了“面向对象程序设计是对数据的封装;范式(模板)的程序设计是对算法的封装。”后来再有学生遇到了这个问题,只简单的一句对答,对方就对这个学生就刮目相看了(学生后来自豪地告诉我的)。为什么那?因为只有经过彻底的体会和实践才能提炼出这个精华。

  面向对象的设计方法和思想,其实早在70年代初就已经被提出来了。其目的就是:强制程序必须通过函数的方式来操纵数据。这样实现了数据的封装,就避免了以前设计方法中的,任何代码都可以随便操作数据而因起的BUG,而查找修改这个BUG是非常困难的。那么你可以说,即使我不使用面向对象,当我想访问某个数据的时候,我就通过调用函数访问不就可以了吗?是的,的确可以,但并不是强制的。人都有惰性,当我想对 i 加1的时候,干吗非要调用函数呀?算了,直接i++多省事呀。呵呵,正式由于这个懒惰,当程序出BUG的时候,可就不好捉啦。而面向对象是强制性的,从编译阶段就解决了你懒惰的问题。

  巧合的是,面向对象的思想,其实和我们的日常生活中处理问题是吻合的。举例来说,我打算丢掉一个茶杯,怎么扔那?太简单了,拿起茶杯,走到垃圾桶,扔!注意分析这个过程,我们是先选一个“对象”------茶杯,然后向这个对象施加一个动作——扔。每个对象所能施加在它上面的动作是有一定限制的:茶杯,可以被扔,可以被砸,可以用来喝水,可以敲它发出声音......;一张纸,可以被写字,可以撕,可以烧......。也就是说,一旦确定了一个对象,则方法也就跟着确定了。我们的日常生活就是如此。但是,大家回想一下我们程序设计和对计算机的操作,却不是这样的。拿DOS的操作来说,我要删除一个文件,方法是在DOS提示符下:c:> del 文件名<回车>。注意看这个过程,动作在前(del),对象在后(文件名),和面向对象的方法正好顺序相反。那么只是一个顺序的问题,会带来什么影响那?呵呵,大家一定看到过这个现象:File not found. “啊~~~,我错了,我错了,文件名敲错了一个字母”,于是重新输入:c:> del 文件名2<回车>。不幸又发生了,计算机报告:File read only. 哈哈,痛苦吧:)。所以DOS的操作其实是违反我们日常生活中的习惯的(当然,以前谁也没有提出过异议),而现在由于使用了面向对象的设计,那么这些问题,就在编译的时候解决了,而不是在运行的时候。obj.fun(),对于这条语句,无论是对象,还是函数,如果你输入有问题,那么都会在编译的时候报告出来,方便你修改,而不是在执行的时候出错,害的你到处去捉虫子。

  同时,面向对象又能解决代码重用的问题——继承。我以前写了一个“狗”的类,属性有(变量):有毛、4条腿、有翘着的尾巴(耷拉着尾巴的那是狼)、鼻子很灵敏、喜欢吃肉骨头......方法有(函数):能跑、能闻、汪汪叫......如果它去抓耗子,人家叫它“多管闲事”。好了,狗这个类写好了。但在我实际的生活中,我家养的这条狗和我以前写的这个“狗类”非常相似,只有一点点的不同,就是我的这条狗,它是:卷毛而且长长的,鼻子小,嘴小......。于是,我派生一个新的类型,叫“哈巴狗类”在“狗类”的基础上,加上新的特性。好了,程序写完了,并且是重用了以前的正确的代码——这就是面向对象程序设计的好处。我的成功只是站在了巨人的肩膀上。当然,如果你使用VC的话,重用最多的代码就是MFC的类库。

============================================================

OK,那么看看我们如何使用ASP的。

大家一般都是使用IIS的默认脚本语言VbScript作为ASP的服务器端执行语言的,在起初基本都是将该VBS脚本和HTML掺合在一起,实现着某些功能。比如需要在当前页显示最新的5条记录了,就可以这样。

1,先定义数据库的连接,如:


db_path = "../database/cnbruce2005.mdb"
Set conn= Server.CreateObject("ADODB.Connection")
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(db_path)
conn.Open connstr

2,然后建立数据库记录集合,提取相关信息


Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "Select top 5 * from [news] order by n_id desc"
rs.Open sql,conn,1,1

3,最后通过循环的方法将数据显示出来


do while not rs.eof
response.write rs("n_title")
rs.movenext
loop
'还有最后的关闭和释放操作
rs.close
set rs=nothing

那么就是在 response.write rs("n_title") 这里,为了最终的网页设计的需要,在它的前前后后,估计还是需要加入一些其他的HTML标签元素的。于是很自然的,VBS脚本和HTML掺合了。

再来看,如果说有很多页都需要显示这5条记录,那是不是每个页都要这样去设置,当然最主要的只是每个页的设计样子不同。那这就是重复。重复在那里?那里可以不要重复?

1,针对数据库的连接,都直接建立了一个数据库连接文件conn.asp,内容即如上。

2,那么只要是需要使用数据库的,需要建立连接的,直接包含引用该数据库连接文件,即可了事。

<!--#include file="conn.asp"-->

那么上面是省去的什么重复?每次数据库连接的重复。这是对于通用的某些共用的代码的防重复。接着来看,如果说我要这个页面显示5条,那个页面显示6条,又该如何?很显然,这只能是对当前页中的SQL语句进行简单的修改,比如原来是 top 5 的修改为 top 6。

OK,继续看,是不是还有重复?有,除了SQL查询定义的不同,其他的都是重复。

于是,继续想办法:可不可以自己来定义提取的条数?就是我想提取几条就几条,但程序只需要写一个。那么这时候,函数的就派上用场了啊。比如我定义这样的函数:


Function topnews(tnum)

Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "Select top "&tnum&" * from [news] order by n_id desc"
rs.Open sql,conn,1,1

do while not rs.eof
response.write rs("n_title")
rs.movenext
loop

rs.close
set rs=nothing

End Function

那么,就可以使用 topnews(5) 或者 topnews(6) 来完成需要了

……咋一看,似乎ASP用上函数这就算最终的完成了。因为主要的程序功能做成了函数模块,需要在前台页面使用该功能时,直接调用一下,必要时修改下函数参数值就是一个完美的结局/。

那么,ASP中怎么又引入了类?这类是什么?又是如何应用?

在ASP的脚本语言中,VBscript里有个Class关键字,用它可来声明一个自定义类。比如

Class name
 statements
End Class

这里statements里可以声明公有或私有的成员,包括函数、成员和属性。

而Javascript则是用一个函数来“声明”类,然后在该函数里通过 this.prototype 定义属性,this.func 定义方法。这里有一篇看看。

哪个简单拣哪个。在定义了 类也就是 class 的名称 name 后,这里面可以做些什么东西呢?

第一个。MSDN文档:在 Visual Basic 6.0 中,在创建和毁坏类模块时,类模块使用 Initialize 和 Terminate 事件来执行所有必要的操作。当在 New 语句之后第一次遇到对象时,会引发 Initialize 事件,当释放对象的最后一个引用时,会立即引发 Terminate 事件。但是,可在执行期间随时直接调用这些事件方法。

所以经常会看到这样的例子:


Class cnbruce '声明一个名为cnbruce的类

Private cnrose
Private Sub Class_Initialize
    cnrose="My Name is cnrose."
End Sub

Private Sub Class_Terminate()
End Sub

End Class

喏,这也就是一个初始化。

此外,asp类中具有let和get方法。比如在 以上代码的Class cnbruce ... End Class之间加入:

Public Property get YName
    YName=cnrose
End Property

即变成了:


Class cnbruce '声明一个名为cnbruce的类

Private cnrose
Private Sub Class_Initialize
    cnrose="My Name is cnrose."
End Sub

Private Sub Class_Terminate()
End Sub

Public Property get YName
    YName=cnrose
End Property

End Class

那么如何将该值提取呢,比如

Set aaa=New cnbruce
response.write aaa.YName

注意aaa.YName已经有些感觉了。aaa即为定义为cnbruce类的对象,最终输出显示为该类对象中的YName get值,其值内容为 变量cnrose的值,并且该值已经被初始化,所以,最终的结果是“My Name is cnrose.”

这是 get ,直接提取已经封装好的类的内部的东西,那么 let 呢?即是外部对类的交互访问操作。比如我现在外部定义的值应用到类中。即先定义:

public property let MName(nnn)
    cnrose=nnn
end property

它的意思很简单,参数nnn的值将随着外部不同的值而赋到变量cnrose上。那么OK结合上的程式,即最中输出显示的内容,也就是显示的变量cnrose的内容,不是初始化的内容,而是由let 外部应用的不定值。那如何应用let 呢。

aaa.MName="sdasdasd"

直接定义值就可以了。那么现在看看全部程序:


<%
Class cnbruce

Private cnrose
Private Sub Class_Initialize
    cnrose="My Name is cnrose."
End Sub

Public Property get YName
    YName=cnrose
End Property

public property let MName(nnn)
    cnrose=nnn
end property

End Class

Set aaa=New cnbruce
aaa.MName="hahahoho"
response.write aaa.YName

%>

虽然定义的是aaa.MName的值为"hahahoho",但根据public property let MName(nnn),其值到变量cnrose,SO在输出aaa.YName的时候,根据Public Property get YName,结果的值是什么也就不奇怪了。/

至于功能型的程式,则在类中定义为 函数 Function,或者子程序 Sub 了。

SO,总的说来,就只是功能的封装,以及在应用的时候好写好看(直接 类名.方法、类名.属性-_-!),但不要指望它像Java 或.Net那样具有面向对象的思想服务。

时间有限,虎头蛇尾将就一下了。

时间: 2024-11-08 17:29:58

ASP怎么谈到应用到类的?_ASP CLASS类的相关文章

ASP 类专题_ASP CLASS类

严格地说,ASP 并不是一门编程语言,所以不存在类这一概念,我们这里说 ASP 类是指 ASP 的编程语言 VBScript 在 ASP 里应用时的类. ASP 类比较简单,它不具有真正意义类的继承.重载等特性,尽管如此,它仍然是非常有用的,它降低了我们编程的复杂度,使我们的程序模块更加合理. ASP 类支持什么 ASP 类比较简单,它不具有真正意义类的继承.重载等特性.它支持以下内容:  公有成员变量.私有成员变量.属性  公有成员函数.私有成员函数  构造函数.析构函数  创建和使用一个最简

asp:debug类调试程序_ASP CLASS类

ASP中最头疼的就是调试程序的时候不方便,我想可能很多朋友都会用这样的方法"response.write ",然后输出相关的语句来看看是否正确.前几天写了一个千行的页面,里面大概有七八个SUB/FUNCTION,调试的时候用了有三十几个 response.write ,天,调试完后把这三十个一个个删除,累! 今天看到一个ASP中的Debug类(VBS),试用了一下,绝! 使用方法很简单: test.asp <!--#INCLUDE FILE="debuggingCons

发一个ASP的ADODB类代码_ASP CLASS类

反正我现在用这个做了很多站,自己觉得还是满有用的,所以拿出来和大家分享一下.支持三种数据库连接:MSSQL2000,MSSQL2005,ACCESS 三种方法: select_table(sql) 表查询,返回TRUE或FALSE 当SQL语句出错,或空记录时返回FALSE,否则TRUE update_table(SQL) 表更新,包括update,delete 成功执行返回TRUE,否则返回FALSE,updated为执行后影响记录行数. insert_table(sql,table,id_c

ASP语法高亮类代码_ASP CLASS类

此类高亮根据Editplus高亮来做的  复制代码 代码如下: Class Wyd_AspCodeHighLight  Private RegEx  Public Keyword,ObjectCommand,Strings,VBCode  Public KeyWordColor,ObjectCommandColor,StringsColor,Comment,CodeColor    Private Sub Class_Initialize()      Set RegEx = New RegEx

ASP中类Class相关内容的整理资料_ASP CLASS类

Class 对象 使用 Class 语句创建的对象.提供了对类的各种事件的访问. 说明 不允许显式地将一个变量声明为 Class 类型.在 VBScript 的上下文中,"类对象"一词指的是用 VBScript Class 语句定义的任何对象. 在使用 Class 语句建立了类定义之后,可以用下面的形式创建类的一个实例: Dim X Set X = New classname 由于 VBScript 是一种后期约束型语言,下面的做法是不允许的: Dim X as New classna

ASP怎么谈到应用到类的?

先摘录天极网扬老师一篇文章中的一段: 面向对象的程序设计 随着程序的设计的复杂性增加,结构化程序设计方法又不够用了.不够用的根本原因是"代码重用"的时候不方便.面向对象的方法诞生了,它通过继承来实现比较完善的代码重用功能.很多学生在应聘工作,面试的时候,常被问及一个问题"你来谈谈什么是面向对象的程序设计",学生无言,回来问我,这个问题应该怎么回答.我告诉他,你只要说一句话就够了"面向对象程序设计是对数据的封装:范式(模板)的程序设计是对算法的封装.&quo

ASP.NET实现的简单易用文件上传类

  这篇文章主要介绍了ASP.NET实现的简单易用文件上传类,本文给出实现代码和使用方法示例,需要的朋友可以参考下 调用方法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 UploadFile uf = new UploadFile();   /*可选参数*/ uf.SetIsUseOldFileName(true);//是否使用原始文件名作为新文件的文件名(默认:true),true原始文件名,false系统生成新文件名

ASP.NET中实现定制自己的委托和事件参数类_实用技巧

本文实例讲述了ASP.NET中实现定制自己的委托和事件参数类的方法,对于学习ASP.NET有很好的参考借鉴价值.具体方法如下: 一般在实际开发中,对于事件不需要传递数据信息时,像上面的KingTextBox控件的事件,在引发事件时传递的参数为EventArgs.Empty,如下所示: OnTextChanged(EventArgs.Empty); 这是因为控件KingTextBox的TextChanged事件比较简单,这里不需要参数对象传递数据.但像一些复杂的控件比如GridView的按钮命令事

叶子asp分页类_ASP CLASS类

名称: 叶子asp分页类 Name: ShowoPage(vbs class) RCSfile: ReadMe.txt Revision: 0.12.20051114.f Author: Yehe(叶子) Released: 2005-11-14 09:40:13 Descript: ASP分页类,支持access/mssql/mysql/sqlite Contact: QQ:311673 MSN:myehe@msn.com GT:mmyehe@gmail.com WebSite: http:/