iLeichun

当前位置:首页

技术管理的核心内容 - 提高团队技能

分类:软件工程  来源:网络  时间:2010-9-23 16:31:41

    最近与同事聊天,从软件质量保证的方法论谈论到了技术管理,那技术管理的内涵到底是什么?在此通过这篇文章做一个小小的总结和适当的外延。

     技术管理给人的感觉更多是工作量评估、项目计划、项目进度跟踪等,但这只是技术管理的一部分。大体上,可以将技术管理分为两个纬度,如图1所示。
图1
     纬度之一就是项目管理,其中包括项目计划、风险管理、预算管理等。对于基层技术管理者,更多涉及的内容是工作量评估、项目计划、项目进度管理等等。这一纬度的可见性很强,一项做不好就很容易让上级“紧张”,因此每一项内容都有专门的培训课程。
     另一个纬度则是团队管理,在现在很多技术性企业中,采用的都是人力资源管理进直线的方式,即技术管理者还要承担一定的人力资源方面的管理工作,比如绩效管理、职业发展规划等,当然这些内容给人的感觉更多的是“很虚”。由于这种特性,造成真正意义上关注团队管理的情形相对要少得多,与之相对应的培训课程也更少。
     相信在不少企业,将技术管理更多地理解为项目管理,在管理活动中似乎只有风险、计划和时间表,而忽视了培养团队。在图2中存在两个点和一条射线,其中点A代表团队A对于技术管理在两个纬度所采取的权重,同理,B点则代表B团队。从图中可以直观地看出,A团队更加侧重于团队管理,而B团队则更加侧重于项目管理。另外,图中的射线代表如果团队权重是分布在这条线上或附近,则说明这个团队在技术管理中很好地掌控了团队管理与项目管理的平衡。
     一个团队的技术管理,其两个纬度的权重在图2中的分布或许不是一成不变的,应当根据不同的时期调整其侧重点,但是,无论如何团队管理应当是技术管理的核心内容,或者更进一步地说,提高团队技能是技术管理的核心课程。
     团队管理不能只是出去吃吃饭做一做team building什么的,更为重要的是要提高团队的技能,且是实实在在地提高团队的技能。项目管理中的很多问题,都可以通过提高团队的技能从而缓解,乃至根治。举一个例子,为什么我们对于风险管理(项目管理中的内容)那么的执着?那是因为团队的能力不足以应对所面临的挑战!当然,作者并不是要说团队的技能上去了就不需要风险管理,而是指当技能增强了以后,对于风险的掌握自然就强了,而对于风险管理的要求就会有所弱化。团队技能上不去,项目管理工作只会是越做越累,且只是工作在问题的表面。
     提高团队的技能是一个很不轻松的话题,因为它在理但却很难操作。但无论如何,技术管理者首先应当具备这种意识,因为只有意识先行才会有所行动。现实中,存在不少现象,技术管理者说“我的老板才不管团队技能的培养呢,他只关心他自己,因为团队能力的提高并不是他的首要职责,他只要求我将产品按计划做出就行了。老板不管,那我也就更管不了,也没有给我时间去做啊。”对于这种借口存在以下几个问题:
     1)产品按计划完成意味着项目成功了,但它并不意味着产品成功。一个技能不行的团队是能进行产品开发,也能做到项目成功,但一定做不到产品成功。可能一发布产品,就“全员求火”了。
     2)如果每一级管理者都采用这样的借口,那最终的结果就是没有人真正关心团队技能的培养。一个企业为什么需要那么多的(技术)管理者?只是为了让更多的人去找借口?显然不是。在所有从上到下的管理者中,一定需要有一层去关注团队技能的培养,那只能是基层技术管理者,即通常我们所说的组长或team lead。因为团队技能不足,第一个受害者就是团队自身,而基层管理者身在其中。有的基层管理者,他的工作主要就是schedule以及来自上级的指令,对于团队技能的提高似乎与已无关,更谈不上对团队的激励了。这种对团队技能忽视的现象其实是对自身利益将被损害所表现出来的一种麻木。技术管理者能否将团队技能逐渐地提高,或许是评价其管理能力出色与平庸的关键指标。
     3)培养团队不是有时间就能解决问题,而首先需要有意识。时间总会是有的,因为项目总是要做的。有了意识以后,同样是做一件工作,所采用的策略将完全不同,而团队所学得的知识也很有可能更多。
     技术管理者除了需要有提高团队技能的意识,更要注意方法论的运用,打造适合团队自身的方法论也显得尤为必要。另外,承担一定的责任和适当的风险有助于为工程师们提高技能创造空间。

本文出自 “李云” 博客,请务必保留此出处http://yunli.blog.51cto.com/831344/331586

走出软件质量困境的指导性思想

分类:软件工程  来源:网络  时间:2010-9-23 16:31:06

    对于软件行业的从业人员,不论是管理者还是工程师,对于软件设计的重要性都应当有允分的认识,只有这样才有可能在团队中构建真正有意义的愿景。是的,具备出色软件设计能力的工程师少之又少,但这并不表明它不重要。相反,这种人的工作效能很有可能是普通工程师的百倍。

     除了认识软件设计的重要性,整个团队还应当至力于打造适合的质量保证方法论。再次提醒一下,这里的“合适”是指“易用和够用”。项目组不论资源多充足、人多聪明,都比不过质量保证方法论来得实在和有效。一个拥有自已质量保证方法论的团队,可以预测,团队的个人生活质量以及团队的集体声誉和精神面貌都将与众不同。。
     “通过技术方法解决技术问题而不是管理方法”是作者想强调的另一个重点,作者将这一思想命名为李云技术管理第一法则。项目开发是一个复杂的系统工程,但是其中很多问题其根源并不是来自于管理领域,而是技术领域。技术根本问题解决了,表面看起来是管理方面的问题都将迎刃而解。请不要相信管理是万能的,合理地运用团队的技术技能和管理技能才有可能打造出出色的团队,以及最终创造出高质的产品。
     过份地强调风险是软件开发活动中阻碍团队提高的可怕障碍,请记住“李云技术管理第二法则:过分地强调风险其实是间接地承认自己无能,”这一点无论你是管理者还是工程师都一样。

