简介
要快速创建企业级的Web应用程序,开发人员必须依赖于可伸缩性、强壮性和可重用性等商业逻辑。在过去的几年中,面向对象的程序设计成为符合这些要求的系统的首要方法。使用面向对象的编程语言有助于使大规模的系统更易于理解、更易于调试、升级更迅速。
为了使Visual Basic开发人员能够从面向对象设计中受益并简化企业级Web应用程序的开发,Visual Basic的下一个版本——Visual Basic.NET将支持包括实现继承在内的全部面向对象的语言特性。有了这些语言特性,Visual Basic.NET将具有快速开发企业级关键应用所需要的所有能力,同时保持使其成为世界上最流行的开发工具的直接访问性。
Visual Basic.NET提供了一流的面向对象的程序设计语言特性,诸如实现继承、重载和参数化的构造器。此外,开发人员可以通过显式的自由线程编写具有高度可伸缩性的代码,同时通过其它现代化的语言概念如结构化的异常处理等编写具有较高可维护性的代码。Visual Basic.NET将提供开发人员创建强壮、可伸缩的分布式Web应用所需要的所有语言特性:
新增的面向对象编程特性
l 继承
l 重载
l 参数化的构造器
其他的现代化的语言特性
l 自由线程
l 结构化的异常处理
l 严格类型检查
l 共享成员
l 初始化设置
语言更新的历史
Visual Basic语言有很长的更新历史,这与Windows平台的基本性变化是相关的。例如:对QuickBasic的显著改变是支持Windows3.0的GUI开发并产生了第一个版本的Visual Basic。在Visual Basic4.0中向基于COM编程的转变产生了创建DLL的语言概念。在Visual Basic5.0中,其语言发展到支持COM控件的创建。
随着每一次连续的修改,Visual Basic的流行程度越来越高。新Visual Basic面向对象的语言特性为开发人员提供了创建企业级Web应用程序的能力,这必将延续这种趋势。
面向对象的程序设计
在传统的结构化程序设计中数据存储分离与程序代码,这存在着一些弊端。所有的代码被书写成结构化的,而不是模块。因为数据元素可以从任何代码中访问,它可能在开发人员不知道的情况下别修改。这可能会导致非常难于调试的运行时错误。此外,程序维护可能成为一项重要的任务。理解结构化编程中修改一行代码所造成的全局影响是非常困难的。最后,依赖于开发人员控制代码和数据结果会导致较低的可重用性。
面向对象的程序设计(OOP)解决了这些问题,它将数据和在其上实施的方法包装成一个独立的单元,叫做对象。一个对象的数据可以隐藏以防止未经授权的修改。此外,对象公开一组可以在数据上进行操作的公共方法。这种概念叫做封装。由于实现细节和接口相分离,底层的编程逻辑可以在后期改变而不必担心破坏调用对象的代码。
OOP还允许开发人员通过继承同时重用代码和数据。通过从先前确定的对象中继承,开发人员可以更迅速地构造复杂的应用程序。由于编写新的代码总是会有带入错误的潜在可能,重用经过测试的代码可以使产生额外错误的可能性达到最小。
为了适应这些需要,Visual Basic.NET将提供一些新增的语言特性,这些特性可以使其拥有以上所描述的种种益处,使其成为一流的面向对象的编程语言。
继承
一直以来对Visual Basic特性的要求中呼声最高的就是对继承的支持。在Internet时代的开发要求快速地组装和大量的重用。Visual Basic现在完全实现继承,包括可视化窗体的继承。
开发人员可以使用新的关键字Inherits从一个已存在的类中派生。
Class1
Function GetCustomer()
...
End Function
Class2
Inherits Class1
Function GetOrders()
...
End Function
继承语句支持所有与继承相关的性质。派生类的实例支持所有基类所支持的方法和接口。当然,派生类可以扩展基类所支持的方法和接口的集合。派生类可以使用Overrides关键字来替代基类中定义的方法。为减少编程错误,Visual Basic会防止意外的替代一个函数。只有声明为“可替代”的函数被允许在派生类中被替代。
重载
Visual Basic现在允许函数重载,这使开发人员具有建立一个拥有相同名称,但参数类型不同的过程或函数的能力。
当对象模型中规定了要使用名称相近但操作于不同类型的数据之上的过程时,继承尤其有用。例如:一个可能表现为几种不同数据类型的类可以有这样一个Display过程:
Overloads Sub Display (theChar As Char)
...
Overloads Sub Display (theInteger As Integer)
...
Overloads Sub Display (theDouble As Double)
如果没有继承,你就需要为每个过程使用不同的名称或使用Variant参数。重载提供了一种更为清晰、更为有效的方法来处理多种数据类型。
参数化的构造器
参数化的构造器(或简称为“构造器”)允许创建一个类的新实例的同时向这个实例传递参数。构造器对于面向对象的编程来说是必需的。因为它允许用户定义的构造代码通过实例的创建者传递参数。它们通过允许一个新的对象实例在一个单独的表达式中创建并初始化以简化客户机程序的代码。
其他的现代化语言特性
Visual Basic.NET增加了一些简化具有强壮性和可伸缩性应用开发的新概念。这些特性包括自由线程、结构化的异常处理、严格的类型安全等以及诸如初始化设置和共享成员等能够提高生产率的新特性。
自由线程
现在当开发人员在Visual Basic中创建应用程序时,他们所编写的代码是同步的。这意味着每行代码要在下一行代码之前执行。开发Web应用程序的时候,可伸缩性是关键。开发人员需要是并行处理成为可能的工具。
通过自由线程,开发人员可以生成一个线程来完成一些运行时间长的任务、执行一个复杂的查询或运行一个多部分的计算,而应用程序的其它部分继续执行,提供了异步处理。
Sub CreateMyThread()
Dim b As BackGroundWork
Dim t As Thread
Set b = New BackGroundWork()
Set t = New Thread(New ThreadStart(AddressOf b.Doit))
t.Start
End Sub
Class BackGroundWork
Sub DoIt()
...
End Sub
End Class
结构化的异常处理
开发企业级的应用程序要求创建可重用的、可维护的部件。在过去的Visual Basic版本中,Basic语言的一个具有争议的方面是其对错误处理的支持。开发人员已经发现一致的错误处理方案意味着大量的赋值代码。利用现存的On Error Goto语句的错误处理方法有时会减缓大规模应用程序的开发和维护。其叫法就反映出这样一些问题:如Goto所意味的,当一个错误发生时,控制权转移到子程序中一个有标记的位置。一旦错误代码运行,它必须时常通过另外的清除位置来转向,而后者又要经过一个标准的Goto,最后还是要通过其他的Goto或Exit来退出过程。使用Resume和Next的多种组合来处理几个不同的错误将会产生难以读懂的代码并且在执行路径没有被完全考虑到的时候会导致频繁的错误。
利用Try...Catch...Finally,这些问题将不复存在,开发人员可以嵌套其异常处理,同时这是一种用于编写在正常条件和异常条件下执行清洁代码的控制结构。
Sub SEH()
Try
Open "TESTFILE" For Output As #1
Write #1, CustomerInformation
Catch
Kill "TESTFILE"
Finally
Close #1
End try
End Sub
严格的类型检查
当前的Visual Basic语言在其可能产生隐式的类型强制转换上是非常自由的。对于赋值和除了引用方式之外的参数传递,Visual Basic编译器可以允许几乎任何一种数据类型通过发生运行时强制类型转换向其他数据类型转换。如果要转换的值不能在没有数据损失的情况下被转换,那么运行时的强制转换可能会失败。通过增加一个新的编译选项,Visual Basic可以对任何可能在运行时发生错误的转换产生编译时错误。选项Strict通过在要求一个可能在运行时失败的转换或诸如在数字类型和字符串之间的在用户预期之外的自动转换时产生错误来改善类型安全。
共享成员
共享成员是指由类的所有实例所共享的数据和函数成员。在类的所有实例中共享一个数据成员或函数的单个实例是使用继承的Visual Basic应用程序所需要的。一个共享数据成员独立地存在于类的每个实例中。共享方法不同于普通的方法,它并不是隐式的传递类的一个实例。由于这个原因,在共享方法中对非共享数据成员的无限制引用是不允许的。共有的共享成员可以被间接地访问,而且它们可以从类的实例后期绑定。
初始化设置
Visual Basic.NET支持在变量的声明行中对其初始化。初始化设置可以在包括控制结构的任何地方使用。含有初始化设置的过程级声明的语义与一个声明语句后紧跟一个赋值语句是相同的。换句话说,语句
Dim X As Integer=1与
Dim X As Integer
X=1是相同的。
结束语
Visual Basic现在是一流的面向对象编程语言,使用Visual Basic.NET,开发人员可以通过显式的自由线程创建高度可伸缩的代码。他们所编写的代码增加了如结构化异常处理等现代化语言概念的使用,将具有很高的可维护性。Visual Basic将为开发人员创建强壮的、可伸缩的分布式Web应用提供所需要的一切语言特性。