仓酷云

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

[学习教程] ASP编程:ASP利用类,完成模块化

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

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

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

x
ASP一般认为只能运行在IIS上,正如前面所提到的,这并不是十分正确,事实上,ASP也能运行在Apache上。ApacheASP可在任意Apache服务器上运行有限的ASP功能,所需做的,只需打开mod_perl。  写在后面的话:

  一切写程序的人都晓得,当你渐渐对您要完成的功效睁开的时分,很年夜的时分,第一天写的器材第二天就忘了写到那边了,良多的时分,不能不写上具体的程序开辟条记,这在ASP的体系开辟中感到特别文件、函数庞大的时分,当我们盘算对网站的一部分功效举行修正的时分,感到无从动手大概感到要修正的中央。这时候候,假如您学过任何一门面向工具的编程的言语的话,天然想到怎样能把代码功效完成模块话,asp实质上不是面向工具的编程,但VBSCRPIT6.0供应了类,我们能够经由过程类完成代码的封装,完成模块话。

  起首,我要在这里写上一些很官方的观点,意在申明面向工具是很详细化的,很实体的形式,不克不及让有些人瞥见“工具”就被吓跑了。

  工具,就是能看到,感应,听到,触摸到,尝到或闻到的器材,在这里我们如许“界说”:工具是一个自包括的实体,用一组可辨认的特征和举动来标识。

  在面向工具的编程(oop)的编程体例,用利用上面的两个术语。

  类:这是工具的模板,界说了工具的特征。

  实例:这是一个实在的工具,能够与之交互的器材。

  属性,办法和事务

  在OOP中,上面的术语形貌工具的特征:

  属性:这是一个名次,形貌了某个工具的属性。

  办法:这是一个动词,形貌了工具能够完成的事情,大概但愿它完成的事情。

  事务:形貌了工具为响应某个举措而实行的操纵。

  在编程时,工具的面向工具编程和面向工具计划的一部分,它们具有十分年夜的上风,很多人以为这是一个庞大的主题,但实践上,它十分复杂,能够用四个复杂的术语来注释:笼统、封装、多态和承继。

  笼统:这是一个埋没庞大性,类的外部事情情形,以是用户不用晓得它的运作体例,就像。假如想要看电视,就不用晓得电视机时怎样事情的,只需翻开电视机,搜刮频道便可,on/off开关笼统了实践的操纵,在string例子里,有一个trim办法,它能够删除字符串尾部的空格,一样不必要晓得他是怎样完成这个义务的,只需晓得它有这个功效便可。

  封装:每一个工具都包括举行操纵所必要的一切信息,这个工具称为封装,因而工具不比依附其他工具来完成本人的操纵,在术语TOupper()办法中,string不用到其他中央猎取信息来把一切的字符转换为年夜写。

  多态:这个术语用于暗示分歧的工具能够实行不异的举措,但要经由过程他们本人的完成代码来实行,称号一样,但底层完成的代码是纷歧样的。

  承继:它界说了类怎样互相联系关系,共享特征的,承继的事情体例是,界说类和子类,个中子类承继了父类的一切特征,承继的主要性是,它迫使范例类似的类具有分歧性,并同意共享代码,假如决意创立一个新类,就不用界说父类的一切特征。

  在ASP中利用类,完成模块化

  上面我经由过程举上几个复杂的例子申明一下,注重,这里夸大的是一种头脑,假如在您开辟ASP网站的时分能用一个类(基类)睁开的话,这是很有需要的(也是很有难度的)。

  我们先选择一个复杂的例子:

  我们要显现典范论坛用户的信息,当输出用户的ID今后能,显现出该用户的一些信息,这是一个历程,能够如许思索,我们把用户看成一个工具,他有的属性是ID,性别,积分,权限,完成的办法有显现这些信息,ok,如许写:
Classblueidea
Privatebname,bpoint,bsex,blevel
...................
endclass

  这里先声了然一个名为blueidea的类,接着是一些公有变量,用于存储blueidea类的属性,这些变量在代码的内部不克不及会见,这就是数据回护,要界说这些变量,利用了property语句取得值直接的付给公有变量