从管理者的角度
     作为管理者应当明白,如果将风险最小化、服从上级指示作为优先考虑的工作内容,那很难带出一支出色的工程师队伍。通常管理者的薪资也相对的高,站在管理者的角度,为了保证稳定的高收入,小心谨慎是应该的,但是别望了现任雇主提供高薪的同时,还希望管理者承担另外的责任和义务 —— 培养团队。只有团队培养好了,产品的质量才能随之“水涨船高”。
     团队的培养,一定要给工程师们合适的“土壤”、一种允许工程师们适当犯错的环境,当然,总是犯相同的错就另当别论了。软件行业如果想做到什么事都百分百的正确和没有风险,那只能是什么都不做。一个敢想、敢做和敢当的团队,只会让管理者的工作更加的轻松,这样的团队每一个管理者都有机会获得,但必须由管理者自己去培养。
     花时间培养对团队的信任是重中之重,请不要将“我信任我的团队”只作为口号,而内心却总是想着“这样让他们干可能会给我捅出篓子来哦”。对团队的信任其培养方式只能是让团队在一定范围内放手去干,一旦团队的能力强了对之的信任也就慢慢地有了,且很有可能形成一种良性循环。
     管理者很有可能想培养自己的技术专家,技术专家的培养不是选中一个或几个人,然后给之机会去成长。对于技术专家的培养,应为更多的人乃至整个团队提供平台去发挥,而不用专门选择人选,具备技术专家潜力的工程师一定会在这种环境中自发地出现。另外,技术专家的培养需要长时间的观察。存在一类工程师,在管理者面前表现得很有想法,但真正做起技术来时却一般,且缺乏追求完美的精神。这种人能博得管理者对他的好印象,乃至让管理者认为他能被培养成技术专家,但一个对技术工作没有追求完美精神且付之于行动的工程师很难成为技术专家。为此,管理者在培养技术专家时,不防将“网”撒得大一点,给大家的时间也长一点。一个真正的技术专家不是管理者认命和培养出来的,而是团队自然而然集体选择出来的。“自然而然”体现在,当出现问题时大家都会主动去找他(潜在的技术专家)以获取有价值的帮助。
     一个健康的团队需要有争论,管理者千万不要将消除争论作为自己的一个管理目标,从而追求一种表面的“平和”。软件行业中的科学成份有不少,如果对于技术的争论都不敢(很少工程师会就个人问题而放到台面上争执),那很难想象团队做的技术到底是什么层次。积极的争论有利于诱发团队思考以及帮助找到更好的技术解决方案。
     另外,团队的能力应当是有梯度的,请不要指望每一个人都在同一个方面很强。如果真的是那样,那一定不是你想要带的团队!理论上每一个工程师都有自己的强项,如何合理地运用各人的强项以保证项目不断推进,需要管理者不断地学习和探索。
     除了工作质量,关心工程师的生活质量也应当是管理者的工作内容之一。经常加班加点并不是工程师们应该的,也不是这个行业的固有特质。出现经常性的加班加点,往往意味着团队技术能力不足,或者团队的管理存在问题,但无论如何这都是管理者需要致力于解决的问题。一个只关心自己利益的管理者注定是会被团队给“抛弃的”,也同样得不到团队的鼎立支持,想想你的薪资!
     光培养团队也不行,管理者自身也应具备一定的素质。一个出色的管理者应当曾经是一名出色的工程师。这里所说的出色工程师,不只是指别人交给他的任务都能完成(甚至出色完成),因为这只是出色工程师的必要条件。一名出色的工程师还应当具有良好的技术敏感度,这种敏感度是扎根于长期对技术的钻研(学出来的)和丰富经验的积累(干出来的)而获得的。只有对技术有良好的敏感度,管理者才能真正地把握住软件项目管理中的风险,从而在风险和团队发挥余地之间保持良好的平衡。请不要迷信“管理者可以不懂技术”,当然,如果你是一名大公司的CEO那就另当别论了。
     如果管理者的技术积累并不足(即没有足够的技术敏感度),那还有一种方法可以加以弥补,可以考虑在团队中找一个技术能力强的人作为自己的左、右手,而且应当信任他能帮助你做好与技术相关的决策。当然,这里的前提假设是技术积累不足的管理者,他的管理能力却较突出。就作者的经历来看,的确存在技术能力不足的管理者,但却在很大程度上能将团队管理好。对于这类管理者,很关键的一点是他能很好地运用技术骨干的技术专长,且通过激励和鼓励让大家去做更多的尝试,从而使得团队的工作气氛很是活跃,一个气氛活跃的团队才有可能更具创造力。与之相比,也存在不少管理者,他的技术能力还不错,也能带领团队按步就班地工作,但却缺乏激励大家的那种意愿和能力。管理者如能运用好激励,将发现团队的精神面貌完全不同。
     总而言之,管理者对于团队文化具有至关重要的作用,这也是为什么管理者的薪水在多数情形下更高的原因。一个作风正派的管理者,他的团队也将更具正气和更有活力,这种团队在绩效方面的表现也将更好。一个不大愿意承认他人的管理者,他所带出来的团队通常会显得死气沉沉,在这种团队中大家也不愿更多地发表自己的观点,其绩效也可想而知。请记住,管理不只是计划和时间表,更应当包含创造!

从工程师的角度
     培养良好的工作习惯是工程师职业发展很重要的一个内容,好习惯对于软件质量也起着关键作用。就工作而言,习惯有好有坏,好的能让个人终生受益,而差的则能让整个团队痛苦。软件产品的代码是需要工程师一行一行的“码”出来,但是,如果“码”代码的工程师没有良好的编程习惯,一定不能获得高质量的软件产品。除了与编码直接相关的编程习惯外,工程师还应当培养其它的好习惯,比如:笔记习惯,将工作中花了较时间去解决的问题通过笔记的方式记录下来,这样下次要用就能更高效,笔记不一定要记在本子上,记在计算机中是一个更为有效的方式;思考习惯,对于问题积极的思考以磨练自己的洞察力,在他人提出见解时与自己的想法进行对比,看一看从中能学到什么;阅读习惯,一个希望在技术上有所成就或做到一定高层次的工程师,其知识和经验的积累一定不能只来源于个人的工作与生活,阅读是获取这些知识很重要的一种方式,多读一读行业相关的好书、简报(newsletters),除了能积累知识和经验,对于了解行业的发展趋势也大有裨益。养成各种好习惯的目的说到底还是为了提高自己的技能。
     工程师应当意识到,软件开发已经不象以前那样,拿到需求文档后就根据自己的理解完全从标准库函数开始构建自己的软件模块,如果仍采用这种开发方式,那可以说是非常的落伍了。平台和框架这类技术的运用是打造高质量软件很有效的方法,也是个人和团队积累经验非常好的一种手段。对于一个项目组,现成的平台和框架实现可能一开始并不存在,但项目组应当在每一次的开发活动中努力寻找打造自己的平台和框架的机会,并积极地加以实践。平台和框架的设计并没有想象的那么容易,但无论如何只有通过实践才能进步。工程师要做到具备平台和框架开发的意识和能力,是一种比较难的事,但一旦达到了则意味着水平上了一个台阶。平台和框架这一开发方法,给软件产品所带来的收益是高质,给项目组所带来的收益是高效,而给工程师个人带来更高质量的生活。
     软件行业中的很多问题其根源是技术问题,为了解决这类问题只能通过工程师的努力。项目的困难也不是一天或一个月造成的,而是由于工作没有做到位加上长时间的积累所形成的。为了保证一个更好的将来,我们只能是现在将事情做到最好。“现在将事情做到最好”是一种态度,也是一种提升自己技能的关键途径,一个做到六分的工作与一个做到九分的工作相比,其中所收获和知识和经验将截然不同。

 

软件设计中的“自上而下”和“自下而上”

分类:软件工程  来源:网络  时间:2010-9-23 16:29:01

     在切入主题之前先要了解“上”与“下”的含意是什么,这需要从图1中找答案。图中,应用层在最上面,其下依次是框架、平台、库和操作系统层,因此“上”是指靠近应用层,而“下”则是指靠近操作系统层。

图1
     对于一个被设计的软件模块,存在两个视角。一个是从上向下看,这一看,看到的是模块向上层提供的是什么样的接口,或者说“长什么样”;另一个则是从下向上看,即模块的具体实现是什么,是如何通过使用其下的库(或其它的模块)来塑造它自己的“模样”的。

     那一个软件模块的设计之初,是应当自上而下呢,还是自下而上?

     软件设计最为重要的是塑造形象,即打算将软件设计成什么样,这是软件设计阶段真正要做的事。软件设计时,最重要的不是数据结构的组织,而是形象塑造,当形象有了以后,数据结构的组织就是一件很自然的事了。因此,软件设计应当先是“自上而下”。显然,光有自上而下也不行,当塑造好了模块的形象以后,还得“自下而上”地考虑如何去实现被设计模块。自下而上时还可以审视,现有的哪些模块能被将要设计的模块所重用,从而提高现有软件模块的复用性。
     宏观上讲,两种方法各有特点。自上而下更容易把握整体性,但难度更大,成本也相对高;而自下而上则更容易做到复用,进而获得更好的经济性。在进行软件设计审查(注意,不是代码审查)时,审查者需要注意,不能从自下而上的角度去审视被审查的设计,相反,应当采用自上而下的方式,检查被审查的模块是否很好地体现了它的概念或“模样”。

 

面向对象和基于对象

