[ASP.NET入门随想四]吸星大法
——页面的OO思想篇

        内力衡量人的武学修为,而逍遥派的北冥神功实在是宝贝,习此术之人,全身如同一个黑洞,瞬间就将他人一辈子的修炼积累掠为已有,美名其曰“北冥大水,非由自生”、“百川汇海,海纳百川”。

        但虚竹却不知学习此术需要散去原先功力,所以当他被无涯子完全化成一个空空如也的和尚时,禁不住放声大哭。其实此举绝对可以理解,对于一个练武之人而言,内功象征积累,虚竹虽然笨了点,但二十几年的积累,顷刻间说没就没,不啻于精神世界的毁灭。

■ 计算的影响 – 面向过程编程思想

         ASP程序员的老祖宗名叫冯•诺依曼,ASP程序员一直以来都按照他的谆谆教导活着。

         ASP程序员从来就认为这个世界的所有事情就象人的一生,有一个起点,叫START,还有一个终点,叫END。他要处理的事情,就象人这辈子,从START走到END,没有回头路。

         ASP程序员还认为,这个世界的所有事情就象人的一生,分成不同阶段,叫模块。每一个模块都要完成一个相互不同的任务,少年求学,青年生子,中年立命,老年不惑。

         ASP程序员又认为,这个世界的所有事情都象人的一生,一共只有三种走法:有时是阔步向前,叫顺序;有时面临选择,叫分支;有时原地打转,徘徊不前,叫循环。

         ASP程序员从来就把“不积跬步无以至千里”当着座右铭,所以他把所有类似的事情处理过程都积累起来,记忆成一个个函数,以后碰到同类型的事情,就去调用函数。
 
         ASP程序员把这种活法叫着“面对过程编程思想”,他平时最关心的,就是过程的模型,最注意的,就是这些过程有没有类似的处理过程可以归纳成函数。

         即使是面对网站登录这么件小小的事情,ASP程序员仍然遵循自已的信仰,先对这个过程建模,如图4-1,然后去调用以前所有积累的函数,精心编织这个过程的每一个环节:不是要用户提交登录数据吗?他用response.write 这支画笔按照顺序一笔一划地描述出用户填写页面;不是要校验格式吗?他调用JavaScript函数一个个地检查每一个<input>的value值;不是要审核数据吗?他读取用户数据后翻开厚厚的帐目一个个地查找核对;不是要结果吗?他要么带着用户跳转到指定页面,要么又调用函数告诉用户不要鱼目混珠。
 
               

         所以ASP程序员活得很开心,他感觉世界尽在他的掌握之中。尽管很早以前有一个名叫smalltalk的家伙告诉他的这种活法窝囊,当时ASP程序员只是感到不解;又来了个C++说他笨拙,他只是疑惑;还来了个JAVA在他面前耀武扬威,ASP程序员开始彷徨起来。直到有一天,小弟DotNet程序员学成归来,与之促膝长谈,终于,ASP程序员彻底动摇。冥冥之中,记起一位伟人告诫他要与时俱进。但尽管世界在变,ASP程序员依然放不下他多年所积蓄的内力,顷刻间说没就没,不啻于精神世界的毁灭。于是内心有两种呐喊在不断地交织,是在沉默中死去,还是凤凰涅槃?

■ 创世纪•六日 – 面向对象编程思想
        DotNet程序员信奉OOP教,神是Framework。

        第一日,神说,万物皆对象(object),对象有标识、状态与行为

        于是DotNet程序员在大脑中列出Login功能的所有对象:Login对象、Login.aspx页面对象、登录表单frmLogin对象、提示信息lblMessage对象、用户名文本域txtUserName对象、密码文本域对象txtPassword对象和登录按扭btnLogin对象。

        第二日,神说,有相同特征和行为的对象抽象为类(class);对象即为类的一实例

        于是DotNet程序员把用户名文本域对象和密码文本域对象抽象成TextBox类,其余分别抽象成Login、Login.aspx、HtmlForm、Label、Button类,并分别实例了类。

        第三日,神说,对象的相同特征抽象为属性,相同的行为处理抽象为方法

        于是DotNet程序员把实例frmLogin、lblMessage、txtUserName、txtPassword、btnLogin定义成Login类的属性、并定义方法btnLogin_Click。   

private void btnLogin_Click(object sender, System.EventArgs e) {
 
if ((txtUserName.Text=="孙二娘")&&(txtPassword.Text=="十字坡"))
  lblMessage.Text
="热烈欢迎世界著名武打巨星孙二娘小姐回乡考察投资";
 
else
  lblMessage.Text
="靠,这年头什么都有假的!";
}

                 

        第四日 神说,类要封装

        于是DotNet程序员在类标识、属性和方法前都分别加上public、private、protected。

        第五日 神说,类可以继承和合成

        于是DotNet程序员把Login.aspx定义成Login的派生类,在Login.aspx开头加上如下声明语句:
        <%@ Page Inherits="WebApplication1.Login" %>

         第六日 神说,类有多态

         于是DotNet程序员对自己说,我暂时不需要,随后躺下。

        很快他就睡着,只听见他的梦呓缓缓传来:六日,我就拖几个控件,定义几个ID,加一段事件处理代码,感谢万能的主framework和他的忠实仆役Visual Studio,吸星大法,爽!