-----------------------------------------------------------------
PropertyGetgetname
getname=bname
EndProperty

PropertyLetgetname(nameid)
bname=nameid
Ifnameid=""Then
bname="没注册用户"
EndIf
EndProperty
------------------------------------------------------------------
PropertyGetgetsex
getsex=bsex
EndProperty

PropertyLetgetsex(sex)
bsex=killint(sex,0,0)
Ifbsex=0Then
bsex="男"
Else
bsex="女"
Endif
EndProperty
------------------------------------------------------------------
PropertyGetgetpoint
getpoint=bpoint
EndProperty

PropertyLetgetpoint(point)
bpoint=killint(point,0,0)
EndProperty
------------------------------------------------------------------

  这里有个killint函数,是判别数据正当性的,它的本相是:
PrivateFunctionkillint(i,killstr,killsub)
IfNotIsNumeric(i)Then
i=killstr
ElseIfi<=0Then
i=killsub
Endif
killint=Int(Left(i,5))
EndFunction

  该函数功效很明白,不再烦琐说。
  因为我们要经由过程积分判别用户级别,这里界说了一个公有函数:
PrivateFunctiongetlevel()
bpoint=killint(bpoint,0,0)
Ifbpoint<500Then
blevel="低级会员"
ElseIfbpoint>=500Andbpoint<=100Then
blevel="初级会员"
Else
blevel="最终会员"
EndIf
Getlevel=blevel
EndFunction

  我们要得是回送用户的信息,必需界说一个public公用函数,显现信息:
PublicFunctionshowuser()
response.write("<h5>以下显现<fontcolor=red>"&bname&"</font>的材料:</h5>")
response.write("<h5>性别:<fontcolor=red>"&bsex&"</font></h5>")
response.write("<h5>积分:<fontcolor=red>"&bpoint&"</font></h5>")
getlevel
response.write("<h5>级别:<fontcolor=red>"&blevel&"</font></h5>")
EndFunction
Endclass

  利用这个类的时分如许利用:(我在这里写了一个表单处置的)
Setblueideauser=newblueidea
blueideauser.getname=Trim(request("id"))
blueideauser.getsex=request("sex")
blueideauser.getpoint=request("point")
blueideauser.showuser

  是否是想看看效果,那就看看这里:  http://www.5do8.com/net/aspclass/class.asp

  把持读取数据库信息的类:
  参考源码
称号:ado_5do8
感化:读取数据库的各项操纵
来历-耕作村http://www.5do8.comhttp://www.Blueidea.com-5do8
创作:5do8
接洽:5do8@5do8.com
更新:2005年11月13日
受权:蓝色幻想网站积分凌驾3000,耕作村一切注册用户
类的接口:ado_5do8.ConnectString=数据库相对路径
ado_5do8.rs_top挪用数量,表的称号
Classado_5do8
Privateconn,sqlstr,rs,iid,itable,isession
sqlstr:数据库地点,为相对路径,公有
conn:翻开数据库的毗连,公有

------------------------------------------------------------------
rem打消一些不想要的数字
PrivateFunctionlitter_in(r1,r2)
IfIsNumeric(r1)andIsNumeric(r2)Then
Dimdimrr
Ifr1>r2Then
dimrr=r2
Else
dimrr=r1
EndIf
Else
dimrr=0
Endif
litter_in=dimrr
EndFunction
-----------------------------------------------------------------
PrivateFunctionkillint(i,killstr,killsub)
IfNotIsNumeric(i)Then
i=killstr
ElseIfi<=0Then
i=killsub
Endif
killint=Int(Left(i,5))
EndFunction
-----------------------------------------------------------
privateSubstartconn()
OnErrorResumeNext
Setconn=server.CreateObject("adodb.connection")
strconn="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.MapPath(sqlstr)
conn.openstrconn
IfErrThen
err.Clear
SetConn=Nothing
mess="产生毛病,不克不及毗连数据库"
response.write(mess)
response.End
Else
mess="毗连数据库conn乐成...........<br/>"
response.write(mess)
EndIf
EndSub
----------------------------------------------------------------
privateSubcloseconn()
conn.close
Setconn=Nothing
response.write("<strongstyle=color:red>封闭conn毗连</strong>...<hr/>")
Endsub
-----------------------------------------------------------------
PrivateSubclosers()
rs.close
Setrs=Nothing
response.write("<strongstyle=color:#085420>封闭数据库RS</strong>.......<br/>")