分类:软件工程  来源:网络  时间:2010-9-23 16:26:24

   面向对象大家都很熟悉,可是基于对象就不一定了。两个听起来好象是同一回事,而事实上它们却千差万别。基于对象是指:我们采用对象这一封装技术,将数据和操作捆绑在一起,但是并没有合理的使用多态、继承等面向对象的技术进行设计。其中的“没有合理使用”这一修饰非常的重要,可以说它道出了面向对象和基于对象的本质区别。

    虽然,听起来面向对象我们很是熟悉,但就我的观察,很多以前从事C程序开发的人,当他(她)采用面向对象的编程语言(如C++)进行开发时,写出来的程序却是基于对象的。更为通俗的说,采用面向对象的语言编写面向过程的程序!

    要掌握面向对象技术不是一件容易的事,其要求我们对于所有的编程事务从“对象”的角度来考虑,是一种全新的思考问题的方法。我想错用最近面试过的一位工程师的话来说明什么是面向对象开发,他是这么说的“现实世界是什么,那么程序当中就应当是什么”,我觉得这句话概括得非常的好。

    从我的学习经验来看,一开始其实我并不明白为什么要用对象来封装,记得刚从C转向C++时,只是觉得C++是另一种形式的“C”,那时并没有深刻的领悟到C++语言中所蕴涵的面向对象的强大开发能力。后来,因为工作的需要,需要对来自Microsoft MSDN中的一个Drawcli例程进行一定的扩展,这个程序你现在从MSDN光盘中还能找到,如果你想真的理解面向对象,Drawcli是一个非常好的开端。如果你懂了Drawcli的设计思想,你一定会对面象对象有一个感性认识。

    当然,做了Drawcli以后,我不认为我的面向对象的开发能力就一下子上去了,而是在平时的开发过程中要去模仿。模仿着模仿着,在一次一个应程序的开发时,我记得当时我对于一个在多种情况下的复杂管理问题很是苦恼,后来突然想到了从其中抽象出一个类来做管理,那一刻所有的困惑全都没有了。之前之所以复杂是因为采用面向过程的思考方式去解决,而当我换成面向对象的方式时,其实是很简单的问题。在那一刻,我真的领悟到了面向对象设计的好处,也是从模糊的理解到真正的理解的一个转折点!从那以后,我觉得自己能做到对于软件设计“现实世界是什么,在程序中就应当是什么”。
 

本文出自 “李云” 博客,请务必保留此出处http://yunli.blog.51cto.com/831344/184846

北大青鸟 ASP.NET 视频教材

分类:.NET  来源:网络  时间:2010-9-23 16:20:53

北大青鸟 ASP.NET 32 讲 01
www.wangyeba.com/Soft/shuji/net/200608/4149.shtml

北大青鸟 ASP.NET 32 讲 02
www.wangyeba.com/Soft/shuji/net/200608/4150.shtml

北大青鸟 ASP.NET 32 讲 03
www.wangyeba.com/Soft/shuji/net/200608/4151.shtml

北大青鸟 ASP.NET 32 讲 04
www.wangyeba.com/Soft/shuji/net/200608/4154.shtml

北大青鸟 ASP.NET 32 讲 05
www.wangyeba.com/Soft/shuji/net/200608/4155.shtml

北大青鸟 ASP.NET 32 讲 06
www.wangyeba.com/Soft/shuji/net/200608/4156.shtml

北大青鸟 ASP.NET 32 讲 07
www.wangyeba.com/Soft/shuji/net/200608/4157.shtml

北大青鸟 ASP.NET 32 讲 08
www.wangyeba.com/Soft/shuji/net/200608/4158.shtml

北大青鸟 ASP.NET 32 讲 09
www.wangyeba.com/Soft/shuji/net/200608/4163.shtml

北大青鸟 ASP.NET 32 讲 10
www.wangyeba.com/Soft/shuji/net/200608/4164.shtml

北大青鸟 ASP.NET 32 讲 11
www.wangyeba.com/Soft/shuji/net/200608/4165.shtml

北大青鸟 ASP.NET 32 讲 12
www.wangyeba.com/Soft/shuji/net/200608/4166.shtml

北大青鸟 ASP.NET 32 讲 13
www.wangyeba.com/Soft/shuji/net/200608/4277.shtml

北大青鸟 ASP.NET 32 讲 14
www.wangyeba.com/Soft/shuji/net/200608/4278.shtml

北大青鸟 ASP.NET 32 讲 15
www.wangyeba.com/Soft/shuji/net/200608/4279.shtml

北大青鸟 ASP.NET 32 讲 16
www.wangyeba.com/Soft/shuji/net/200608/4280.shtml

北大青鸟 ASP.NET 32 讲 17
www.wangyeba.com/Soft/shuji/net/200608/4298.shtml

北大青鸟 ASP.NET 32 讲 18
www.wangyeba.com/Soft/shuji/net/200608/4299.shtml

北大青鸟 ASP.NET 32 讲 19
www.wangyeba.com/Soft/shuji/net/200608/4300.shtml

北大青鸟 ASP.NET 32 讲 20
www.wangyeba.com/Soft/shuji/net/200608/4301.shtml

北大青鸟 ASP.NET 32 讲 21
www.wangyeba.com/Soft/shuji/net/200608/4302.shtml

北大青鸟 ASP.NET 32 讲 22
www.wangyeba.com/Soft/shuji/net/200608/4303.shtml

北大青鸟 ASP.NET 32 讲 23
www.wangyeba.com/Soft/shuji/net/200608/4320.shtml

北大青鸟 ASP.NET 32 讲 24
www.wangyeba.com/Soft/shuji/net/200608/4321.shtml

北大青鸟 ASP.NET 32 讲 25
www.wangyeba.com/Soft/shuji/net/200608/4326.shtml

北大青鸟 ASP.NET 32 讲 26
www.wangyeba.com/Soft/shuji/net/200608/4327.shtml

北大青鸟 ASP.NET 32 讲 27
www.wangyeba.com/Soft/shuji/net/200608/4365.shtml

北大青鸟 ASP.NET 32 讲 28
www.wangyeba.com/Soft/shuji/net/200608/4366.shtml

北大青鸟 ASP.NET 32 讲 29
www.wangyeba.com/Soft/shuji/net/200608/4367.shtml

北大青鸟 ASP.NET 32 讲 30
www.wangyeba.com/Soft/shuji/net/200608/4398.shtml

北大青鸟 ASP.NET 32 讲 31
www.wangyeba.com/Soft/shuji/net/200608/4399.shtml

北大青鸟 ASP.NET 32 讲 32
www.wangyeba.com/Soft/shuji/net/200608/4400.shtml

Web网页上使用VBScript还是JavaScript?

分类:网页设计  来源:网络  时间:2010-9-23 16:07:48

如果你要编写一个Web网页就必须要编写一些脚本。幸运的是,你可以从几种脚本编写语言中选择一个。不幸的是,有这么多种语言可以选择,到底选哪一种呢?你应该怎么做?

或者,如果你获得了一个网页,它的脚本是用一种你不怎么使用的脚本语言编写的,你怎样才能够用这个脚本来增加一些新的功能呢?

在本文中,我将会讨论到这些问题。而首先,我会指导你如何用微软公司所提供的这两种脚本编写语言来进行工作。

Microsoft Visual Basic, Scripting Edition (VBScript).

JScript,它是ECMAScript的Microsoft版本,是一组包括JScript 和JavaScript脚本编写语言的标准定义。

当然,还有其他的脚本编写语言,如Perl 和Rexx等。不过这里我着重介绍两种语言,微软公司在Internet Explorer和Internet Information Server (IIS)中为它们提供了ActiveX Scripting Language(ActiveX脚本编辑语言)引擎。

我还要讨论你何时需要在同一个网页中使用这两种语言(如你所见,这是完全可行的)。为了对你有所帮助,我列出了一系列有关的小问题,这些问题在你工作时必须牢记于心。
为了清楚地论述这个问题,我将从以下几个方面着手:

  • VBScript 和JScript之间的区别
  • 如何在Visual InterDev中确定脚本语言?
  • 在同一个网页中应用两种语言
  • 更新脚本编辑语言
  • VBScript 和JScript之间的区别

