即使在今天,用脚本语言编写的应用程序的数目也远多于用系统程序设计语言编写的应用程序的数目.在Unix系统中有比C程序更多的外部脚本,而在Windows下Visual Basic的编程者和应用程序都比C或C++的要多.当然,多数大型和广泛使用的应用程序都是用系统程序设计语言写成的,所以,如果比较代码总行数或是建立的副本数,则系统程序设计语言略胜一筹.不管怎么样,脚本语言已经是应用程序开发的主动力,并且今后它的市场份额会继续提高.
6.对象的作用
脚本语言在编程语言和软件工程中通常被专家忽视.取而代之,他们更注重像C++和Java等面向对象系统程序设计语言.面向对象编程被认为是代表下一步编程语言发展的主流.像强类型和继承等面向对象 特征 据说可以减少开发时间,提高软件重用率,并解决包括脚本语言技巧等其他问题.
面向对象编程实际能提供多少好处?不幸的是,我还没有看到足够的数据可以确切地回答这个问题.在我看来,对象只能提供一定的好处:或许能提高20-30%的创作力,但决不会有两倍,更不用说是十倍.现在抱怨C++的和喜欢它的一样多,并且一些语言专家开始公开反对面向对象编程.这一段剩下的部分用于解释为什么对象不能像脚本一样显著地提高创作力,并讨论脚本语言中可以获得的面向对象编程的好处.
面向对象编程不能显著提高创作力的原因是他没有提高编程层次或鼓励重用.像C++等面向对象语言中编程者仍然使用需要用大量细节来描述和操纵的基本的小单元工作.理论上可以开发强大的函数库包,并且如果这些函数库被广泛使用就将提高编程层次.然而,这样的函数库却很少.大多数面向对象语言的强类型使包的定义受限制从而难以重用.每个包都需要特殊类型的对象,如果两个包在一起工作,就必须写转换代码在两个包需要的类型间进行翻译.面向对象语言的另一个问题是他们强调继承.当一个类借用为另一个类写的代码时执行继承并不是一个好主意,它使软件难以管理和重用.它把类的执行绑在一起,因而没有另外一个类任何一个其它类都不可理解:不知道其继承的方法在父类中如何执行,则无法理解子类;而不知道其方法如何被子类继承,则无法理解父类.在一个复杂的类继承中,不理解它所继承的所有其他的类就无法理解任何一个类.更糟的是,一个类无法从它继承的类中被分离以用于重用.多重继承使这个问题变得更麻烦.执行继承导致和goto语句被重复执行时所看到的一样的交错和不可靠.因此,面向对象系统经常不能处理复杂问题并缺少重用.
另一方面,脚本语言实际引起了有效的软件重用.在有趣的组件由系统程序设计语言建立使他们使用了模块,随后用脚本语言把他们胶着在应用程序中.这种劳动的分割提供了为重用的自然的框架结构.组件被设计为可重用的组件和脚本间有定义好的接口以利于组件的使用.例如,在Tcl中组件是C中执行的常规命令.他们看起来更象是内在的命令,因而更容易在Tcl脚本中使用.在Visual Basic中组件是ActiveX的扩展,可用于从工具面板直接拖到窗体中.
不管怎么样,面向对象编程至少提供了两个有用的特性.第一个是封装:对象用某种隐藏执行细节的方法把数据和代码联系起来.这使管理大型系统更加容易.另一个有用的特性是接口继承,这涉及提供同样方法的类和APIs,即使他们有不同的执行,这时类之间可以相互转化,从而鼓励重用.
幸运的是,对象的这些好处在脚本语言中可以像在系统程序设计语言中一样实现,并且所有的脚本语言都提供面向对象编程.例如,Python是面向对象脚本语言,Python第五版包括提供对象,Object Rexx是Rexx的面向对象版本,而Incr Tcl是Tcl的面向对象版本.有一点不同是,脚本语言中的对象事物类型的,而系统程序设计语言中的对象是强类型的.
7.其他语言
这篇文章不是所有编程语言的全部特性记述.除了类型长度和编程层次以外还有许多编程语言的其他特性,并且还有许多不能被明确定义为系统程序设计语言或脚本语言的其他有趣的语言.例如,Lisp系统的语言就处于脚本语言和系统程序设计语言之间,两方的特性它都有一些.它开创了像解释和活动类型等现在在脚本语言中很普遍的观点,又有自动存储管理和综合开发环境等在脚本和系统程序设计语言中同时使用的观念.
8.结论
脚本语言代表一套与系统程序设计语言不同的协定.他们牺牲执行速度和与系统程序设计语言相关的类型长度而提供更高的编程创作力和软件重用.当计算机变得更快和比编程者的劳动力更便宜时这个协定越来越行得通.在复杂的数据结构和算法中系统程序设计语言也适于创建组件,而脚本语言更适合在联系复杂的应用程序中进行胶着.胶着工作变得越来越盛行,因而脚本在下个世纪将成为比今天更为重要的编程范例.
我希望这篇文章可以在三个方面影响编程群体;
★在开始一个新的项目并为每个工作选择最强大的工具时我希望编程人员能考虑到脚本和系统编程的不同
★我希望组件框架的设计者能认识到脚本的重要性并确信框架不仅是创建组件的工具,同时也是把他们胶着在一起的工具
★我希望编程语言研究协会能转变他们对脚本语言的态度,并在将来帮助发展更强大的脚本语言.对语言设计者而言,提高编程层次应该是唯一重要的目标,因为他是提高编程者创造力的最重要的因素;强类型是否有助于达到这个目标还不清楚.
9.答谢
这篇文章得益于很多人的观点,包括Joel Bartlett, Bill Eldridge, Jeffrey Haemer, Mark Harrison, Paul McJones, David Patterson, Stephen Uhler, Hank Walker, Chris Wright,IEEE计算机执行官,和许多热心参与这篇文章早期草稿网上新闻组讨论的人.Colin Stevens 写了MFC按钮例子的版本,Strphen Uhler写了Java版本
文章来源于领测软件测试网 https://www.ltesting.net/