1.4 Visual Basic程序开发
1.4.1 面向对象程序设计
面向对象程序设计是在结构化程序设计的基础上发展起来的,面向对象程序设计思想的特点是:程序一般由类的定义和类的使用两部分组成,主程序中定义各个对象并规定它们之间传递消息的规律,程序中的一切操作都通过向对象发送消息来实现,对象接收到消息后,调用有关对象的行为来完成相应的操作。
1.对象和类
在面向对象程序设计中,对象是基本构成单元,对象是由描述其属性的数据和定义在数据上的一组操作组成的实体,是数据单元和过程单元的集合体。例如,司机马强是一个对象,他由描述他特征的数据和他能提供的一组操作来表征。类是一组对象的抽象,这组对象有相同的属性和操作行为,并对这些属性和操作行为加以描述和说明。类是创建对象的样板,它没有具体的值和具体的操作,只有以它为样板创建的对象才有具体的值和操作。类用类名来相互区别,例如,可以定义司机类描述所有司机的共有属性和操作行为。
VB是一种可视化的面向对象程序设计语言。在VB中,对象是窗体、控件和部件的统称,它具有属性、方法和事件特征。整个应用程序也是一个对象,表1.1列出了Visual Basic中常见的对象。
表1.1 Visual Basic中的常见对象
一个对象是类的一个实例,有了类才能创建对象。例如,Visual Basic集成开发环境中“工具箱”上的控件代表类,直到在窗体上画出这些控件对象之前,它们在窗体上实际并不存在。创建控件就是建立控件类的实例,这个类实例就是应用程序中引用的对象。
2.抽象性
抽象是人类对事物进行分类的基本方法。面向对象程序设计中的抽象是对同类对象进行分析、概括,得到同类对象的公共性质,并加以描述的过程。对一个事物的抽象一般包括两个方面:数据抽象和行为抽象。数据抽象用于描述对象的属性和状态,使对象之间可相互区别。行为抽象又称为代码抽象,是对数据需要进行的处理进行描述,它描述了同类对象的共同行为特征,使同类对象具有共同的功能。
3.封装性
在面向对象的程序设计中,封装是把相关的数据和代码结合成一个有机的整体,形成数据和操作代码的封装体。封装提高了程序的安全性,对外只提供一个可以控制的接口,内部大部分的实现细节对外隐蔽,达到对数据访问权的合理控制。封装机制是通过对象来实现的,对象中的成员不仅包含了数据,也包含了对这些数据进行处理的操作代码。对象中的成员可以根据需要定义为公有的或私有的,私有成员在对象中被隐蔽起来,对象以外的访问被拒绝;公有成员提供了对象与外界的接口,外界只能通过这个接口与对象发生联系。
抽象和封装是相互促进的。一个好的抽象有利于封装,封装帮助维护抽象的完整性,但抽象先于封装。
4.继承性
在面向对象程序设计中,继承描述了类间的关系,这种关系使得一个类可以继承另一个类的属性(数据)和行为(操作),从而提供了通过现有类创建新类的方法,新建的类也称为派生类。创建派生类时,不必重新描述基类的所有特征,只需让它继承基类的特征即可,然后描述其与基类不同的那些特征。也就是说,派生类的特征由继承来的特征和新添加的特征两部分组成,继承既允许派生类使用基类的数据和操作,也允许拥有自己的数据和操作。
5.多态性
多态性是指不同的对象收到相同的消息时产生不同的操作行为,或者说同一个消息可以根据发送消息对象的不同而采用多种不同的操作行为。例如,当用鼠标单击不同的对象时,各对象就会根据自己的理解做出不同的反应,产生不同的结果,这就是多态性。
1.4.2 Visual Basic程序开发的重要特性
Visual Basic是Windows开发语言,它和Windows工作机制基本保持一致。Windows的工作机制简单地说就是三个关键的概念:窗口、事件和消息。
1.Windows编程机制
窗口是Windows最基本的用户界面,除了资源管理器窗口、文件夹窗口、应用程序窗口这些最普通的窗口外,还有许多其他类型的特殊窗口,命令按钮是一个窗口,图标、文本框、选项按钮和菜单条也都是窗口。
Windows操作系统通过给每一个窗口指定一个唯一的标识号(窗口句柄或 hWnd)来管理所有的窗口,操作系统连续地监视每一个窗口的事件。事件可以通过诸如单击鼠标或按下按键的操作而产生,也可以通过程序的控制而产生,甚至可以由另一个窗口的操作而产生。每发生一次事件,将引发一条消息发送至操作系统。操作系统处理该消息并将其广播给其他窗口。然后,每一个窗口才能根据自身处理该条消息的指令采取适当的操作(例如,当窗口解除了其他窗口的覆盖时,重新显示自身窗口)。
2.事件驱动模型
在传统结构化应用程序中,代码的执行次序由应用程序自身控制,从第一行代码开始,按应用程序中预定的路径执行。而在事件驱动系统中,程序的控制方式则不同。在事件驱动的应用程序中,当某个事件发生后,系统会找到并运行相应的事件处理程序,也就是说事件的触发顺序决定了代码执行的顺序。
由于事件的出现顺序是不确定的,所以在代码中必须对每个需要处理的事件编写其事件处理程序。VB中的每一个对象都有一个预定义的事件集,如果其中有一个事件发生,并且在关联的事件过程中存在代码,则VB会自动调用该代码处理事件。当事件处理程序执行完后,系统处于等待状态,当另一个事件发生后,程序就去执行该事件的事件过程,当这个事件执行完后,系统又处于等待另一个事件发生的状态,这就是事件驱动程序方式。
事件驱动应用程序的整个过程可以总结为:
① 启动应用程序,装载和显示窗体;
② 窗体或窗体上的控件等待事件的发生;
③ 当某个事件发生后,执行其对应的事件过程代码;
④ 重复执行第②和第③步,直到遇到End语句或单击结束按钮停止程序的运行。
3.交互式开发
传统的应用程序开发过程可以分为3个步骤:编码、编译和测试。VB与传统的语言不同,它使用交互式方法开发应用程序,使3个步骤之间不再有明显的阶段划分。
在大多数语言里,如果在编写代码时发生了错误,等到编译应用程序时,该错误才会被编译器捕获。此时必须查找并改正该错误,然后再次进行编译,对每一个发现的错误都要重复这样的过程。而VB集成环境则不同,VB在编程者输入代码时便进行解释,即时捕获并突出显示大多数语法或拼写错误。
除即时捕获错误外,VB也在输入代码时部分编译该代码。当准备运行和测试应用程序时,只需极短时间即可完成编译。如果编译器发现了错误,则将错误突出显示于代码中。这时可以更正错误并继续编译,而不需从头开始。
由于VB的交互特性,可以发现,在开发应用程序的同时,系统也正在运行着应用程序。通过这种方式,代码运行的效果可以在开发时进行测试,而不必等到编译完成后再进行。