VBScript 和JScript之间最大的区别是它们的结构。VBScript 是Visual Basic的子集,如果你曾经用过Visual Basic或者是Visual Basic for Applications (VBA),你就会觉得非常熟悉。不过它们并不是完全一样的,因为VBScript是特意为在浏览器中进行工作而设计的,它不包括一些在脚本这个范围以外的特性,如文件访问和打印等等。

而另一方面,JScript从一组编程语言如C, C++, 以及Java等之中脱离出来的。如果你以前曾经用过C或者是Java,那么JScript的结构你会觉得非常熟悉。即便你不知道这些语言也没有关系,JScript的结构一点也不难--它像C和Java一样方便而没有它们那么复杂。

注意:不管怎样,JScript和Java是完全不同的两种语言。Java是一种对于网页应用程序和非网页应用程序都可以使用的完全成熟的开发语言。而JScript是一种主要用于脚本编写的脚本语言。

JScript 和VBScript的任务是相同的--都是让你能够编写自己的Web网页。每种语言都支持一些别的语言不支持的特性,不过,这些差异还不足以自动划分两种语言的使用范围。

更有可能的是,你会基于一些其他因素来选择脚本语言,最大的原因也是最实际的原因:你将要使用的平台能够支持你所选择的语言吗?你编写的是客户端还是服务器?如果是服务器,你的用户会使用什么浏览器和服务器软件?

下面的文章中会详细介绍这两种脚本编写语言,并且会就在特殊的环境中选择什么样的脚本语言给出一点指导意见。

什么时候选择VBScript?

VBScript主要是用在微软公司的各种平台上。因此如果你想用VBScript来进行编写,你必须要使用下列几种脚本之一:

服务器脚本。如果你想要用VBScript来编写服务器脚本(如在ASP网页中),这个服务器必须是Microsoft Internet Information Server (IIS)或者是其他的服务器。

客户端脚本。如果你想在浏览器脚本中用到VBScript,这个浏览器必须是Internet Explorer的一个版本。因为其他流行的浏览器可能不支持VBScript。

如果你使用的是Visual InterDev,那么你应该已经在使用IIS了(或是其他相同的服务器),因而用VBScript来编写服务器脚本不是问题。如果你使用的不是IIS,你要搞清楚该服务器是不是能够支持VBScript。

然而,如果你要建立的是一个公共Web站点,你无法控制其他人使用的浏览器,那么Internet Explorer只能用于客户端脚本这个限制就成问题了。不过,如果你是在浏览器已知的情况下用VBScript编写客户端脚本,这还是可行的。

如果你的目标平台能够支持VBScript,考虑一下下列因素再决定是否用VBScript来编写脚本:

错误控制。在VBScript中有On Error Resume Next来对特殊情况给出说明。如果你编写的是服务器脚本,错误控制是非常重要的,因为脚本的运行是无人照顾的。

格式化。VBScript有这样的功能,能够轻易地把数据,数字和货币数据格式化。

在Internet Explorer中事件控制很方便,就像在Visual Basic中一样。在VBScript中也能够建立一个隐含的事件处理程序,这只需要用对象__事件结构形式来定义一项功能就行了,比如说Button1_onclick。不过在Internet Explorer中,JScript没有这项功能(但在其他的JScript主机上支持这项功能)。

什么时候选择JScript?

几乎所有允许编写脚本的浏览器都支持JScript。因此,如果你是为一个公共Web站点编写一个广泛散发的应用程序,用JScript来编写客户端脚本是很自然的选择。你还会发现,因为JScript应用得如此广泛(还有与它类似的JavaScript),是一种标准的脚本语言,你可以在书店里,也可以在网上找到很多有关的资源。

如果你想用JScript来编写服务器脚本,那么你应该检查一下你的服务器是否支持它。微软公司的IIS允许你用JScript来编写ASP网页的脚本,但这并不是所有的服务器都支持的。

影响到你做决定的其他因素还有:

动态执行。JScript一个非常有力的特性是:它允许你在你的脚本内建立和执行脚本或者动态地进行评价。简而言之,在你的脚本中能够编写脚本。当你用DHTML进行工作时,这个特性是非常有用的,因为这样你就能够动态的操作DHTML的文档模型了。

面向对象。JScript使用的是一种基于原型的对象结构,它能够允许你在脚本中定义对象。你能够往对象的原型中加入方法和特性,扩展内置对象和定制对象。

使用JScript时的一个警告:JScript是区分大小写的,如果你仅仅使用过Visual Basic 或VBScript也许对此难以适应。

如果你是初学JScript,你还要知道如何用JScript来建立事件处理程序。在Internet Explorer 中,JScript会要求你链接到一个对象上,而这个对象又是与事件处理程序相连的。通常,只要在鉴别事件并且有处理程序功能的对象的标签栏中指明其属性就能够完成。如下例所示:

在其他的主机上,你可以使用隐含的事件绑定,不过它要求的结构与VBScript中稍稍有所不同。在JScript中约定的隐含处理程序是:

<SCRIPT LANGUAGE="JavaScript">
function btnSave::onclick(){
// script here
}
</SCRIPT>

值得注意的是,在这两个例子中LANGUAGE这项属性是设置为"JavaScript"的。Internet Explorer对于"JScript" 和"JavaScript"这两个名字都认识,而许多其他的浏览器却只认识"JavaScript",不认识"JScript" 。因此,为了保险起见,如果你不能确定该网页是用Internet Explorer来浏览,你最好用"JavaScript"。

要了解更多在JScript中建立事件处理程序的情况,请查看位于MSDN Library Online中的Microsoft Visual InterDev?文档。(要访问MSDN Library Online必须有MSDN Online Membership资格,这一资格是免费的,不过要简单的一次性的注册一下。)

如何在Visual InterDev中明确所用的脚本编写语言?

不管你用什么语言来编写脚本,你必须要明确的指出来,这样主机才知道用什么脚本引擎来处理你的脚本。到底用什么语言来编写,取决于你是用内联服务器脚本来进行工作还是用<SCRIPT>块来工作(不管是客户端脚本还是服务器脚本),同时也取决于你所使用的Visual InterDev的版本。

为内联服务器脚本选择脚本语言

如果你使用的是IIS和ASP网页,你可以编写两类服务器脚本:内联脚本(在<% %>分隔符中的脚本)和在<SCRIPT>单元中的脚本。一般来说,用内联脚本你可以把结果插入到网页中的HTML中。相反,在<SCRIPT>单元中的脚本是用来建立从内联脚本中调用的功能和子程序的。

注意:要建立一个在<SCRIPT>单元中的脚本并让它运行起来像内联脚本也是可能的。也就是说,脚本所陈述的不是一项功能或者某个子程序的一部分。不过我们并不推荐这种做法。要知道更多的细节请看本文后面部分的"服务器脚本执行顺序"。

对于服务器和客户端脚本来说,为<SCRIPT>单元选择语言的方法是一样的。要知道详细情况请见本文后面部分的"为一个 <SCRIPT> 单元设置语言"。

在一个网页中所有的内联脚本要用同一种语言来编写。当你建立了一个新的ASP网页后,网页中会自动包含一个@指示,它指明了内联脚本的脚本语言。@指示可以像这样:

<%@ Language="VBScript" %>

@指示一定是网页中的第一行内联脚本命令。如果没有这个指示,IIS会缺省地指定用VBScript来作为内联脚本语言。

改变网页的内联脚本语言

在Visual InterDev 1.0中,可以对网页进行编辑把指示改变一下,设置一种新的语言,如"JavaScript."等。

在Visual InterDev 6.0中,右键点击网页后就会出现该网页的Properties对话框。然后在Default脚本语言下,选择一种新语言。经过应用之后,编辑器会在@指示中更新为相应的脚本语言。当然,如果你愿意,你也可以自己手动编辑@指示。

你还能够为所有的新ASP网页更换缺省值。这个操作不能够改变现在的网页,不过它对你从现在起建立的所有网页都会有用。

为内联脚本更换缺省语言

