仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 409|回复: 8
打印 上一主题 下一主题

[学习教程] ASP网站制作之进修ASP之在VBScript中利用类

[复制链接]
萌萌妈妈 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:18:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。vbscript  媒介
  起首,在我进进本色性主题并注释怎样创建类之前,我但愿包管你晓得“工具”。固然你能够在程序中利用工具而不必晓得其准确的划定规矩,但我其实不倡议云云!关于工具的初学者,接上去的部分将让你懂得其观点及内容。已懂得面向工具编程(OOP)的读者能够跳过这章节。

  导论
  “工具是甚么?”――工具一般代表某种实体,次要是一个变量和函数的汇合。
  “实体是甚么?”――字面上说,实体是一个“事物”,我的意义是一个观点大概任何一个物体。比方,一辆汽车是一个实体,由于它是一个物体。你公司发卖部门发卖产物也是一个实体,固然,你也能够将其拆开来看,发卖职员、客户、产物等都是实体。

  让我们更深切的来看“发卖”这个实体(工具)。为了使你更正确地有一个发卖的“映像”,你必要晓得客户买了甚么,是哪一个客户,谁是发卖职员等等……这看来是一个复杂的事务,但假定一切信息是存储在独自的数据库表中的,那末当你必要取得某个发卖历程一切相干信息时,你必需在你的数据库中做屡次自力查询,再将一切的数据集拢。有无更烦琐的举措而一次取得发卖的一切信息呢?“工具”。

  在工具中,你能够植进代码以从其他表中取得数据,你也能够保留工具属性的一切信息,如许,你能够轻松地利用代码办理你的发卖数据。比方:
Openthedatabaseconnection
SetobjConn=Server.CreateObject("ADODB.Connection")
objConn.Open"MyDSN"

Createtherecordsetobject
SetobjRS=Server.CreateObject("ADODB.Recordset")

DefinetheSQLquery
strComplexSQLQuery="SELECTC.Name,S.NameFROMCustomersC,"&_
"SalespeopleS,SalesSlWHERESl.CustomerID=C.IDAND"&_
"Sl.SalespersonID=S.IDANDSl.ID="&strIDOfThisSale&";"

Opentherecordset
objRS.OpenstrComplexSQLQuery,objConn,adOpenForwardOnly,_
adLockReadOnly,adCmdText

Takethecustomerandsalespersonnamesfromtherecordset
strCustomerName=objRS(0)
strSalesPersonName=objRS(1)

Tidyuptheobjects
objRS.Close
objConn.Close
SetobjRS=Nothing
SetobjConn=Nothing

Outputthedata
Response.Write"Thissalewasmadeby"&strSalesPersonName&_
"to"&strCustomerName

  可使用“工具”来替换:
Createthe"Sale"object
SetobjSale=NewSale

Lookupthecorrectsale
objSale.ID=strIDOfThisSale

Outputthedata
Response.Write"Thissalewasmadeby"&objSale.SalesPersonName&_
"to"&objSale.CustomerName

Tidyuptheobjects
objSale.Close
SetobjSale=Nothing

  假如你利用“Sale”工具做比打印更多的事,可让你省往良多的打字工夫。

  盘算中,工具包含“属性”和“办法”。属性次要是贮存在工具中的一个变量,其用法与变量不异。独一的区分在于参数赋值为:strMyVar="Thisisastringvariant",而工具属性为objObject.Property="Thisisastringvariant"。这点十分复杂而有效处。办法能够了解为植进工具中的函数与历程,可使用strMyVar=objObject.MethodName(strMyVar)来取代strMyVar=FunctionName(strMyVar)。写法分歧,但功效不异。属性的一个例子是工具Response中的ExpireAbsolute,Response.ExpiresAbsolute=CDate("1September1999")。办法的一个例子是工具Response中的Write办法,Response.Write"Helloworld!"。

  VBScript的一个新特征就是其能够创立新的工具而不必要求诸于花消工夫都极年夜的编译器。我将向读者展现怎样创立工具的类,并但愿供应一个优秀的初步。
  创立工具
  在VBScript中创立工具范例(类)时,你起首要晓得,这真的很简单!我在一个下战书自学,只是浏览了MicrosofVBScript的参考书,但必需供认,这书不是最简单浏览的文档。

  初学者必要安装VBScript5.0引擎,能够在MicrosoftsScriptingSite下载。

  我们来看代码。类的界说与函数和子历程十分相似。肇端举动Class,开头是EndClass,一切的工具界说写在两头部门。如今我们能够用所学的来创建第一个类,不完成任何功效的类。
