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

下载本文档

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

文档简介

1、第五章 程序设计基础,5 .1 程序设计概述 5 .2 结构化程序设计 5 .3 面向对象的程序设计基础,2,本 章 重 点,结构化程序设计 顺序、选择、循环 过程和函数 面向对象的程序设计 类和对象 属性、方法、事件,3,结构化程序设计,到,面向对象程序设计 OOP,两种程序设计方法,1本质:功能设计 2方法:自顶向下、功能分解,从外部功能上模拟客观世界 3开发过程:从“做什么”到“如何做” 4优点:系统结构性强、便于设计和理解 5缺点:维护困难,4,面向对象的程序设计方法 方法:基于问题对象的自底向上的功能综合,从内部结构上模拟客观世界 开发过程:从“用什么做”到“要做什么” 优点 以对象

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

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

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

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

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

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

8、其它对象的父对象,容器类与控件类,16,VFP的29个基类,1-20为标准类(控件)(控件箱中带) 兰色字:容器类,其余为非容器类(控件类),17,容器类,18,基类的最小属性集,19,基类的最小事件集,20,三、处理对象,创建对象: 基类 定义的子类 用户子定义类 方式: 编程 可视化开发工具设计,对象,21,容器类:包含了一个“容器”基类 控件类:包含了一个“控件”基类 基于它们均可生成对象 VFP中主要以表单(或表单集)为最高容器层,其它基类对象可以在其中生成,成为被表单(或表单集)包容的对象;层层相生,层层包容,最终形成表单(或表单集)的对象群体。 一个面向对象的程序就是由一组相关的对

9、象群体以及它们的属性、事件、方法集合而成的整体。,22,层次体系示意图,表 单 集,表 单,容 器,控 件,23,1.引用对象,分类 绝对引用和相对引用 何时要引用对象 当要设置或取得对象的某个属性的值时 当要执行对象的某个方法事件时 容器层次体系 容器与容器中的控件是上下层次的关系 一个应用程序的最高层次是各种活动表单或表单集,最低层次是一个非容器类控件对象或是一个不包含任何控件的容器类对象,24,表单集“表单集1”(该对象的Name属性为FormSet1)中包含2个表单“Form1”和“Form2”;表单“Form1”中包含2个文本框、1个选项按钮组、1个页框;页框中包含2个选项卡式页面P

10、age1和Page2;页面“Page1”中包含1个表格“Grid1”;表格中包含2个列控件对象;列控件又包括标头和文本框控件。,25,绝对引用:从容器的最高层次引用对象,给出对象的绝对地址 例:表单Form1对象:FormSet1.Form1 表格的第一列中的文本框Text1对象: FormSet1.Form1.Pageframe1.page1.column1.Text1 注意!引用时按层次关系指明关联对象名称,并用“.”隔开,绝对引用,26,相对引用:在容器层次中相对于某个容器层次的引用 相对引用通常运用于某个具体对象的事件处理代码或方法程序代码中,即在某个容器对象的事件处理代码或方法程序中

11、对所包容的对象的引用,引用时可以直接使用其对象名 相对引用时,所涉及到的一些关键字(表5-5) 例:在文本框Text1中引用表单Form1: THISFORM 或 THIS.PARENT,相对引用,27,相对引用对象时所用的关键字,28,2.设置对象属性,每个对象都有属性,可以对对象设置属性 属性可以在设计时设置也可在运行时设置,但也有一些属性是只读的。 设计时修改属性在“属性”窗口中进行 程序代码中,用以下语法进行设置 引用对象 . 属性 = 值 例:绝对引用 FormSet1.Form1.Text1.Value=DATE() FormSet1.Form1.Text1.ForeColor=R

12、GB(0,0,0) FormSet1.Form1.Text1.BackColor=RGB(192,192,192) FormSet1.Form1.Text1.FontName=“黑体”,29,引用一个对象的多个属性和方法(重要) 如:with formset1.form1.text1 (点不能放在此处) .Value=DATE() .ForeColor=RGB(0,0,0) .BackColor=RGB(192,192,192) .FontName=“黑体” endwith 引用容器中的多个对象: 如:With Thisform .txtXh.backcolor=rgb(128,0,0) .t

