第5章VFP语言基础-面向对象程序设计_第1页
第5章VFP语言基础-面向对象程序设计_第2页
第5章VFP语言基础-面向对象程序设计_第3页
第5章VFP语言基础-面向对象程序设计_第4页
第5章VFP语言基础-面向对象程序设计_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第5章VFP语言基础-面向对象程序设计第一页,共44页。 本 章 重 点结构化程序设计顺序、选择、循环过程和函数面向对象的程序设计类和对象属性、方法、事件2第二页,共44页。结构化程序设计到面向对象程序设计OOP两种程序设计方法 1本质:功能设计 2方法:自顶向下、功能分解,从外部功能上模拟客观世界 3开发过程:从“做什么”到“如何做” 4优点:系统结构性强、便于设计和理解 5缺点:维护困难3第三页,共44页。面向对象的程序设计方法方法:基于问题对象的自底向上的功能综合,从内部结构上模拟客观世界开发过程:从“用什么做”到“要做什么”优点以对象为中心的问题求解方法简化程序设计,更接近现实世界,可

2、降低开发和维护的费用提高程序代码的可重用性可以和各种模型自然的融合5.3 面向对象的程序设计基础4第四页,共44页。一、类和对象概述1 类: 所谓类(Class),就是一组具有相同结构、性质、共同操作特点及遵守相同规则的对象的集合。 它是对某种具有共同属性及其行为特征的对象群体的抽象描述。 对象:是类的一个实例(包含具体数据、过程定义)。5第五页,共44页。一、类和对象概述2类是静态概念,对象是动态概念 “类”定义了某类对象特征以及对象外观和行为的模板,它刻划了一组具有共同特性的对象群体 “对象”则是基于某种类所创建的一个实例在OOP中,类就像是一个模板,对象都是基于这个模板生成的:类定义了对

3、象所具有的属性、事件和方法,从而决定了该类对象的属性和它的行为。Visual FoxPro系统为用户提供29个基类6第六页,共44页。基类:VFP系统提供的内部定义的类,可用于用户定义子类的基础子类:是以其它类(已有的)定义为起点,为某一种对象所建立的新类。子类将继承任何对父类所做的修改用户自定义类:与基类相似,由用户自己定义,也可用于派生子类,但无可视化表示形式类7第七页,共44页。继承性(inheritance)子类沿用父类特征的能力如果父类特征发生改变,则子类将继承这些新特征多态性(polymorphism)一些关联的类包含同名的方法程序,但方法程序的内容可以不同相同的操作作用于多种类型

4、的对象上获得不同的结果,增强系统的灵活性、维护性和扩充性特性8第八页,共44页。封装性 (encapsulation)说明了包含和隐藏对象信息的能力高内聚,低耦合抽象性(abstraction)提取一个类或对象与众不同的特征,而不对该类或对象的所有信息进行处理特性9第九页,共44页。对象(Object)是类的实例。每个对象都具有描述它特征的属性,以及附属于它的行为。对象把事物的属性和行为封装在一起,是一个动态的概念。对象是面向对象编程的基本元素,是“类”的具体实例。每个对象都具有属性及与之相关的事件和方法 在VFP中,包含在应用程序中的表单及各种控件都是对象。对象是包含数据和代码的实体。在程序

5、设计中,用属性、事件和方法来说明对象,属性就是对象的数据内容,事件和方法则是对象中包含的代码。对象(Object)10第十页,共44页。属性(Property) 用于定义对象的特征或某一方面的行为。每个对象都具有属性,属性表明了对象的一些基本特征,如大小、颜色、所处的位置等 属性构成: 一方面由对象所基于的类决定;另一方面也可为其定义新的属性对象的每一种属性,都是与其它对象加以区别的特性,都具有一定的含义,并可赋予一定的值。属性值:对象各属性的具体内容指定可设置内容:由用户(设计者)设置不可设置内容:只读11第十一页,共44页。事件(Event) 事件(Event) 是每个对象可用以识别和响应

6、的某些行为和动作。可编写相应的程序代码对事件动作进行响应。事件是一种预先定义好的特定动作,被用户行为或系统事件激活,每个对象都可以对相关事件的动作进行识别和响应。在多数情况下,事件是由用户的交互行为产生的。不同对象能够识别的事件内容是不一致的,在VFP中,事件集合是固定的(由系统指定),用户不能进行扩充。(即用户不能自己创建新事件) 12第十二页,共44页。方法(Method) 是对象能够执行的一个操作流程方法是与对象相关联的过程,也称方法程序方法程序有系统提供的,也可由用户根据需要自己创建VFP方法也均有名称标识,通过名称使用例:release方法程序也往往与对象事件相关联方法实际上就是对象