EndSub

-----------------------------------------------------------------
PropertyGethavese
havese=isession
EndProperty

PropertyLethavese(yoursession)
isession=yoursession
Ifyoursession=""Then
isession="nodef"
EndIf
EndProperty

-----------------------------------------------------------------
PublicFunctionmakesession(arraydata)
IfIsArray(arraydata)then
makear=arraydata
Else
makear=Array(0,0,0,0)
EndIf
Ifisession=""Then
isession="nodef"
Endif
session(isession)=makear
EndFunction
-----------------------------------------------------------------

privateFunctiongetsession()
thisget=session(isession)
IfNotIsArray(thisget)Then
thisget=Array(0,0,0,0)
EndIf
Getsession=thisget
Endfunction
-----------------------------------------------------------------
PropertyGetConnectString
ConnectString=sqlstr
EndProperty
PropertyLetConnectString(str)
sqlstr=str
EndProperty
-----------------------------------------------------------------

PropertyGetgetid
getid=iid
EndProperty
PropertyLetgetid(id)
iid=id
EndProperty
-----------------------------------------------------------------

PropertyGetgettable
gettable=itable
EndProperty
PropertyLetgettable(table)
itable=table
EndProperty
-----------------------------------------------------------------
------------------------------------------------------------------
publicFunctionreadarraysession(iStart,ipageno,irowid)
rowid=killint(irowid,0,0)
start=killint(istart,0,0)
pageno=killint(ipageno,5,5)
data=getsession
iRows=UBound(data,2)
iCols=UBound(data,1)
response.write("<h5>总数取得了:")
response.write("<b>"&iRows+1&"</b>条信息</h5><hr/><ulstyle=width:100%;>")
Ifrowid=0then
IfiRows>(ipageno+iStart)Then
iStop=ipageno+iStart-1
Else
iStop=iRows
EndIf
ForiRowLoop=StarttoiStop
Response.Write("<listyle=padding:4px0;><ahref=?k=read&rowid="&irowloop+1&">"&data(1,iRowLoop)&"</a><spanstyle=padding:4px04px10px;background-color:#ccc;>较慢,不保举点击--><ahref=?k=list&id="&data(0,irowloop)&">更新</a></span></li>")
Next
Response.Write"</ul><divstyle=top:20px;background-color:#ccc;color:#020;font-weight:bold;bordr-top:2pxsolid#008;padding:10px0;color:#b00>列表(<ahref=default.asp>回到典范形式</a>):"
ifStart>0then
Response.Write"<AHREF=""?k=read&Start="&iStart-ipageno&"&pageno="&ipageno&""">Previous</A>"
endif
ifiStop<iRowsthen
Response.Write"<AHREF=""?k=read&Start="&iStart+ipageno&"&pageno="&ipageno&""">Next</A>"
endIf

response.write"</div>"

Else
rowid=litter_in(rowid-1,iRows)
response.write("<divstyle=width:85%><h4style=text-align:center><ahref=?k=read&pageno="&pageno&"&start="&start&">前往列表</a></h4></h2><hr/><h5>"&server.htmlencode(data(1,rowid))&"</h5><p>"&server.htmlencode(data(2,rowid))&"<h5>+-----"&server.htmlencode(data(3,rowid))&"")
response.write("<div>")
Endif
EndFunction

-----------------------------------------------------------------
PublicFunctionlist_ids()
sql3="select*from"&itable&"whereid="&iid&""
startconn()
Setrs=conn.execute(sql3)
Ifrs.eofAndrs.bofThen
data=Array(0,0,0,0)
Else
data=Rs.GetRows()
EndIf
closers
closeconn
response.write(UBound(data)&":")
response.write(server.htmlencode(data(2,0)))
Endfunction

