一。对象:
vfp既支持面向过程的结构化程序设计方法,也支持面向对象的由事件驱动的程序设计方法。传统的面向过程的结构化设计方法,是一种面向数据处理过程来编制程序代码的方法,由这种方法编制的程序被称作结构化程序。结构程序是一种线性结构程序,启动后从头到尾顺序执行,直至完成。采用结构化方法编制程序,主要有两个缺点:一是程序设计人员需用大量时间去设计输入和输出界面,而设计出来的界面双很取得和视窗操作系统一样漂亮的界面;三是这种程序在执行过程中一直独占计算机的各种资源,难于实现多任务操作。前面课程,我们举出的例程,大部分是面向过程的结构化程序。
而面向对象的由事件驱动程序设计思想,是将数据处理由面向过程,转为面向对象,并采用事件驱动程序的执行过程。这种新的程序设计方法的优点是:简化程序界面设计和实现多任务操作,从而提高计算机的使用和软件开发的效率。面向对象的设计方法是程序设计技术的一次变革,是当今软件开发的主流技术,大家应该尽快学习并掌握这门技术。要全面理解和掌握这门技术,首先应从类与对象开始。
面向对象的设计方法是按照人们习惯的思维方式建立模型,模拟客观世界。客观是由一系列的具有动作的对象构成的,一个复杂的对象还可能包含若干个简单的对象,每个对象都具有一定的性质,并且执行一些操作和对应的动作。例如,日常生活中的气球这个对象,可以看到的性质有气球的形状和颜色,可以有上升和下降的动作,另外气球对充气及放气的响应是形状变大和缩小。对象所具有的性质称为对象的属性;对象所执行的一些操作被称为对象的方法;对象所对应的动作称为对象的事件。对象之间通过消息进行联系。
vfp应用程序的界面一般是由表单,菜单和各种控件等对象构成,各个对象之间的联系完全取决于用户所做的操作。即程序的运行没有固定的顺序。vfp采用事件驱动方式,通过编写"事件"的程序代码,为对象规定了被某个"事件"激活时对应的动作以及所要进行处理的具体内容,由各个对象编写的事件代码集合在一起,就构成了应用程序。
Visual FoxPro基础教程完整版回头看第一章的第一个示例,如图1
程序界面由1个表单,2个标签,2个文本框和1个命令按钮组成,这些都是对象。用鼠标单击"计算"按钮,就产生了该命令按钮的click事件,它的click事件中的程序被执行。具体的代码如下:
r=thisform.text1.value
thisform.text2.value=3.14159*r*r
thisform.refresh事件中的代码一般是由若干个语句组成的一段程序,这里仅需计算圆的面积并将结果在文本框中显示出来,所以仅用3条代码即可。语句中的value是文本框的一个属性,通过该属性可得到用户在文本框中输入的值。将值赋给该属性,就能在该文本框中显示出这个值。
二。类(class)、基类(bassclass)及子类:
1.类:工厂里使用一种模具可以生产许多同种类的产品,类就是生成对象的模具,使用一个类也就可以快速在应用程序中创建同种类的许多对象。类是对象外观和行为的模板,对象是类的一个实例。类是一个抽象的概念,对象是一个具体的东西。例如,"汽车"可看作是一个类,它包含了汽车这个类的共同特征(比如:型号、发动机排量、外观尺寸、颜色等).对对于"奔驰"是汽车这个类的一个具体实例。
2.基类:vfp中,为了实现常用功能,系统提供了一些类,称为基类,子类是用户在已有的类的基础上进行修改并加入新的特性而形成的类。子类所依托的类称为父类。
系统提供的基类工具栏如图2所示,
当我们新建或修改一个表单时,会打开"表单设计器",该工具栏会自动打开,该工具栏上的每一个按钮对应一个系统基类,见下表,我们单击该工具栏上的某个按钮,在表单上画出一个控件,实际上就是依据该基类创建了一个对象。
名称 | 基类名 | 是否容器 |
表单 | form | 是 |
标签 | label | 不是 |
文本框 | textbox | 不是 |
编辑框 | editbox | 不是 |
命令按钮 | commandbutton | 不是 |
命令按钮组 | commandgroup | 是 |
单选按钮组 | optiongroup | 是 |
检查框 | check1 | 不是 |
列表框 | listbox | 不是 |
复选框 | combobox | 不是 |
微调按钮 | spinner | 不是 |
表格 | grid | 是 |
图像 | image | 不是 |
定时器 | timer | 不是 |
页框 | pageframe | 是 |
线条 | line | 不是 |
形状 | shape | 不是 |
容器 | container | 是 |
3.基类的分类:vfp的基类可分为容器类和控件类两大类。
(1).容器类:容器类是可以包含其他害的基类,将容器类加入表单后,无论在设计还是在运行时,既可以将容器类的对象作为一个整体进行操作,也可以分别对其中所包含的对象进行处理。
(2).控件类:控件类是可以包含在容器类的类。控件类的封装比容器类更加严密,但也因此丧失了一些灵活性。控件类不能作为其他对象的父对象。