在Visual InterDev 1.0中,从工具菜单中选择Options选项,然后再选择HTML一栏。在Active Server Pages的缺省脚本语言处选择一种语言。

在Visual InterDev 6.0中,右键点击Project Explorer中的项目名字,然后选择Properties。选择Editor Defaults一栏,然后在缺省脚本语言处选择一个新的缺省值。

为<SCRIPT>单元设置语言

与内联服务器脚本不一样的是,你在<SCRIPT>单元中所使用的脚本语言在同一个网页中可以有很多种。如果某一块是用VBScript来编写的,那么另一块也可以用JScript。(记住,不是所有的平台都支持VBScript。)

注意:在同一个网页中混合几种语言有很多注意事项,详细内容请见本文后面部分的 "在同一个网页中用几种不同的语言来工作"。

为一个<SCRIPT>单元指定语言

在<SCRIPT>标记中包含了一个LANGUAGE单元,它指明了你所要使用的语言。例如,在下面这个<SCRIPT>标记中就指明了该<SCRIPT>单元中的所有脚本都要用JScript编写:

<SCRIPT LANGUAGE="JavaScript">
function test(){
alert("testing");
}
</SCRIPT>

注意:在IIS的服务器脚本中要求有LANGUAGE属性。而在客户端脚本中它只是一个选项。如果LANGUAGE属性没有了,处理程序会使用缺省的脚本语言。在Internet Explorer的客户端脚本中,缺省值通常是第一个<SCRIPT>单元的脚本语言,或者如果还没有指明任何语言,那就是JScript了。我们建议你最好不要依赖于缺省值,最好是为<SCRIPT>单元明确地设置一种脚本语言。

在一个<SCRIPT>单元中,你不能把VBScript 和JScript混合起来使用。如果你想同时使用它们,在你的网页中你必须至少有两个<SCRIPT>单元。

Visual InterDev 1.0 和Visual InterDev 6.0都提供了能够自动生成脚本的工具。在Visual InterDev 1.0 中有Script Wizard可以帮助你。而在Visual InterDev 6.0中有下列产生脚本的工具:

  • Script Block命令。只要你在网页中点击右键,出现的菜单中就会有这个命令。它能够在你点中的那一点插入一个<SCRIPT>单元的框架。
  • Script Outline命令。当你双击事件的名字时它就会建立一个事件控制器的框架。在你的设置的基础上,不同的脚本生成工具会决定你所要用的语言。你可以在个别网页中为脚本工具而改变缺省的语言种类。

 

错误控制。在VBScript中有On Error Resume Next来对特殊情况给出说明。如果你编写的是服务器脚本,错误控制是非常重要的,因为脚本的运行是无人照顾的。

格式化。VBScript有这样的功能,能够轻易地把数据,数字和货币数据格式化。

在Internet Explorer中事件控制很方便,就像在Visual Basic中一样。在VBScript中也能够建立一个隐含的事件处理程序,这只需要用对象__事件结构形式来定义一项功能就行了,比如说Button1_onclick。不过在Internet Explorer中,JScript没有这项功能(但在其他的JScript主机上支持这项功能)。

什么时候选择JScript?

几乎所有允许编写脚本的浏览器都支持JScript。因此,如果你是为一个公共Web站点编写一个广泛散发的应用程序,用JScript来编写客户端脚本是很自然的选择。你还会发现,因为JScript应用得如此广泛(还有与它类似的JavaScript),是一种标准的脚本语言,你可以在书店里,也可以在网上找到很多有关的资源。

如果你想用JScript来编写服务器脚本,那么你应该检查一下你的服务器是否支持它。微软公司的IIS允许你用JScript来编写ASP网页的脚本,但这并不是所有的服务器都支持的。

影响到你做决定的其他因素还有:

动态执行。JScript一个非常有力的特性是:它允许你在你的脚本内建立和执行脚本或者动态地进行评价。简而言之,在你的脚本中能够编写脚本。当你用DHTML进行工作时,这个特性是非常有用的,因为这样你就能够动态的操作DHTML的文档模型了。

面向对象。JScript使用的是一种基于原型的对象结构,它能够允许你在脚本中定义对象。你能够往对象的原型中加入方法和特性,扩展内置对象和定制对象。

使用JScript时的一个警告:JScript是区分大小写的,如果你仅仅使用过Visual Basic 或VBScript也许对此难以适应。

如果你是初学JScript,你还要知道如何用JScript来建立事件处理程序。在Internet Explorer 中,JScript会要求你链接到一个对象上,而这个对象又是与事件处理程序相连的。通常,只要在鉴别事件并且有处理程序功能的对象的标签栏中指明其属性就能够完成。如下例所示:

在其他的主机上,你可以使用隐含的事件绑定,不过它要求的结构与VBScript中稍稍有所不同。在JScript中约定的隐含处理程序是:

<SCRIPT LANGUAGE="JavaScript">
function btnSave::onclick(){
// script here
}
</SCRIPT>

值得注意的是,在这两个例子中LANGUAGE这项属性是设置为"JavaScript"的。Internet Explorer对于"JScript" 和"JavaScript"这两个名字都认识,而许多其他的浏览器却只认识"JavaScript",不认识"JScript" 。因此,为了保险起见,如果你不能确定该网页是用Internet Explorer来浏览,你最好用"JavaScript"。

要了解更多在JScript中建立事件处理程序的情况,请查看位于MSDN Library Online中的Microsoft Visual InterDev?文档。(要访问MSDN Library Online必须有MSDN Online Membership资格,这一资格是免费的,不过要简单的一次性的注册一下。)

如何在Visual InterDev中明确所用的脚本编写语言?

不管你用什么语言来编写脚本,你必须要明确的指出来,这样主机才知道用什么脚本引擎来处理你的脚本。到底用什么语言来编写,取决于你是用内联服务器脚本来进行工作还是用<SCRIPT>块来工作(不管是客户端脚本还是服务器脚本),同时也取决于你所使用的Visual InterDev的版本。

为内联服务器脚本选择脚本语言

如果你使用的是IIS和ASP网页,你可以编写两类服务器脚本:内联脚本(在<% %>分隔符中的脚本)和在<SCRIPT>单元中的脚本。一般来说,用内联脚本你可以把结果插入到网页中的HTML中。相反,在<SCRIPT>单元中的脚本是用来建立从内联脚本中调用的功能和子程序的。

注意:要建立一个在<SCRIPT>单元中的脚本并让它运行起来像内联脚本也是可能的。也就是说,脚本所陈述的不是一项功能或者某个子程序的一部分。不过我们并不推荐这种做法。要知道更多的细节请看本文后面部分的"服务器脚本执行顺序"。

对于服务器和客户端脚本来说,为<SCRIPT>单元选择语言的方法是一样的。要知道详细情况请见本文后面部分的"为一个 <SCRIPT> 单元设置语言"。

在一个网页中所有的内联脚本要用同一种语言来编写。当你建立了一个新的ASP网页后,网页中会自动包含一个@指示,它指明了内联脚本的脚本语言。@指示可以像这样:

<%@ Language="VBScript" %>

@指示一定是网页中的第一行内联脚本命令。如果没有这个指示,IIS会缺省地指定用VBScript来作为内联脚本语言。

改变网页的内联脚本语言

在Visual InterDev 1.0中,可以对网页进行编辑把指示改变一下,设置一种新的语言,如"JavaScript."等。

在Visual InterDev 6.0中,右键点击网页后就会出现该网页的Properties对话框。然后在Default脚本语言下,选择一种新语言。经过应用之后,编辑器会在@指示中更新为相应的脚本语言。当然,如果你愿意,你也可以自己手动编辑@指示。

你还能够为所有的新ASP网页更换缺省值。这个操作不能够改变现在的网页,不过它对你从现在起建立的所有网页都会有用。

为内联脚本更换缺省语言

在Visual InterDev 1.0中,从工具菜单中选择Options选项,然后再选择HTML一栏。在Active Server Pages的缺省脚本语言处选择一种语言。