Class4GuysTestObject

EndClass

  这看上往不是那末回事,但当你写进上面的代码后,你将创立一个工具的实例:
DimobjTestObject
SetobjTestObject=New4GuysTestObject
SetobjTestObject=Nothing

  明显,我们如今还不克不及用工具做任何事,如今我将注释怎样在工具中界说属性和办法。

  利用工具能够做的最基本的,是创建一组数据。比方,假设要将工夫、日期及视频程序题目创建在一同,你能够创立一个包括属性“StartTime”,“ProgramDate”和“ProgramTitle”的工具。代码以下:
ClassTVProgram
PublicStartTime
PublicProgramDate
PublicProgramTitle
EndClass

DimobjTVShow
SetobjTVShow=NewTVProgram
objTVShow.StartTime=CDate("17:30")
objTVShow.ProgramDate=DateSerial(1999,9,17)
objTVShow.ProgramTitle="TheJerrySpringerShow"

Response.WriteobjTVShow.ProgramTitle&"isonat"&_
objTVShow.StartTime&"on"&objTVShow.ProgramDate

  代码事情的体例是,我们界说StartTime,ProgramDate和ProgramTitle为类TVProgram的属性。如许,这些属性就像其他变量一样来处置,没有设置值则不会实行代码。属性名字前的Public字段有其实在寄义,并且十分主要。假如你不特指一个办法或属性为public或private,体系默许值为public,但最好养成界说任何值的优秀誊写习气(也便利你以后本人的浏览)。

  下面程序的了局大抵以下(决意于你的当地服务器设置):TheJerrySpringerShowisonat5:30pmon17/09/99.

  我在英国,以是日期实际如上。不管你跑甚么工程,它的效果都不错,但只要你入手下手利用其他工具的功效,为你大概必要的一切信息和功效,创立一个完善的接口,以撑持你所建工具包抄的实体,你才会体味到工具的真正气力。

  如今,假如你不喜好下面例子显现日期的办法,而但愿以统一种格局实际日期,也没有不要在援用每一个ProgramDate属性时加FormatDateTime(),你只必要将此类代码植进属性自己。

  如许必要用另外一种办法界说属性。一样,我们将利用ProgramDate为内部可见属性,但由于ProgramDate属性将成为一个函数而不是静态值,我们将实践日期保留在另外一个属性中internal_ProgramDate。

ClassTVProgram
PublicStartTime

Publicinternal_ProgramDate

PublicPropertyGetProgramDate
ProgramDate=Day(internal_ProgramDate)&_
""&MonthName(Month(internal_ProgramDate))&_
""&Year(internal_ProgramDate)
EndProperty

PublicProgramTitle
EndClass

DimobjTVShow
SetobjTVShow=NewTVProgram

objTVShow.StartTime=CDate("17:30")
objTVShow.internal_ProgramDate=DateSerial(1999,9,17)
objTVShow.ProgramTitle="TheJerrySpringerShow"

Response.WriteobjTVShow.ProgramTitle&"isonat"&_
objTVShow.StartTime&"on"&objTVShow.ProgramDate&"."

  程序的了局以下:
TheJerrySpringerShowisonat5:30pmon17September1999
  我们来剖析一下(2)中的程序:
