1、第七章第七章 面向对象程序设计面向对象程序设计7.1 类与对象的基本概念 VFP不仅支持传统的编程技术,也支持面向对象的程序设计(Object-Oriented Programming,简称OOP),并在程序语言方面作了强有力的扩充。传统的编程技术在设计程序时,必须考虑程序代码的全部流程,而面向对象的编程技术在设计程序时,考虑的是如何创建对象以及创建什么样的对象,并利用对象来简化程序设计。面向对象的程序设计是一种全新的程序设计方法,它引入了许多新的概念,提出了比传统程序设计更高级的面向对象的编程语言,这些概念和语言使得开发应用程序更容易、效率更高。7.1.1 对象 对象对象是构成程序的基本单位
2、和运行实体,是由属性及可施加在这些属性上的操作(方法)所构成的统一体。现实世界的事物均可抽象为对象。在VFP中,对象又可区分为控件和容器两种。控件控件是表单上显示数据和执行操作的基本对象。容器容器是可以容纳其它对象的对象,下表列出了VFP的容器及可能包含的对象。容容 器器能包含的对象能包含的对象表单集表单集表单,工具栏表单,工具栏表单表单页框,表格,任何控件页框,表格,任何控件页框页框页面页面页面页面表格,任何控件表格,任何控件表格表格表格列表格列表格列表格列标头对象,除表单、表单集、工具栏、计时器和列对象以外的对象标头对象,除表单、表单集、工具栏、计时器和列对象以外的对象选项按钮组选项按钮组
3、选项按钮选项按钮命令按钮组命令按钮组命令按钮命令按钮工具栏工具栏任何控件,页框,容器任何控件,页框,容器Container容器容器任何控件任何控件7.1.2 类1.1.类的概念类的概念所谓类(Class)就是一组对象的属性和行为特征的抽象描述,或者说类是具有共同属性、共同操作性质的对象的集合。类是已经定义了的关于对象的特征、外观和行为的模板。在表单控件工具栏中,每个控件按钮都代表一个类,用其中某个按钮在表单上创建的一个控件就是一个对象。可以看出:类是对象的定义。类规定并提供了对象具有的属性、事件和方法程序。对象通过类来产生。对象是类的实例。类是抽象的,对象是具体的 2.2.基类基类(basec
4、lass(baseclass)基类是VFP预先定义的类,在“新建类”对话框的“派生于”下拉列表中,包含了全部基类,从基类中可以派生出子类或创建对象。VFP6的基类,是VFP6系统定义的最基本的类。VFP系统为用户提供了29个基类。基类可作为用户定义类的基础。用户可从基类来创建新类,并增添自己需要的功能。基类又可分为容器类(container classes)和控件类(control classe)。容器类可以容纳其他对象,并允许访问所包含的对象。控件类不能容纳其他对象,它没有容器类灵活。由控件类创造的对象是不能单独使用和修改的,它只能作为容器类中的一个元素,通过由容器类创造的对象修改或使用。3
5、.3.子类子类(subcIass(subcIass)通常把从已有的类派生出的新类称为子类,已有的类称为父类。例如从基类来创建新类时,基类是父类,新类是子类。新类不但具有父类的全部属性和方法,而且允许对已有的属性和方法进行修改。4 4、类库、类库(classlibrary(classlibrary)类库可用来存储以可视方式设计的类,其文件扩展名为.VCX。一个类库通常可容纳多个子类,这些子类允许由不同的基类派生。5 5、类的特性、类的特性 封装性封装性 类的封装性是指类的内部信息对用户是隐蔽的。在类的引用过程中,类的封装性是指类的内部信息对用户是隐蔽的。在类的引用过程中,用户只能看到封装界面的信
6、息,而类的内部信息如内部数据结构、对象的用户只能看到封装界面的信息,而类的内部信息如内部数据结构、对象的方法程序和属性代码等则是隐蔽的,只有程序的开发者才了解类的内部信方法程序和属性代码等则是隐蔽的,只有程序的开发者才了解类的内部信息。例如对一个命令按钮设置息。例如对一个命令按钮设置CaptionCaption属性时,不必了解标题字符串是如属性时,不必了解标题字符串是如何存储的。封装隐藏了不必要的复杂性,使得:何存储的。封装隐藏了不必要的复杂性,使得:有利于对复杂对象的管理。由于隐藏了对象内部细节,使用户能集有利于对复杂对象的管理。由于隐藏了对象内部细节,使用户能集中精力来使用对象的特性。中精
7、力来使用对象的特性。有利于程序的安全性。隐藏对象信息能防止代码不慎受到破坏。有利于程序的安全性。隐藏对象信息能防止代码不慎受到破坏。继承性继承性 继承性包括以下内容:继承性包括以下内容:对象能自动继承创建它的类的功能。对象能自动继承创建它的类的功能。子类能自动继承父类的功能。子类能自动继承父类的功能。对一个类的改动能自动反映到它的所有子类中。对一个类的改动能自动反映到它的所有子类中。继承性不只节省了用户的时间和精力,同时也减少了维护代码的难度。继承性不只节省了用户的时间和精力,同时也减少了维护代码的难度。有了类的继承,在编写程序时,可以把具有普遍意义的类通过继承引用到有了类的继承,在编写程序时
8、,可以把具有普遍意义的类通过继承引用到程序中,从而减少了代码的编写工作。程序中,从而减少了代码的编写工作。7.2 Visual Foxpro 基类 7.2.17.2.1 Visual FoxPro基类基类容器类控件类创建容器类对象控件类对象创建7.2.27.2.2 生成基于类的对象格式:=CreateObject(,)说明:其中的类名可以是基类,也可以是用户定义 的子类。功能:生成以为名的类派生的对象,并可用 对象引用名在此后引用该对象。【例7.2】从基类“Form”派生对象Form1,并显示。Form1=CreateObject(Form)Form1.Show()格式:.AddObject(
9、,)说明:向容器对象中添加控件对象。按照默认设置,添加进 去的对象是不可见的,即控件的Visibile属性为.F.。【例7.3】在例7.2中的表单中添加一个按钮对象“Cmd1”。Form1.AddObject(Cmd1,CommandButton)Form1.Cmd1.Visible=.T.7.3 Visual FoxPro中的对象7.3.17.3.1 属性、事件和方法1、属性对象的属性用来表示它的外观,以命令按钮为例,其位置、大小、颜色、以及该按钮面上是显示文字还是图形等状态,都可用属性来表示。设置对象的属性要打开属性窗口,打开属性窗口可采用如下方法:选定该对象快捷菜单中的属性命令。选定显示
10、菜单的属性命令。属性窗口中显示了当前对象的属性、事件和方法程序,并允许用户更改属性,定义事件代码和修改方法程序。2 2、事件、事件 事件(Event)泛指由用户或系统触发的一个特定的操作。例如若用鼠标单击命令按钮,将会触发一个Click事件。一个对象可以有多个事件,但每个事件都是由系统预先规定的。一个事件对应于一个程序,称为事件过程。事件驱动工作方式事件驱动工作方式事件一旦被触发,系统马上就去执行与该事件对应的过程。待事件过程执行完毕后,系统又处于等待某事件发生的状态,这种程序执行方式明显地不同于面向过程的程序设计,称为应用程序的事件驱动工作方式。事件包括事件过程和事件触发方式两方面。事件过程
11、的代码应该事先编写好。事件触发方式可细分为3种:由用户触发,例如单击命令按钮事件;由系统触发如计时器事件,将自动按设定的时间间隔发生;由代码引发,例如用代码来调用事件过程。打开代码编辑窗口为事件打开代码编辑窗口为事件(或方法程序或方法程序)编写代码编写代码。3、方法方法(Method)也称为方法程序,它与一段程序代码相对应,能使对象执行一个功能操作。方 法功 能 说 明Refresh重新绘制一个表单或控件,并刷新它的所有值Release从内存中释放表单集或表单SetFocus使控件得到焦点Cls清除表单或屏幕对象(_Screen)中的图形和文本Circle表单或屏幕对象(_Screen)中绘制
12、圆或椭圆。该方法的参数为Circle(半径,圆心X坐标,圆心Y坐标,纵横比)例例 1 1 在表单上画一个正圆和一个椭圆,单击擦除将圆擦除,单击取消,将表单从内存中清除。例例 2 2 制作“报时”程序。MessageBox():人机对话函数 格式:MessageBox(,)函数功能:在屏幕上弹出一个指定格式的对话框。对话框类型由按钮个数+对话框中显示的图标+默认按钮三部分组合而成。例:IF MessageBox(“真的退出吗?”,4+48+0,”确认”)=6 7.3.27.3.2 对象属性、方法的引用1对象的包容层次当一个容器包含一个对象时,称被包含的对象是容器的子对象,而容器称为该对象的父对象
13、。Form1 Label1 CommandGroup1 Command1 Command2 2 2、对象的引用、对象的引用通常用以下引用关键字开头通常用以下引用关键字开头 THISFORMSET 表示当前表单集 THISFORM 表示当前表单 THIS 表示当前对象 引用格式:引用格式:引用关键字后跟一个圆点,再写出被引用对象或者对象的属性,事件或方法程序。例如:THIS.Caption&本对象(表单或控件)的Caption属性 THISFORM.Cls&本表单的Cls方法程序允许多级引用,但要逐级引用。允许多级引用,但要逐级引用。THISFORM.Commandl.Caption THIS.
14、Commandl.Click 控件也可引用包含它的容器控件也可引用包含它的容器 格式为:Control.Parent 其中Control表示控件,Parent表示容器。例如THIS.Parent.Commandl.Caption,3编程设置对象的属性值一个对象的属性可以在设计时通过属性窗口进行设置,也可以在编写事件代码中通过赋值语句进行设置。格式:.=功能:将对象引用名所指向对象的属性设置为表达式的值。例:THIS.FontBold=.T.&本对象文本以粗体显示THIS.Parent.Caption=time()4调用对象的方法或触发对象的事件程序调用格式:.(参数表)如:调用当前表单的Release方法关闭表单的语句为:ThisForm.Release
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。