1
面向对象的程序设计第 八 章
Visual FoxPro 6.0
2
对象 ( Object):
现实世界中的事物均可抽象为对象,对象是构成程序的基本单位和运行实体。
类 ( Class):
定义了对象特征以及对象外观和行为的模板,它刻划了一组具有共同特性的对象。
属性,对象的特征。
方法,对象能够执行的一个操作,是和对象相联系的过程。
事件,由对象识别的一个动作。
8.1 面向对象设计的基本概念
(OOP,object-oriented programming)
3
圆柱体纸圆柱体 大理石圆柱体木圆柱体圆柱体,材质,纸质圆柱体,材质,大理石圆柱体,材质,木质圆柱体,材质,(无 )
对象属性类属性类是对象的抽象描述;
对象是具体的,它是类的实例。
类对象
4
面向对象程序设计正是通过对类、子类和对象等的设计来体现的,类是面向对象程序设计技术的核心。
优点
以对象为中心的问题求解方法简化程序设计,更接近现实世界,可降低开发和维护的费用
提高程序代码的可重用性
可以和各种模型自然的融合
5
基类,系统本身提供的内部定义的类称为基类,可用于自定义类的基础。
子类,是以其它类定义为起点,为某一种对象所建立的新类。
子类将继承任何对父类所做的修改。
用户自定义类,与基类相似,由用户定义,可用于派生子类。
类库,存储类的文件,每一个以可视方式设计的类都存储在一个类库中。类库文件的扩展名,VCX 。
8.2 类
6
Visual FoxPro 的基类复选框 列 * 命令按钮 命令按钮组组合框 容器 控制 自定义编辑框 表单 表单集 表格标头 * 图象 标签 线条列表框 OL E 绑定 OL E 容器 选项按钮 *
选项组 页面 * 页框 分隔符形状控制 微调控制 文本框 计 时器工具栏注:从下述 Visual FoxPro 基类中,可以派生子类或创建对象,
,*”表示这些类是父容器的集成部分,在类设计器中不能子类化
7
类的特征:
封装性,( encapsulation)
隐藏了类中对象的内部数据或操作细节,只看到外表信息。
继承性,( inheritance)
任何类都可以从其它已有的类中派生,新类保持了父类中的行为和属性,但增加了新的功能。体现了面向对象设计方法的共享机制。
多态性,( polymorphism)
相同的操作可作用于多种类型的对象上,并获得不同的结果。
抽象性,( abstraction)
提取一个类或对象与众不同的特征,而不对该类或对象的所有信息进行处理。
8
容器类 (Container classes)是包容其他类的基类容器可以包含其它对象容器可以作为所包含的对象的父对象允许访问包含的对象控件类 (Control classes)是可以包含在容器类中的基类控件对象可以包含在容器中不能作为其它对象的父对象类的分类:
9
Visual FoxPro 的容器类容器 能够包含的对象命令按钮组 命令按钮容器 任意控件自定义 任意控件、页框、容器和自定义对象表单集 表单、工具栏表单 页框、任意控件、容器或自定义对象表格列标头对象以及除表单、表单集、工具栏、计时器和其他列对象以外的任意对象表格 表格列选项按钮组 选项按钮页框 页面页面 任意控件、容器和自定义对象项目 文件、服务程序对象工具栏 任意控件、页框和容器
10
对象 是类的一个实例,包括了数据和过程。具有所在类所定义的全部属性和方法。
基于类的不同类型,VFP的对象可分为 容器对象 和 控件对象 。
每个对象都具有属性及与之相关的事件和方法。
8.3 对象
11
表单集控件控件选项组表单页框页面表格列控件在容器分层结构中引用对象必须提供对象的地址,即指明它相对于容器分层结构的关系。
选项 1
选项 2
对象的引用
12
引用对象时,对象与对象之间、对象与属性之间需用分隔符,进行分隔。
绝对引用,从容器的最高层引用对象,给出对象的绝对地址。如,form1.text1.value。
相对引用,在容器层次中相对于某个容器层次的引用。如:
thisform,text1.value
13
相对引用对象时所用的关键字包含该对象的表单集THISFORMSET
包含该对象的表单THISFORM
该对象THIS
该对象的直接容器PARENT
当前活动表单中具有 焦点 的控件ActiveControl
当前活动表单中的活动页面ActivePage
当前活动表单ActiveForm
含义关键字
14
定义对象的特征或某一方面的行为。
设置属性,
可视化设计,在对象的属性窗口中进行代码设计,引用对象,属性 = 值例:
FormSet1.Form1.Text1.Value=DATE()
FormSet1.Form1.Text1.ForeColor=RGB(0,0,0)黑
FormSet1.Form1.Text1.BackColor=RGB(192,192,192)灰
FormSet1.Form1.Text1.FontName=“黑体,
8.4 属性 (Property)
15
引用一个对象的多个属性和方法
with formset1.form1.text1
.Value=DATE()
.ForeColor=RGB(0,0,0)
.FontName=“黑体”
endwith
引用容器中的多个对象
With Thisform
.txtXh.backcolor=rgb(128,0,0)
.txtXm.backcolor=rgb(0,128,0)
Endwith
16
属性 说明
C l a s s 该类属于何种类型
B a s e C l a s s 该类有何种基类派生而来
C l a s s L i br a r y 该类从属于哪种类库
P a r e n t C l a s s 对象所基于的类
Visual FoxPro 的基类的最小 属性 集合
17
8.5事件和方法程序事件 (Event):是由对象识别的一个动作
事件是预先定义的特定动作,用户不能创建新的事件
事件可由用户、程序代码或系统激活
可编写相应的代码,对事件进行响应
例,click,dblclick,keypress
18
VFP中的核心事件和触发时间,
事件 触发时间
L oa d 当表单或表单集被加载时产生
U nl oa d 当表单或表单集从内存中释放时产生
Ini t 创建对象时产生
D e s t roy 从内存中释放对象时产生
Cl i c k 用户在对象上单击鼠标时产生
D bl Cl i c k 用户在对象上双击鼠标时产生
Ri g ht Cl i c k 用户在对象上单击鼠标右键时产生
G e t F oc us 对象得到焦点时产生
L os t F oc us 对象失去焦点时产生
K e yP re s s 用户按键时产生
M ous e D ow n 在对象上按下鼠标
M ous e U p 在对象上松开鼠 标
M ous e M ove 在对象上移动鼠标
19
Visual FoxPro 的基类的最小事件集合事件 说明
I n it 当对象创建时激活
D e s tr oy 当对象从内存中释放时激活
E r r or 当类中的事件或方法过程中发生错误时激活
20
若对象已经创建,可以在应用程序的任何地方调用该对象方法程序。
调用方法程序的格式,引用对象,方法程序方法 (Method):是对象能够执行的一个操作
方法是与对象相关联的过程,也称方法程序
方法可由用户自己创建
例,release
21
名称 调用语法 功能
A d d O b j ec t
O b j ect,A d d O b j ect
(cN am e,cCl as s [,? ])
在运行时向容器对象中添加对象
Cl ear O b j ect,Cl ear 清除组合框或列表框控件中的内容
H i d e O b j ect,H i d e
通过把 V i s i b l e 属性设置为,F,,来隐藏表单、表单集或工具栏
Sh o w O b j ect,Sh o w
把 V i s i b l e 属性设置为,T,,显示并激活一个表单或表单集,并确定表单的显示模式
Ref res h O b j ect,Ref res h 重画表单或控件,并刷新所有值
Rel eas e O b j ect,Rel eas e 从内存中释放表单或表单集
Q u i t O b j ect,Q u i t
结束一个 V FP 6,0 实例,返回到创建它的应用程序。
VFP 中的常用方法
22
一,选择题
1,对象的属性是指 ( ) 。
A) 对象所具有的性质和特点 B) 对象所具有的动作状态
C) 对象所具有的行为特征 D) 对象所具有的继承性
2,以下关于事件的说法中不正确的是 ( ) 。
A) 事件是预先定义好的特定动作 B) 事件由用户或系统激活
C) 事件包括键盘事件和鼠标事件
D.) 事件可由系统预先定义,也可由用户自己扩充
3,下列关于方法的说法中错误的是 ( ) 。
A) 方法是对象能执行的一个操作 B) 事件必须通过相应的方法来实现
C.) 方法不可以独立于事件存在 D) 事件的方法是可扩充的
4,下列属于方法名的是 ( ) 。
A) Value B) Click C) MouseUp D) Refresh
5,下列对对象的引用,属于相对引用的是 ( ) 。
A) Forml.ComBox1 B) Form1.Commandl.Capion
C) THIS.Value D) Forml.Name
6,可从 ( ) 基类中创建对象或派生类 。
A) 容器类和控件类 B) 表单 C) 工具栏 D) A,B,C都正确
23
7.所有基类都能识别的事件是( )。
A) Click B) Load C) InteractiveChange D.) Init
8,关于容器类对象,下列说法中正确的是 ( ) 。
A) 只能是表单或表单集
B.) 能包容其他对象,并且可以分别处理这些对象
C) 必须由基类 Container派生得到
D) 能包容其他对象,但不可以分别处理这些对象
9,子类或对象沿用父类的属性,方法和事件代码的特性称为 ( ) 。
A) 继承性 B) 多态性 C) 封装性 D) 抽象性
10,类的继承特性使得用户定义的子类 ( ) 。
A) 复制了父类的属性,事件和方法,以及缺省值
B) 在自动继承父类的一切信息的基础上可以加以扩充
C) 在父类修改的时候,修改结果立即在子类中生效
D) A,B,C都正确
24
11,可从 ( ) 基类中创建对象或派生类 。
A) 容器类和控件类 B) 表单 C) 工具栏 D) A,B,C都正确
25
OOP程序设计练习,
创建表单文件 sample,定义一个窗口,在窗口中显示欢迎信息
创建表单文件 sample1,在窗口中同时显示订单表和订单明细表的内容,利用表之间的关系,使得在订单表中移动记录时,能直接显示订单明细表中的相应记录。