7、的内部过程(函数),每个类型的对象都有它自己的方法集。例如在命令按钮对象中,调用Move方法可以移动按钮的位置。与事件不同的是,方法可以由用户进行扩展。 13第十三页,共44页。二、基类基类:VFP系统提供的内部定义的类子类:引用VFP基类或其他子类建立的新类用户自定义类:与基类相似,由用户自定义,但无可视的表示形式VFP基类派生子类子类子类14第十四页,共44页。 容器类(Container classes)是能够包容其它类的基类容器类对象可以包含其它对象容器类对象可以作为所包含的对象的父对象 控件类(Control classes)不能够包容其它类,但可以放在容器类中的基类控件类对象可以包

8、含在容器中不能作为其它对象的父对象容器类与控件类15第十五页,共44页。VFP的29个基类1标签9列表框17线条25自定义2文本框10微调框18形状26控件3编辑框11表格19容器27工具栏4命令按钮12图像20分隔符*28表单5命令按钮组13计时器21选项按钮*29表单集6选项按钮组14页框22标头*7复选框15 OLE容器控件23表格列*8组合框16 OLE绑定型控件24页面*1-20为标准类(控件)(控件箱中带)兰色字:容器类,其余为非容器类(控件类)16第十六页,共44页。容器类容器类能包含的对象容器任意控件类工具栏任意控件类、页框、容器表单集表单、工具栏表单页框、任意控件类、容器、自

9、定义对象表格表格列表格列标头以及除表单、表单集、工具栏、计时器和其它列以外的任意对象页框页面页面任意控件类、容器和自定义对象命令按钮组命令按钮选项按钮组选项按钮17第十七页,共44页。基类的最小属性集属性说明Class该类属于何种类型Baseclass该类由何种基类派生而来(Form,commandbutton或custom等)Classlibrary该类从属于何种类库parentclass对象所基于的类。若该类直接由VFP基类派生而来,则Parentclass属性值与baseclass属性值相同18第十八页,共44页。基类的最小事件集事 件说 明Init当对象创建时激活Destroy当对象从

10、内存中释放时激活error当类中的事件或方法程序运行中发生错误时激活19第十九页,共44页。三、处理对象创建对象: 基类 定义的子类 用户子定义类方式: 编程 可视化开发工具设计 对象20第二十页,共44页。容器类:包含了一个“容器”基类控件类:包含了一个“控件”基类 基于它们均可生成对象 VFP中主要以表单(或表单集)为最高容器层,其它基类对象可以在其中生成,成为被表单(或表单集)包容的对象;层层相生,层层包容,最终形成表单(或表单集)的对象群体。 一个面向对象的程序就是由一组相关的对象群体以及它们的属性、事件、方法集合而成的整体。21第二十一页,共44页。层次体系示意图表单集表单容器控件2

11、2第二十二页,共44页。1.引用对象分类绝对引用和相对引用何时要引用对象当要设置或取得对象的某个属性的值时当要执行对象的某个方法事件时容器层次体系容器与容器中的控件是上下层次的关系一个应用程序的最高层次是各种活动表单或表单集,最低层次是一个非容器类控件对象或是一个不包含任何控件的容器类对象23第二十三页,共44页。 表单集“表单集1”(该对象的Name属性为FormSet1)中包含2个表单“Form1”和“Form2”;表单“Form1”中包含2个文本框、1个选项按钮组、1个页框;页框中包含2个选项卡式页面Page1和Page2;页面“Page1”中包含1个表格“Grid1”;表格中包含2个列

12、控件对象;列控件又包括标头和文本框控件。24第二十四页,共44页。绝对引用:从容器的最高层次引用对象,给出对象的绝对地址例:表单Form1对象:FormSet1.Form1 表格的第一列中的文本框Text1对象: 注意!引用时按层次关系指明关联对象名称,并用“.”隔开绝对引用25第二十五页,共44页。相对引用:在容器层次中相对于某个容器层次的引用相对引用通常运用于某个具体对象的事件处理代码或方法程序代码中,即在某个容器对象的事件处理代码或方法程序中对所包容的对象的引用,引用时可以直接使用其对象名相对引用时,所涉及到的一些关键字(表5-5)例:在文本框Text1中引用表单Form1: THISF

13、ORM 或 THIS.PARENT相对引用26第二十六页,共44页。关键字含义ActiveForm当前活动表单ActivePage当前活动表单中的活动页面ActiveControl当前活动表单中具有焦点的控件PARENT该对象的直接容器(父容器)THIS该对象THISFORM包含该对象的表单THISFORMSET包含该对象的表单集相对引用对象时所用的关键字 27第二十七页,共44页。 2.设置对象属性每个对象都有属性,可以对对象设置属性属性可以在设计时设置也可在运行时设置,但也有一些属性是只读的。设计时修改属性在“属性”窗口中进行程序代码中,用以下语法进行设置 引用对象 . 属性 = 值例:绝

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=“黑体”28第二十八页,共44页。引用一个对象的多个属性和方法(重要)如:with (点不能放在此处) .Value=DATE() .ForeColor=RGB(0,0,0) .BackColor=RGB(192,192,192) .FontName=“黑体”endwith引用容器中的多个