13、xtXm.backcolor=rgb(0,128,0) Endwith,30,3. 调用对象的方法程序,方法程序是对象能够执行的一个操作,是和对象相联系的过程 调用语法 引用对象.方法程序 1.释放表单:Thisform.release 2.显示表单Form1,并将焦点设置在文本框Text2上: FormSet1.Form1.show FormSet1.Form1.Text2.SetFocus 3.有返回值的方法程序以圆括号结尾,如 ApplicationObject.Quit() 4.如有参数传递给方法程序,该参数应放在括号中.,31,方法实际上就是对象的内部过程或函数,每个类型的对象都有它

14、自己的方法集。例如在命令按钮对象中,调用Move方法可以移动按钮的位置。与事件不同的是,方法可以由用户进行扩展。 表单对象的常用方法 : Refresh-重画表单和控件,刷新表单中的所有值 Show-显示表单 Hide-隐藏表单 Release-从内存中释放表单,32,4. 对象对事件的响应,事件是对象识别的一个动作,用户可以编写相应的代码对此动作进行响应 若对象的某个事件没有相关的程序代码,则该事件发生时,对象不会发生任何操作. VFP对象事件集合是固定的 用户不能创建新的VFP对象事件. 事件一般是由用户的交互方式触发的,如单击或双击鼠标,按下键盘上的键,也有些是被系统触发的. 在某事件没

15、有发生时,用户可以显式地调用与该事件相关的过程. 如语句: this.Pmand1.click,33,四、相关事件,每个对象都有与之相关的事件集合。对于已创建的多个对象,用户根据需要可以为某个或某些事件配置相应的事件处理代码,使得应用程序在运行过程中根据所发生的事件作出相应的处理,34,1. 核心事件,核心事件集(表5-6),基类的事件集合是固定的,不能进行扩充。每个类都可识别固定的默认事件集合,它的最小事件集包括Init、Destroy和Error事件.,教材表5-6列出了Visual FoxPro中的核心事件集,这些事件适用于大多数的对象,35,表5-6 核心事件集,36,在实际应用中,控

16、件对象一般都被包含在容器对象中,如命令按钮、文本框包含在表单中,页面包含在页框中等,那么当用户单击命令按钮时,是命令按钮的Click事件被触发,还是表单的Click事件被触发,或者是两个对象的Click事件都被触发? 实际上,当某事件发生时,只有与事件相关联的最里层对象识别该事件,更高层的容器不识别这个事件。因此当用户单击命令按钮时,只有该命令按钮的Click事件被触发,而包含命令按钮的容器表单,则不识别这个Click事件。即使该命令按钮没有与Click事件相关联的事件代码,而表单有自己的Click事件代码,也不会执行表单的事件代码。,2. 容器层次和类层次中的事件,37,例如:在图所示的表单

17、中有一个命令按钮,表单设置了Click事件和DblClick事件的处理代码;命令按钮仅设置了Click事件的处理代码,那么当用户单击命令按钮时,不会触发表单的Click事件,38,对于表格控件来说,表格包含列控件,列控件又包含标头和文本框控件。当事件发生时,只有与事件相关联的最里层对象识别该事件,更高层的容器不识别该事件,如图所示,39,例外:对于选项按钮组与命令按钮组来说,组中个别按钮如果没有编写事件处理代码,则当事件发生时将执行组事件的处理代码。例如,在如图所示的表单中有一个选项按钮组(设置Click事件处理代码),该选项按钮组中有二个选项按钮(选项按钮Option1有Click事件处理代

18、码而选项按钮Option2无Click事件处理代码),则当用户单击Option1时执行与之相关联的事件代码,不执行按钮组的Click事件处理代码,但当用户单击Option2时执行按钮组的Click事件处理代码。,40,基于事件驱动的编程技术不同于传统的过程化程序设计,程序的执行顺序不是在设计时确定的,而是取决于对象事件的顺序。有时一个用户动作只触发一个事件,而有些情况下会有多个事件接连发生,如包含多个对象的表单被启动运行的时候,这样的情况下,了解事件发生的顺序是很重要的,否则就无法确定该往哪个事件中写入怎样的代码。,3. 事件激发的顺序 表5-7,41,4. 常用事件 P157160,鼠标事件 键盘事件 表单事件 控件焦点事件 数据环境事件,42,五、事件驱动和事件循环,1.事件驱动 面向对象程序设计(OOP): 程序代码的编写是围绕各个对象进行的, 程序代码的执行则总是由对象某个事件的发生引起的. 即 OOP设计的应用程序: 其结构是由组成它的对象结构决定的, 其功能的实现是由各对象的事件

温馨提示

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

最新文档

评论

0/150

提交评论