ClassTVProgram
PublicStartTime
Publicinternal_ProgramDate
PublicPropertyGetProgramDate
ProgramDate=Day(internal_ProgramDate)&_
""&MonthName(Month(internal_ProgramDate))&_
""&Year(internal_ProgramDate)
EndProperty

PublicProgramTitle
EndClass

DimobjTVShow
SetobjTVShow=NewTVProgram
objTVShow.StartTime=CDate("17:30")
objTVShow.internal_ProgramDate=DateSerial(1999,9,17)
objTVShow.ProgramTitle="TheJerrySpringerShow"
Response.WriteobjTVShow.ProgramTitle&"isonat"&_
objTVShow.StartTime&"on"&objTVShow.ProgramDate&"."

  当挪用工具的属性ProgramDate时,实践上实行了函数ProgramDate,即如上界说的函数,而很快你也将习气这类在声明部分利用Public或Private关头字的体例。关头字“Property”,告诉了编译器好像挪用属性一样在内部挪用函数。接着的“Get”,标明该函数是输入仍是取得一个值。

  Get的意义是“同意内部代码往‘猎取’一个值”,与其相似的关头字另有“Let”和“Set”,但这两个对照庞大,因此我们今后再会商。

  接下往的代码看来有点难度的,给objectname.internal_ProgramDate赋值并经由过程objectname.ProgramDate来挪用它。假如可使用不异关头字同时为其赋值并取得它的值不是更好吗?固然,那也能够。

  假如界说Get和Let属性的称号不异,能够将它们看成工具不异的属性,但这只限于它们界说了不异数目的成员。(以下代码看来不太不异,仅作为实例参考)
ClassTVProgram
PublicStartTime
Publicinternal_ProgramDate
PublicPropertyGetProgramDate
ProgramDate=Day(internal_ProgramDate)&""_
&MonthName(Month(internal_ProgramDate))&_
""&Year(internal_ProgramDate)
EndProperty

PublicPropertyLetProgramDate(ByValvarDateIn)
internal_ProgramDate=CDate(varDateIn)
EndProperty

PublicProgramTitle
EndClass

DimobjTVShow
SetobjTVShow=NewTVProgram
objTVShow.StartTime=CDate("17:30")
objTVShow.ProgramDate="17Sept99"
objTVShow.ProgramTitle="TheJerrySpringerShow"
Response.WriteobjTVShow.ProgramTitle&"isonat"&_
objTVShow.StartTime&"on"&objTVShow.ProgramDate&"."

  以上代码中Let的声明部分看来仿佛是一个过剩的元素,当我第一次看到时研讨了很长工夫。每次我利用“0”作为变量用在每一个属性上,我老是失掉这个毛病信息,“元素数目必需相称”。“它们的确相称!”抓狂以后,我回过火往看程序才以为本人的愚昧!:)

  缘故原由是,当你试图为ProgramDate赋值时,你会利用如许一路程序:objTVShow.ProgramDate=dtmMyDate

  为了便利,等号右侧的值(这里指dtmMyDate)作为了一个程元赋给了函数。因而编译器大概会以为在GetProgramDate行有0程元,而LetProgramDate却多一个!分派的值老是被略过而作为属性的最初一个程元,以是即便你利用其他程元,所赋的值老是作为最初一个程元。

  如今看程序。不管经由过程ProgramDate设置日期为文本情势,仍是用internal_ProgramDate译成日期变量,程序都没有成绩。但能不克不及只利用一个出口呢?

  假如internal_ProgramDate只能在外部无效,而利用LetProgramDate反省传输的数据范例,我们就能够作出选择。比方:
ClassTVProgram
PublicStartTime
Privateinternal_ProgramDate
PublicPropertyGetProgramDate
ProgramDate=Day(internal_ProgramDate)&""&_
MonthName(Month(internal_ProgramDate))&_
""&Year(internal_ProgramDate)
EndProperty

PublicPropertyLetProgramDate(ByValvarDateIn)
IfIsDate(varDateIn)Then
internal_ProgramDate=varDateIn
Else
Placesomeerrorhandlingcodeinhere.
EndIf
EndProperty