15、对象:如:With Thisform .txtXh.backcolor=rgb(128,0,0) .txtXm.backcolor=rgb(0,128,0)Endwith 29第二十九页,共44页。3. 调用对象的方法程序方法程序是对象能够执行的一个操作,是和对象相联系的过程调用语法引用对象.方法程序1.释放表单:Thisform.release2.显示表单Form1,并将焦点设置在文本框Text2上: FormSet1.Form1.show FormSet1.Form1.Text2.SetFocus 3.有返回值的方法程序以圆括号结尾,如 ApplicationObject.Quit() 4

16、.如有参数传递给方法程序,该参数应放在括号中.30第三十页,共44页。 方法实际上就是对象的内部过程或函数,每个类型的对象都有它自己的方法集。例如在命令按钮对象中,调用Move方法可以移动按钮的位置。与事件不同的是,方法可以由用户进行扩展。 表单对象的常用方法 :Refresh重画表单和控件,刷新表单中的所有值Show显示表单Hide隐藏表单Release从内存中释放表单31第三十一页,共44页。4. 对象对事件的响应事件是对象识别的一个动作,用户可以编写相应的代码对此动作进行响应若对象的某个事件没有相关的程序代码,则该事件发生时,对象不会发生任何操作.VFP对象事件集合是固定的用户不能创建新

17、的VFP对象事件.事件一般是由用户的交互方式触发的,如单击或双击鼠标,按下键盘上的键,也有些是被系统触发的.在某事件没有发生时,用户可以显式地调用与该事件相关的过程. 如语句: this.Pmand1.click32第三十二页,共44页。四、相关事件每个对象都有与之相关的事件集合。对于已创建的多个对象,用户根据需要可以为某个或某些事件配置相应的事件处理代码,使得应用程序在运行过程中根据所发生的事件作出相应的处理33第三十三页,共44页。1. 核心事件核心事件集(表5-6) 基类的事件集合是固定的,不能进行扩充。每个类都可识别固定的默认事件集合,它的最小事件集包括Init、Destroy和Err

18、or事件. 教材表5-6列出了Visual FoxPro中的核心事件集,这些事件适用于大多数的对象34第三十四页,共44页。表5-6 核心事件集事件事件被激发后的动作Load表单或表单集被加载到内存中 Unload从内存中释放表单或表单集 Init创建对象Destroy从内存中释放对象 Click用户使用主鼠标按钮单击对象 Dblclick用户使用主鼠标按钮双击对象 Rightclick用户使用辅鼠标按钮单击对象 Gotfocus对象接收焦点,由用户动作引起Lostfocus对象失去焦点,由用户动作引起Keypress用户按下或释放键 Mousedown当鼠标指针停在一个对象上时,用户按下鼠标

19、按钮 Mousemove用户在对象上移动鼠标 Mouseup当鼠标指针停在一个对象上时,用户释放鼠标按钮 interactivechange以交互方式改变对象值 programmaticchange以编程方式改变对象值 35第三十五页,共44页。 在实际应用中,控件对象一般都被包含在容器对象中,如命令按钮、文本框包含在表单中,页面包含在页框中等,那么当用户单击命令按钮时,是命令按钮的Click事件被触发,还是表单的Click事件被触发,或者是两个对象的Click事件都被触发? 实际上,当某事件发生时,只有与事件相关联的最里层对象识别该事件,更高层的容器不识别这个事件。因此当用户单击命令按钮时,

20、只有该命令按钮的Click事件被触发,而包含命令按钮的容器表单,则不识别这个Click事件。即使该命令按钮没有与Click事件相关联的事件代码,而表单有自己的Click事件代码,也不会执行表单的事件代码。2. 容器层次和类层次中的事件36第三十六页,共44页。 例如:在图所示的表单中有一个命令按钮,表单设置了Click事件和DblClick事件的处理代码;命令按钮仅设置了Click事件的处理代码,那么当用户单击命令按钮时,不会触发表单的Click事件37第三十七页,共44页。 对于表格控件来说,表格包含列控件,列控件又包含标头和文本框控件。当事件发生时,只有与事件相关联的最里层对象识别该事件,更高层的容器不识别该事件,如图所示38第三十八页,共44页。例外:对于选项按钮组与命令按钮组来说,组中个别按钮如果没有编写事件处理代码,则当事件发生时将执行组事件的处理代码。例如,在如图所示的表单中有一个选项

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论