-----------------------------------------------------------------
PublicFunctionrs_top(num,table,whe)
startconn()
sql="selecttop"&num&"*from"&table&""
sql2="selectcount(*)asszd_countfrom"&table&""""&whe&""
Setrs=conn.execute(sql2)
szd_count=rs("szd_count")
closers
Setrs=Conn.Execute(sql)
dimdata
IfRs.EofThen
data="nodata"
Else
data=Rs.GetRows()
Endif
closers
closeconn()
Callmakesession(data)
EndFunction
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
EndClass

  利用的时分:
Dimaction
action=request("k")
Ifaction="view"Then
Callviewnew
ElseIfaction="list"Then
Calllist()
ElseIfaction="read"Then
Callread()
Else
Callff()
Endif
Subff()
%>
<formstyle="border-top:2pxsolid#008;border-bottom:2pxsolid#008;margin:auto;background-color:#eee;padding:20px5px;color:#008;font-weight:bold;">
<label>显现信息总数:<inputname="n"type="text"maxlength="4"size="10"/>每页数量:<inputname="pagesize"type="text"maxlength="4"size="10"value="5"/><inputname="arrstart"type="hidden"value="0"></label>

<h5style="border-top:1pxsolid#000;padding:5px0">操纵:<inputname="k"type="submit"value="view"/></h5>

</form><%Endsub%>
<%Subviewnew()
f_num=killint(request("n"),1,1)
pagesize=killint(request("pageno"),5,5)
arrstart=killint(request("start"),0,0)
rowid=killint(request("rowid"),0,0)
Setcs=newado_5do8
cs.ConnectString="data/a.mdb"
cs.havese="shi"
cs.rs_topf_num,"site_szd",""
cs.readarraysessionarrstart,pagesize,rowid
Endsub
Sublist()
response.write("<h5><ahref=default.asp>前往默许形式</a></h5>")
response.write"上面显现详细信息:<hr/>"
id=request("id")
id=killint(id,1,1)
Setlistid=newado_5do8
listid.ConnectString="data/a.mdb"
listid.getid=id
listid.gettable="site_szd"
listid.list_ids()
EndSub

Subread()
response.write"<divstyle=background-color:#ccc;padding:20px0;color:080;font-weight:bold;border-bottom:2pxsolid#008>页面剖析终了,要更新请选择<ahref=default.asp>回到典范形式</a>参数:Start,入手下手元素;pageno,每页条数</div>"
pagesize=killint(request("pageno"),5,5)
arrstart=killint(request("start"),0,0)
rowid=killint(request("rowid"),0,0)
Setcs=newado_5do8
cs.havese="shi"
cs.readarraysessionarrstart,pagesize,rowid

Endsub

Functionkillint(i,killstr,killsub)
IfNotIsNumeric(i)Then
i=killstr
ElseIfi<=0Then
i=killsub
Endif
killint=Int(Left(i,5))
EndFunction
%>
缺乏可以共同遵循的行业标准,ASP还处在发展初期,大家对它的理解不同,如产品和服务标准,收费标准等,不利于行业的健康发展。
小魔女 该用户已被删除
沙发
发表于 2015-1-19 07:57:55 | 只看该作者
掌握asp的特性而且一定要知道为什么。
若相依 该用户已被删除
板凳
发表于 2015-1-25 15:36:10 | 只看该作者
多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。
透明 该用户已被删除
地板
发表于 2015-2-2 23:45:12 | 只看该作者
Session:这个存储跟客户端会话过程的数据,默认20分钟失效
莫相离 该用户已被删除
5#
发表于 2015-2-8 19:48:30 | 只看该作者
ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。
再现理想 该用户已被删除
6#
发表于 2015-2-26 00:29:46 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:
第二个灵魂 该用户已被删除
7#
发表于 2015-3-8 10:52:25 | 只看该作者
兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的
8#
发表于 2015-3-15 22:23:44 | 只看该作者
不能只是将它停留在纸上谈兵的程度上。
爱飞 该用户已被删除
9#
发表于 2015-3-22 17:08:16 | 只看该作者
ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-25 01:58

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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