在Visual InterDev 6.0中,右键点击Project Explorer中的项目名字,然后选择Properties。选择Editor Defaults一栏,然后在缺省脚本语言处选择一个新的缺省值。

为<SCRIPT>单元设置语言

与内联服务器脚本不一样的是,你在<SCRIPT>单元中所使用的脚本语言在同一个网页中可以有很多种。如果某一块是用VBScript来编写的,那么另一块也可以用JScript。(记住,不是所有的平台都支持VBScript。)

注意:在同一个网页中混合几种语言有很多注意事项,详细内容请见本文后面部分的 "在同一个网页中用几种不同的语言来工作"。

为一个<SCRIPT>单元指定语言

在<SCRIPT>标记中包含了一个LANGUAGE单元,它指明了你所要使用的语言。例如,在下面这个<SCRIPT>标记中就指明了该<SCRIPT>单元中的所有脚本都要用JScript编写:

<SCRIPT LANGUAGE="JavaScript">
function test(){
alert("testing");
}
</SCRIPT>

注意:在IIS的服务器脚本中要求有LANGUAGE属性。而在客户端脚本中它只是一个选项。如果LANGUAGE属性没有了,处理程序会使用缺省的脚本语言。在Internet Explorer的客户端脚本中,缺省值通常是第一个<SCRIPT>单元的脚本语言,或者如果还没有指明任何语言,那就是JScript了。我们建议你最好不要依赖于缺省值,最好是为<SCRIPT>单元明确地设置一种脚本语言。

在一个<SCRIPT>单元中,你不能把VBScript 和JScript混合起来使用。如果你想同时使用它们,在你的网页中你必须至少有两个<SCRIPT>单元。

Visual InterDev 1.0 和Visual InterDev 6.0都提供了能够自动生成脚本的工具。在Visual InterDev 1.0 中有Script Wizard可以帮助你。而在Visual InterDev 6.0中有下列产生脚本的工具:

  • Script Block命令。只要你在网页中点击右键,出现的菜单中就会有这个命令。它能够在你点中的那一点插入一个<SCRIPT>单元的框架。
  • Script Outline命令。当你双击事件的名字时它就会建立一个事件控制器的框架。在你的设置的基础上,不同的脚本生成工具会决定你所要用的语言。你可以在个别网页中为脚本工具而改变缺省的语言种类。

在Visual InterDev 1.0中为Script Wizard设置语言

从Tools菜单中选择Options选项,然后选择HTML栏。在Script Wizard的缺省脚本语言中选择一种语言。

在Visual InterDev 6.0中为脚本生成工具设置一个网页中的语言

首先,右键点击网页,网页的Properties对话框出现。然后在缺省脚本语言下选择一种新的语言。你能够为服务器脚本和客户端脚本设置同一种语言。

注意:为产生服务器脚本块而作出的设置一样可用于为内联脚本设置语言。如果你想在内联脚本中使用一种语言,而在用工具产生的服务器脚本块中使用另外一种语言,你只能手工地进行语言改换。

你还可以改变你的项目的缺省值,这样你建立起来的所有网页都会有与脚本工具一样的缺省语言设置。

在Visual InterDev 6.0项目中改变脚本生成工具的缺省语言设置

在Project Explorer中右键点击项目的名字,然后选择Properties。选择Editor Defaults,在缺省脚本语言处选择一个新的缺省值。

注意:已产生的服务器脚本块语言的设置方法同样可以用于为内联脚本设置语言。如果你想在内联脚本中使用一种语言,而在用工具产生的服务器脚本块中使用另外一种语言,你只能手工地进行语言改换。

想知道Visual InterDev 6.0中脚本生成工具的更多信息,请查看位于MSDN Library Online中的"Choosing a Scripting Language"和Visual InterDev 6.0文档中的 "Handling Events with HTML Elements"。

在同一个网页中同时使用几种语言

我想我已经说得很清楚了,在同一个网页中可以使用不同的脚本编写语言。让再回顾一下:为什么你想这么做?以下是几个原因:

第一个原因是:你只是想在一个程序中利用某种语言的优点,而脚本的其他部分还是用另外一种语言来编写。

第二个原因是:可能你所面对的现有编码是用你不熟悉的语言来编写的。例如,设计时间控制是用JScript编写的,而你熟悉的语言却是VBScript。在大部分情况下,你可以在同一个网页中混合几种脚本语言并且它们相互之间能够配合得很好。用一种语言编写的脚本可以调用用另外一种语言编写的程序并且能够共享全局变量。不过有时候还是会出现一点小问题,现在我将要就此说明一下。

在一个VBScript调用中的括号

当你从VBScript中调用一个JScript函数时,注意在调用过程中要有括号,即使这项函数不要求设置参数也需如此。例如,一个调用应该像这样:

retVal = callJSFunction()

如果你忘记了加括号,那么这个函数所返回的值就不是你所希望的值,而是一个包含了函数本身的目标。

服务器脚本的执行顺序

内联服务器脚本按顺序运行,从头到尾。你可以在一个服务器脚本中定义一个可调用的程序(函数或者是子程序),这样的话,如果需要就可以随时调用它们。

所有的内联脚本必须用同一种语言来编写,也就是在网页前面的@指示中所指明的脚本语言。因此,在一个内联脚本中你不能把几种脚本语言混合起来。

你也许会说"等一等"。在理论上,把内联脚本放到<SCRIPT>单元中是绝对可能的--也就是说只要在单元中的脚本不是一个函数或者一个子程序就可以了。就像下例一样:

<% Response.Write("Some inline script<BR>")%>
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Response.Write("Script in a SCRIPT element<BR>")
</SCRIPT>

是的,你可以这么做。但是,这样你就会被IIS ASP处理程序的执行顺序控制。例如,如果你建立了服务器脚本并且在IIS 4.0中运行它,你会发现执行顺序是这样的:

  • 采用非缺省语言的<SCRIPT>单元脚本
  • 内联脚本
  • 采用缺省语言的<SCRIPT>单元脚本

以上的顺序在很大程度上依赖于ActiveX语言引擎的载入顺序,同时IIS 中的ASP处理程序可能在将来会有所改变,因此,我们很不希望你按照这个顺序进行工作,不管你是只把<SCRIPT>单元用于函数或者子程序,还是把它仅仅用于执行顺序无关紧要的编码。

脚本块的顺序

当你把几种语言混合使用时,<SCRIPT>块在网页中出现的顺序非常重要,有时候会影响到它们是否能正常工作。看看下面这个简单的例子,它是在一个内联的VBScript脚本中调用一个用JScript编写的函数:

<SCRIPT LANGUAGE="VBScript">
¹ Calls a JScript function
aNumber = 2
doubledNumber = doubleMe(aNumber)
document.write("The answer is " & doubledNumber)
</SCRIPT>

<SCRIPT LANGUAGE="JavaScript">
function doubleMe(aNumber){
return aNumber * 2;
}
</SCRIPT>

它不会起任何作用。说得更明白一点就是,文档写入说明会往网页中写入一个空的字符串。为什么?很简单,在处理VBScript块时,下面的JScript <SCRIPT>块没有被读出来,没有进行语法分析,因此网页不能使用它。而当浏览器处理网页中的脚本块时,它是从上往下进行的。

在这个例子中,只需要调换一下脚本块的顺序就能够解决这个问题了。事实上,这类问题并不那么常见,在大多数情况下,<SCRIPT>中包含的函数和子程序只有当整个网页被全部下载下来并且所有的单元都可以使用之后才能够被调用。不过,你还是要记住,网页是按照一定的顺序来处理的,不同语言的<SCRIPT>块是分别处理的。

区分大小写以及命名习惯

JScript能够区别大写和小写:在每个JScript的关键字,还有JScript姓名空间的所有部分中,你可以把大写和小写字母恰当的结合起来使用。这其中包括了你使用的对象模型中所有的关键字。例如,当你使用ASP Response对象时,必须正确地使用大写或小写字母(如Response.Write),否则JScript 会坚决不予承认。同样的,如果你为DHTML onclick事件编写一个处理程序时,如果用在Visual Basic中经常使用的形式JScript可能就不会承认。

