5章 面向对象的程序设计方法(24学时)

 

一、【教学目标】

1.理解面向对象的概念。

2.了解foxpro的基类、容器与控件和事件的基本内容。

3.理解并掌握创建与管理表单的方法,表单设计器的使用方法,常用表单控件的使用方法。

4.掌握用菜单设计器创建菜单,快速菜单创建菜单。

5.掌握用报表向导设计报表,掌握用快速报表设计报表。

二、【重点和难点】

重点:

1.表单的创建与管理表单方法,各种控件的创建与编程方法。

2.用菜单设计器创建菜单,用快速菜单创建菜单。

3.报表设计器的使用方法,报表设计的基本方法与步骤。

难点:

1.表单各种控件的创建与编程方法。

2.菜单系统的建立方法。

3.报表的布局,分组报表的设计,分栏报表的设计。

三、【学法指导】

1.        VFP系统支持两种工作方式:交互方式、程序方式。学习程序方式,可大量减少重复劳动,达到事半功倍的目的。

2.        面向对象程序设计是VFP的重要组成部分,是进行系统设计的重点,要在教师的指导下,加强上机练习,循序渐进地学好。

3.        面向对象程序设计方法是本章的重中之重,要加强学习,勤于思考。

4.        通过本章的学习,有助于提高分析问题、解决问题的能力。

四、【教学要点】

51 面向对象的概念

5.1.1对象与类

1)对象

客观世界里的任何实体都可以被看作是对象,对象可以是具体的物,也可以指某些概念,每个对象都有自己的行为。

使用面向对象的方法解决问题的首要任务就是要从客观世界里识别出相应的对象,并抽象出为解决问题所需要的对象属性和对象方法。属性用来表示对象的状态,方法 用来描述对象的行为。在面向对象的方法里,对象被定义为由属性和相关方法组成的包。方法是描述对象行为的过程,是对当某个对象接受了某个消息后多采用的一系列操作的描述。

2)类

类是一类对象关系的性质描述。这些对象具有相同种类的属性及方法。类好比是一类对象的模板,有了类定义后,基于类就可以生成这类对象中的任何一个对象,这些对象虽然采用相同的属性来表示状态,但它们在属性上的取值完全可以不同。在类的定义中,可以为某个属性指定一个值,作为它的默认值。

通常,我们把基于某个类生成的对象称为这个类的实例。

注意:方法尽管定义在类中,但执行方法的主体是对象。

5.1.2子类与继承

继承是指基于现有的类创建新类时,新类继承了现有类里的方法和属性。

一个子类的成员一般包括:

①由其父类继承的成员,包括属性和方法

②由子类自己定义的成员,包括属性和方法

继承可以使在一个父类所作的改动反映到它的所有子类上。

5.2 Visual Foxpro基类简介
5.2.1 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>,...])
   
函数基于指定的类生成一个对象,并返回对象的引用。通常,可以把函数返回的对象引用赋给某个变量,然后,通过这个变量来标识对象、访问对象属性以及调用对象方法。对象属性访问以及对象方法调用的基本格式如下:

<对象引用>.<对象属性>

<对象引用>.<对象方法>[(...)]

5.2.2容器与控件
    VisualFoxPro
中的类可分为两中类型:容器类和控件类。相应地,可分别生成容器(对象)和(控件)对象。控件是一个可以以图形化的方式显示出来并能与用户进行交互的对象,控件通常被放在一个容器里。容器可以被认为是一种特殊的控件,它能包含其他的控件或容器,这里把对象称为那些被包容对象的父对象。下表列出了常用的容器及其所能包容的对象。

 

5.3  Visual FoxPro常用的容器及其所能包容的对象

容器

能包容的对象

表单集

表单、工具栏

表单

任意控件以及页框、container对象、命令按钮组、选项按钮组、表格等对象

表格

标头和除表单集、表单、工具栏、定时器及其他列之外的任意对象

页框

任意控件及Container对象、命令按钮组、选项按钮组、表格等对象

命令按钮组

命令按钮

选项按钮组

选项按钮

Container对象

任意控件以及页框、命令按钮组、选项按钮组、表格等对象

    在对象的嵌套层次关系中,要引用其中的某个对象,也需要指明对象在嵌套层次中的位置。这是经常用到如下表所列的几个属性或关键字。  

5.4  容器层次中的对象应用属性或关键字

属性或关键字

引用

parent

当前对象的直接容器对象

This

当前对象

ThisForm

当前对象所在表单

ThisFormSet

当前对象所在的表单集

这里parent是对象的一个属性,属性值为对象引用,后面三个是关键字,只能用在方法代码和事件代码中。

5.2.3事件

事件是由系统预先定义而由用户或系统发出的动作。事件作用于对象,对象识别事件并作出相应的反应。事件可以由系统引发,也可以由用户引发。

与方法集可以无限扩展不同,事件集是固定的。用户不能定义新的事件。下表列出了Visual Foxpro基类的最小事件集。

5.5  Visual FoxPro基类的最小事件集

事件

说明

Init

当对象生成时引发

Destroy

当对象从内存中释放时引发

Error

当方法或事件代码出现运行错误时引发

事件代码既能在事件引发时执行,也可以像方法一样被显式调用。比如,在产生一个表单对象oForm时,系统会自动执行init事件代码,但用户也可以在随后用下面的命令显示调用该表单对象的init事件代码:oForm.Init

每个对象识别并处理属于自己的事件。但这个原则不适合于命令按钮组和选项按钮组。在命令按钮组或选项按钮组中,如果为按钮组编写了某事件代码,而组中某个按钮没有与该事件相关联的代码,那么当这个按钮的事件引发时,将执行组事件代码。

5.3创建和运行表单

5.3.1 创建表单的方法

创建表单一般由两种途径:(表单文件.scx,表单备注文件.sct)

l         利用表单向导创建表单(表单向导,一对多表单向导)

l         利用向导创建单表的表单

l         利用向导创建一对多表单

l         利用表单设计器创建表单

 

(1)利用表单向导创建表单(表单向导,一对多表单向导)

1:项目管理器/文档/表单/