第5章 面向对象的程序设计方法(24学时)
一、【教学目标】
1.理解面向对象的概念。
2.了解foxpro的基类、容器与控件和事件的基本内容。
3.理解并掌握创建与管理表单的方法,表单设计器的使用方法,常用表单控件的使用方法。
4.掌握用菜单设计器创建菜单,快速菜单创建菜单。
5.掌握用报表向导设计报表,掌握用快速报表设计报表。
二、【重点和难点】
重点:
1.表单的创建与管理表单方法,各种控件的创建与编程方法。
2.用菜单设计器创建菜单,用快速菜单创建菜单。
3.报表设计器的使用方法,报表设计的基本方法与步骤。
难点:
1.表单各种控件的创建与编程方法。
2.菜单系统的建立方法。
3.报表的布局,分组报表的设计,分栏报表的设计。
三、【学法指导】
1.
VFP系统支持两种工作方式:交互方式、程序方式。学习程序方式,可大量减少重复劳动,达到事半功倍的目的。
2.
面向对象程序设计是VFP的重要组成部分,是进行系统设计的重点,要在教师的指导下,加强上机练习,循序渐进地学好。
3.
面向对象程序设计方法是本章的重中之重,要加强学习,勤于思考。
4.
通过本章的学习,有助于提高分析问题、解决问题的能力。
四、【教学要点】
5、1 面向对象的概念
(1)对象
客观世界里的任何实体都可以被看作是对象,对象可以是具体的物,也可以指某些概念,每个对象都有自己的行为。
使用面向对象的方法解决问题的首要任务就是要从客观世界里识别出相应的对象,并抽象出为解决问题所需要的对象属性和对象方法。属性用来表示对象的状态,方法 用来描述对象的行为。在面向对象的方法里,对象被定义为由属性和相关方法组成的包。方法是描述对象行为的过程,是对当某个对象接受了某个消息后多采用的一系列操作的描述。
(2)类
类是一类对象关系的性质描述。这些对象具有相同种类的属性及方法。类好比是一类对象的模板,有了类定义后,基于类就可以生成这类对象中的任何一个对象,这些对象虽然采用相同的属性来表示状态,但它们在属性上的取值完全可以不同。在类的定义中,可以为某个属性指定一个值,作为它的默认值。
通常,我们把基于某个类生成的对象称为这个类的实例。
注意:方法尽管定义在类中,但执行方法的主体是对象。
继承是指基于现有的类创建新类时,新类继承了现有类里的方法和属性。
一个子类的成员一般包括:
①由其父类继承的成员,包括属性和方法
②由子类自己定义的成员,包括属性和方法
继承可以使在一个父类所作的改动反映到它的所有子类上。
5.2 Visual
Foxpro基类简介
Visual FoxPro基类是系统内含的、并不存放在某个类库中。用户可以基于基类生成所需要的对象,也可以扩展基类创建自己的类。下表是Visual FoxPro基类的清单。
表5.1 Visual FoxPro基类
|
类名 |
含义 |
类名 |
含义 |
|
ActiveDoc |
活动文档 |
Lable |
标签 |
|
CheckBox |
复选框 |
Line |
线条 |
|
Column |
表格列 |
Listbox |
列表框 |
|
ComboBox |
组合框 |
OleControl |
OLE容器控件 |
|
CommandButton |
命令按钮 |
OleBoundControl |
绑定控件 |
|
CommandGroup |
命令按钮组 |
OptionButton |
选项按钮 |
|
Container |
容器 |
OptionGroup |
选项按钮组 |
|
Control |
控件 |
Page |
页 |
|
Custom |
定制 |
PageFrame |
页框 |
|
EditBox |
编辑框 |
ProjectHook |
项目挂钩 |
|
Form |
表单 |
Separator |
分隔符 |
|
Formset |
表单集 |
Shape |
形状 |
|
Grid |
表格 |
Spinner |
微调控件 |
|
Header |
(列)标头 |
Textbox |
文本框 |
|
HyperLink |
超级链接 |
Timer |
定时器 |
|
Image |
图像 |
Toolbar |
工具栏 |
每个Visual FoxPro基类都有自己的一套属性、方法和事件。当扩展某个基类创建用户自定义类时,该基类就是用户自定义类的父类,用户自定义类继承该基类中的属性、方法和事件。下表列出了Visual Foxpro基类的最小属性集。
表5.2 Visual FoxPro基类的最小属性集
|
属性 |
说明 |
|
class |
类名,当前对象基于哪个类生成 |
|
BaseClass |
基类名,当前类从哪个Visual FoxPro基类派生而来 |
|
ClassLibrary |
类库名,当前类放在哪个类库中 |
|
ParentClass |
父类名,当前类从哪个类直接派生而来 |
在编程方式里,对象的生成通常使用create object函数来完成。该函数的格式如下:
CREATE
OBJECT(<类名>[,<参数1 >,<参数2>,...])
函数基于指定的类生成一个对象,并返回对象的引用。通常,可以把函数返回的对象引用赋给某个变量,然后,通过这个变量来标识对象、访问对象属性以及调用对象方法。对象属性访问以及对象方法调用的基本格式如下:
<对象引用>.<对象属性>
<对象引用>.<对象方法>[(...)]
VisualFoxPro中的类可分为两中类型:容器类和控件类。相应地,可分别生成容器(对象)和(控件)对象。控件是一个可以以图形化的方式显示出来并能与用户进行交互的对象,控件通常被放在一个容器里。容器可以被认为是一种特殊的控件,它能包含其他的控件或容器,这里把对象称为那些被包容对象的父对象。下表列出了常用的容器及其所能包容的对象。
表5.3 Visual FoxPro常用的容器及其所能包容的对象
|
容器 |
能包容的对象 |
|
表单集 |
表单、工具栏 |
|
表单 |
任意控件以及页框、container对象、命令按钮组、选项按钮组、表格等对象 |
|
表格 |
列 |
|
列 |
标头和除表单集、表单、工具栏、定时器及其他列之外的任意对象 |
|
页框 |
页 |
|
页 |
任意控件及Container对象、命令按钮组、选项按钮组、表格等对象 |
|
命令按钮组 |
命令按钮 |
|
选项按钮组 |
选项按钮 |
|
Container对象 |
任意控件以及页框、命令按钮组、选项按钮组、表格等对象 |
在对象的嵌套层次关系中,要引用其中的某个对象,也需要指明对象在嵌套层次中的位置。这是经常用到如下表所列的几个属性或关键字。
表5.4 容器层次中的对象应用属性或关键字
|
属性或关键字 |
引用 |
|
parent |
当前对象的直接容器对象 |
|
This |
当前对象 |
|
ThisForm |
当前对象所在表单 |
|
ThisFormSet |
当前对象所在的表单集 |
这里parent是对象的一个属性,属性值为对象引用,后面三个是关键字,只能用在方法代码和事件代码中。
事件是由系统预先定义而由用户或系统发出的动作。事件作用于对象,对象识别事件并作出相应的反应。事件可以由系统引发,也可以由用户引发。
与方法集可以无限扩展不同,事件集是固定的。用户不能定义新的事件。下表列出了Visual Foxpro基类的最小事件集。
表5.5 Visual
FoxPro基类的最小事件集
|
事件 |
说明 |
|
Init |
当对象生成时引发 |
|
Destroy |
当对象从内存中释放时引发 |
|
Error |
当方法或事件代码出现运行错误时引发 |
事件代码既能在事件引发时执行,也可以像方法一样被显式调用。比如,在产生一个表单对象oForm时,系统会自动执行init事件代码,但用户也可以在随后用下面的命令显示调用该表单对象的init事件代码:oForm.Init
每个对象识别并处理属于自己的事件。但这个原则不适合于命令按钮组和选项按钮组。在命令按钮组或选项按钮组中,如果为按钮组编写了某事件代码,而组中某个按钮没有与该事件相关联的代码,那么当这个按钮的事件引发时,将执行组事件代码。
5.3创建和运行表单
创建表单一般由两种途径:(表单文件.scx,表单备注文件.sct)
l
利用表单向导创建表单(表单向导,一对多表单向导)
l 利用向导创建单表的表单
l 利用向导创建一对多表单
l 利用表单设计器创建表单
(1)利用表单向导创建表单(表单向导,一对多表单向导)
法1:项目管理器/文档/表单/