VBScript当然是不区分大写和小写字母的。在某种程度上,这种不计较大小写的忽视甚至在你用VBScript对JScript编写的单元进行访问时都适用。下面几个小例子中给出了两个脚本。第一个是用JScript编写的,其中还包括了一个全局变量(ctr)和一个小小的函数(doubleMe)。第二个脚本是用VBScript编写的,它是一个按钮处理程序,它能够调用JScript函数,并且报告全局变量的值。

<SCRIPT LANGUAGE=javascript>var ctr;function doubleMe(aNumber){ // Initialize value of global counter if(parseInt(ctr)){
ctr = ctr + 1;}
else{
ctr = 1;
}
return aNumber * 2;
}
</SCRIPT>

<SCRIPT LANGUAGE="vbscript">
Function btn1_onclick()
numberToDouble = 12
alert("The doubled number = " & DoubleMe(numberToDouble))
alert("You have doubled the number " & Ctr & " times.")
End function
</SCRIPT>

在VBScript脚本中,很明显,我在提到doubleMe 函数和ctr变量时,没有正确使用字母的大小写,但是程序依然运行良好。

这是一个好消息。而坏消息就是,在下面这些情况下你一定要注意字母的大小写:

如果网页中的JScript脚本所包含的单元只能够通过字母的大写和小写来区分,例如,一个叫做Timer()的函数和一个叫做timer的全局变量等等。记住,尽管这种编码方式不怎么好,但是有时候在你的网页中还是可能会遇到原来就存在的编码。

如果你在一个函数调用中把JScript单元的名字作为一个字符串参数来使用

如果JScript包括的单元仅仅能够用字母的大小写来区分,那么VBScript就会让你把它们看成一样的(也就是说,不区分大写和小写)。VBScript只能看看不管大小写的区别,它们是不是一样,因此它识别出的只有一个JScript单元。换一句话说,如果VBScript首先找到的是叫做Timer()的函数,那么它就无法找到叫做timer的全局变量了,反之也是一样。即便你在VBScript编码中十分注意的把它们做了区别结果也是一样。因为VBScript在处理这些名字的时候认为它们只有一种写法。不幸的是,这里没有其它的解决方法,除非在JScript的代码中不利用这些大小写之间的微小差别来区分不同的函数名称。

除了在某些特殊的情况下,把单元名作为参数使用这种问题并不常见。特殊情况之一是在Visual InterDev 6.0中的脚本对象模型中。下面我会把它作为一个例子来使用,你可以把它看作是相同情况下的处理准则。

Visual InterDev 6.0的脚本对象模型都是用JScript来编写的。你也可以用VBScript来编写自己的编码,它能够与用VBScript区分大小写方式编写的脚本对象模型一起使用。有时候,你不能够直接调用某一方法,除非你把这个方法的名称传递到一个JScript函数中,而由函数来为你调用这个方法。

一个典型的例子就是警告方法,你可以用它把一个方法绑定到一个特殊的事件上。在下面这个例子中,一个按钮的onmouseover事件被绑定到changecaption()事件处理程序上。

<SCRIPT LANGUAGE="VBScript">Function setAdviseMethods()
Btn1.advise("onmouseover", "changecaption()")
End Function
</SCRIPT>

因为你把这些名字作为字符串传送到一个JScript函数中,所以你能够得到正确的大小写表示。稍后,JScript会自动用它的区分大小写的规则来重新评估这些名字,如果大小写不正确,它会找不到它们。

从VBScript 往JScript中传送数组

有时候一个VBScript程序会传送一个数组作为它的一个参数,或者作为它的返回值。你可以从JScript中调用这个程序,不过必须把VBScript 数组转换成为一个可用的JScript 数组。你只要在JScript 函数中建立一个VBArray 对象并且用toArray把它转换成为一个JScript数组就可以了。

注意:JScript不支持多维数组,如果原来的VBScript数组是多维的,经过toArray的转换后它会成为一个一维的JScript数组。

在下面的例子中有一个VBScript 脚本,它建立了一个数组,还有一个JScript脚本,它将说明如何才能获得并使用这个数组:

<SCRIPT LANGUAGE="VBSCRIPT">
Function makeArrayVB()
¹ Creates a VBScript array
dim anArray(1,1)
anArray(0,0) = "0,0"
anArray(0,1) = "0,1"
anArray(1,0) = "1,0"
anArray(1,1) = "1,1"
makeArrayVB = anArray
End Function

<SCRIPT LANGUAGE="JavaScript">
// Accesses a VBScript array within a JScript script
function getVBArray(){
var arrayObj;
var jsArray;
arrayObj = makeArrayVB();
jsArray = VBArray(arrayObj).toArray();
alert("VBScript array length = " + jsArray.length);
// Displays the contents of the array
for(i=1;i<=jsArray.length;i++){
alert(jsArray[i-1]);
}
}
</SCRIPT>

不过,在目前的VBScript(4.0)中,反过来是无法做到的。也就是说你不能把一个JScript 数组转换成为VBScript数组。如果你遇到的是一个JScript程序,要转换数组,你可以选择一下几种做法:

  • 用JScript编写调用程序
  • 用VBScript 重新编写JScript程序
  • 如果可能,把JScript 数组转换成一种不同的结构,如转换成一个限制的字符串等,这样VBScript 就能够使用了。例如,你可以用toString 函数把一个数组转换成一个用逗号分隔的,无限制的字符串。这样,在VBScript中你就能够用Split函数把它分成不同的单元。很明显这种方法在很多时候并不管用,不过有时又的确有效。

更新脚本语言

VBScript和 JScript都不是一成不变的语言。两种语言的引擎都定时进行更新,增加一些新的特性,解决已经发现的问题。因为两种语言实际上都是作为ActiveX组件来应用的,所以每当你更新任何控制器时,你就可以同时更新它们。当你安装了新的语言引擎之后,任何需要调用引擎的应用程序会在它们运行某些脚本时调用这个新引擎--这些引擎包括Internet Explorer 或Visual InterDev等。

如果要了解语言引擎的情况以及如何更新的方法,还有脚本的一般知识,请访问Microsoft Scripting Web站点,网址是:http://msdn.microsoft.com/scripting/。同时,祝你编写脚本时一切顺利!

asp编程中VBscript和javascript的选择

分类:Asp  来源:网络  时间:2010-9-23 16:06:49

服务器端:

大家知道ASP支持这两中脚本语言,也就是在服务器端用哪个都行,但大部分人在服务器

端用VBscript比较多,对于新手来说一般用VBscript就能了。

客户端:

目前流行的主要是微软和网景这两大浏览器,微软的IE对VBscript和JAVAscript都支持,

而网景的浏览器却不支持VBscript,为了兼容我们应该在客户端使用JAVAscript脚本语言,

从另方面由于JAVAscript有十分强大的交互性,使的我们在客户端用他能实现许多复杂的

功能。

所以说,由于是对于新手,在服务器端使用VBscript,在客户端应该使用JAVAscript,

如果你实在不熟悉JAVAscript,你能找一些代码只要能实现其功能就能了,等有一定

基础后,在回头再去学习他。

面向对象与面向过程的比较

分类:编程开发  来源:网络  时间:2010-9-21 18:34:24