PublicProgramTitle
EndClass

并一样声明StartTime属性:
ClassTVProgram
Privateinternal_StartTime
PublicPropertyGetStartTime
StartTime=Hour(internal_StartTime)&":"_
&Minute(internal_StartTime)
EndProperty

PublicPropertyLetStartTime(ByValvarTimeIn)
IfIsDate(varTimeIn)Then
internal_StartTime=varTimeIn
EndIf
EndProperty

Privateinternal_ProgramDate
PublicPropertyGetProgramDate
ProgramDate=Day(internal_ProgramDate)&""_
&MonthName(Month(internal_ProgramDate))&_
""&Year(internal_ProgramDate)
EndProperty

PublicPropertyLetProgramDate(ByValvarDateIn)
IfIsDate(varDateIn)Then
internal_ProgramDate=varDateIn
EndIf
EndProperty

PublicProgramTitle
EndClass
...
  如今的代码离我们想要的仍是有些不太有用,我们将在其他页利用类TVProgram,因而最好将其自力界说,以便一切也面都能够挪用。我们将在第四部分会商这点。
  如今的代码离我们想要的仍是有些不太有用,我们将在其他页利用类TVProgram,因而最好将其自力界说,以便一切也面都能够挪用。创立一个ASP页面,并定名为TVProgramClass.asp,我们在个中界说类TVProgram。

--TVProgramClass.asp--
<%
ClassTVProgram
Privateinternal_StartTime
PublicPropertyGetStartTime
StartTime=Hour(internal_StartTime)&":"&Minute(internal_StartTime)
EndProperty

PublicPropertyLetStartTime(ByValvarTimeIn)
IfIsDate(varTimeIn)Then
internal_StartTime=varTimeIn
EndIf
EndProperty

Privateinternal_ProgramDate
PublicPropertyGetProgramDate
ProgramDate=Day(internal_ProgramDate)&""&MonthName(Month(internal_ProgramDate))&""&Year(internal_ProgramDate)
EndProperty

PublicPropertyLetProgramDate(ByValvarDateIn)
IfIsDate(varDateIn)Then
internal_ProgramDate=varDateIn
EndIf
EndProperty

PublicProgramTitle
EndClass
%>

  如许就能够在任何ASP中挪用我们界说的类了,语法以下:
<!--#includevirtual="TVProgramClass.asp"-->
<%
DimobjTVShow
SetobjTVShow=NewTVProgram
objTVShow.StartTime=CDate("17:30")
objTVShow.ProgramDate=DateSerial(1999,9,17)
objTVShow.ProgramTitle="TheJerrySpringerShow"
response.writeobjTVShow.ProgramTitle&"isonat"&objTVShow.StartTime&"on"&objTVShow.ProgramDate&"."
%>

  这里有一个倡议。假如你重定名你的包括文件.asp,并包管一切主要代码都在<%...%>中,那末就算有人猜到了你包括文件的文件名,也没举措瞥见内里的内容!
想法是和程序员的想法不一样的.至于为什么.大家去想一想.跟心理学有关的
爱飞 该用户已被删除
沙发
发表于 2015-1-18 17:24:35 | 只看该作者
交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。
若相依 该用户已被删除
板凳
发表于 2015-1-22 17:20:39 | 只看该作者
弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
透明 该用户已被删除
地板
发表于 2015-1-31 09:09:19 | 只看该作者
Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
活着的死人 该用户已被删除
5#
发表于 2015-2-6 18:58:54 | 只看该作者
兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的
只想知道 该用户已被删除
6#
发表于 2015-2-18 07:57:57 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
蒙在股里 该用户已被删除
7#
发表于 2015-3-6 02:31:19 | 只看该作者
我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
莫相离 该用户已被删除
8#
发表于 2015-3-12 18:54:14 | 只看该作者
我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标.
飘飘悠悠 该用户已被删除
9#
发表于 2015-3-20 01:52:05 | 只看该作者
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 00:46

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表