1.什么是面向对象技术? 面向对象技术是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术。它具有抽象性、封装性、继承性及多态性。
2.面向对象与面向过程程序设计有什么不同? 面向对象与面向过程程序设计有如下不同: 
(1)面向过程程序设计方法采用函数(或过程)来描述对数据的操作,但又将函数与其操作的数据分离开来;面向对象程序设计方法将数据和对数据的操作封装在一起,作为一个整体来处理。 函数与数据是否分离 
(2)面向过程程序设计方法以功能为中心来设计功能模块,难于维护;而面向对象程序设计方法以数据为中心来描述系统,数据相对于功能而言具有较强的稳定性,因此更易于维护。 以功能为中心;以数据为中心 
(3)面向过程程序的控制流程由程序中预定顺序来决定;面向对象程序的控制流程由运行时各种事件的实际发生来触发,而不再由预定顺序来决定,更符合实际需要。 预定顺序;由运行时各种事件的实际发生来触发 
(4)面向对象程序设计方法可以利用框架产品(如MFC,Microsoft Foundation Classes)进行编程。 面向对象可利用框架 [color=#CC0000,strength=3);]面向对象和面向过程的根本差别,在于封装之后,面向对象提供了面向过程不具备的各种特性,最主要的,就是继承和多态。 3.面向对象技术有哪些优点? 面向对象技术具有程序结构清晰,自动生成程序框架,实现简单,可有效地减少程序的维护工作量,代码重用率高,软件开发效率高等优点。 4.面向对象技术中的封装性有何优缺点?如何克服这些缺点? 封装将对象有关的数据和行为封装成整体来处理,使得对象以外的部分不能随意存取对象的内部属性,从而有效地避免了外部错误对它的影响,大大减小了查错和排错的难度。另一方面,当进行修改对象内部时,由于只有少量的外部接口对外提供服务,因此同样减小了内部的修改对外部的影响。 如果一味地强调封装,对象的任何属性都不允许外部直接存取,则要增加许多没有其他意义、只负责读或写的行为。这会为编程工作增加负担,增加运行开销,并且使程序显得臃肿。为了避免这一点,在程序的具体实现过程中应使对象有不同程度的可见性,进而与客观世界的具体情况相符合。 
5.为什么要应用继承机制? 客观事物既有共性,也有特性。如果只考虑事物的共性,而不考虑事物的特性,就不能反映出客观世界中事物之间的层次关系。抽象机制是考虑事物的共性,继承机制是考虑事物的特性,这样才能完整地描述客观世界的层次关系。继承能使软件模块具有可重用性、独立性,缩短软件开发周期,提高软件开发效率,同时使软件易于维护。
6.C++对多态性的支持体现在哪些方面? C++的多态性分为编译时多态和运行时多态。编译时多态是指在程序的编译阶段由编译系统根据参数确定与哪个同名的函数相联系;运行时多态是指在程序的运行阶段才根据产生的信息确定需要调用哪个同名的函数。C++通过函数重载和运算符重载实现编译时多态,通过继承和虚函数来实现运行时多态。
7.目前常用的面向对象程序设计语言有何异同? 目前常用的面向对象程序设计语言有C++、Java、Visual Basic等。C++是混合型面向对象程序设计语言,继承并改进了C语言,是一种既支持面向对象又支持面向过程的程序设计方法。Java是纯面向对象程序设计语言,从C++发展而来。C++和Java均支持面向对象技术的基本概念和基本特征,如封装、类、构造函数、析构函数、继承、多态等。 C++与Java语法描述有相同之处,也有不同之处。如基本结构语句的语法大致相同,而类定义的语法等方面则不相同。此外还有以下不同: 
(1)C++有运算符重载机制,而Java没有此特性;
(2)C++支持多重继承,而Java只支持单重继承;
(3)C++通过构造函数创建对象,可以直接使用指针来操作对象的成员,而Java通过new运算符创建对象,通过new运算符返回的对象引用来使用对象,而不是直接操作指针; 
(4)C++程序要显式地释放所分配的内存,而Java具有内存垃圾收集机制,自动管理内存,不需要显式释放所分配的内存。 Visual Basic继承了BASIC语言所具有的语法简单、容易学习、容易使用、数据处理能力强的特点,又引入了面向对象、事件驱动的编程机制和可视化程序设计方法,大大降低了开发Windows应用程序的难度,有效地提高了应用程序开发的效率。但是,Visual Basic存在语法不严格、开发出的系统稳定性较低的缺点。相对C++来说,Visual Basic面向系统底层的编程能力有限。
8.什么是.NET? .NET是一种面向网络、支持各种用户终端的开发平台。它定义了一种公用语言子集(Common Language Subset,CLS),为符合其规范的语言与类库之间提供无缝集成的混合语言。.NET统一了编程类库,提供了对下一代网络通信标准——可扩展标记语言(eXtensible Markup Language,XML)的完全支持,使应用程序的开发变得更容易、更简单。所以?.NET就是Microsoft的XML Web服务平台,不论操作系统或编程语言有何差别,XML Web服务均能使应用程序在Internet上传输和共享数据。

教你做表格(史上最全)

分类:计算机应用  来源:网络  时间:2010-9-15 22:25:45

excel教程

难得的excel教程集珍藏版,简单明了,包你学会,欢迎转载



照片名称:自动筛选


照片名称:在Excel中字符替换


照片名称:在Excel中直接编辑“宏”


照片名称:在Excel中为导入外部数据


照片名称:在Excel中行列快速转换


照片名称:在Excel中运行“宏”


照片名称:在Excel中添加说明文字


照片名称:在Excel中数据分列整理


照片名称:在Excel中数据合并


照片名称:在Excel中添加常用文件夹


照片名称:在Excel中添加多个视图


照片名称:在Excel中设置打印区域


照片名称:在Excel中录制“宏”


照片名称:在Excel中建立图表


照片名称:在Excel中获取网络数据


照片名称:用好Excel的“搜索函数”


照片名称:在Excel中插入超级链接


照片名称:在Excel中打印指定页面


照片名称:在Excel中冻结行列标题


照片名称:用窗体调用“宏”


照片名称:用Excel函数向导输入公式


照片名称:一次打开多个Excel文件


照片名称:锁定和隐藏Excel公式


照片名称:共享Excel工作簿


照片名称:将Excel公式结果转为数值


照片名称:设置Excel标签颜色


照片名称:设置Excel文件只读密码


照片名称:防止Excel数据重复输入


照片名称:给Excel数据表添加页眉页脚


照片名称:给Excel中的数据添加单位


照片名称:更改Excel缺省文件保存位置


照片名称:拆分窗口


照片名称:保护Excel 工作簿


照片名称:按钮调用“宏”


照片名称:Excel自定义自动填充序列


照片名称:Excel中设置数据对齐方式


照片名称:Excel中直接输入函数


照片名称:Excel字符格式设置


照片名称:Excel自定输入数据下拉列表


照片名称:Excel正确输入身份证号码


照片名称:Excel页面背景设置


照片名称:Excel数据输入范围控制


照片名称:Excel数据排序操作


照片名称:Excel数据表格中如何按条件显示


照片名称:Excel数据表格中如何将姓名信息


照片名称:Excel数据表格中如何利用“高级


照片名称:Excel数据格式设置


照片名称:Excel内置序列批量填充


照片名称:Excel模版的保存和调用


照片名称:Excel监视窗口


照片名称:Excel中行列隐藏操作


照片名称:Excel工作簿加密保存


照片名称:Excel公式引用方式转换


照片名称:Excel中特殊符号的输入


照片名称:Excel中文日期格式


照片名称:Excel工作表的移动


照片名称:Excel工作表的复制


照片名称:Excel分区域锁定


照片名称:Excel动画教程:加载“宏”


照片名称:Excel表格列宽行高设置


照片名称:Excel大写数字设置


照片名称:Excel单元格的合并


照片名称:Excel动画教程:保存“加载宏”


照片名称:Excel表格标题重复打印


照片名称:Excel表格边框设置


照片名称:Excel标题跨列居中


照片名称:Excel“公式求值”功能

 
  

厦蓉高速汝郴段文明特大桥

分类:默认分类  来源:网络  时间:2010-9-15 22:22:54

昨天,随县摄影家协会的朋友们到文明乡,实地观察了厦蓉高速汝郴段文明特大桥建设工地,建设中的特大桥气势恢宏,一共有49个桥墩,最高的达113米。期待2013年,厦蓉高速全线通车,从此汝城便有了一条通往后面世界的黄金通道。


  • 60
  • |<
  • <<
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • >>
  • >|