VFP第5章(下)面向对象程序设计郁洪波.ppt_第1页
VFP第5章(下)面向对象程序设计郁洪波.ppt_第2页
VFP第5章(下)面向对象程序设计郁洪波.ppt_第3页
VFP第5章(下)面向对象程序设计郁洪波.ppt_第4页
VFP第5章(下)面向对象程序设计郁洪波.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

第5章 对象模型和事件模型,2,VFP支持两种开发模型:面向过程和面向对象 结构化程序设计(面向过程) 本质:功能设计(以功能为主进行设计) 方法:自顶向下、功能分解。 优点:系统结构性强、便于设计和理解 缺点:但各模块间关系紧密,一旦功能需求变动导致维护困难,6.1 面向对象的程序设计概述,3,6.1.1 面向对象的程序设计方法(OOP) 方法:把世间万物都看成对象。从内部结构上模拟客观世界。 每个对象都有自己的属性和方法。能对消息做出反应。 程序就是一组对象,对象之间通过发送消息互相通知做什么。,6.1 面向对象的程序设计概述,4,面向过程和面向对象的区别: 以计算机模拟猫捉老鼠的过程为例。 面向过程的做法: 程序员必须通过编程告诉计算机猫抓老鼠的每一个具体动作,如匍匐,加速,咬住等动作。 面向对象的做法: 程序员给猫发一个消息“老鼠出现了” 。猫就会自动去抓老鼠。 猫如何抓老鼠的动作还是得由程序员编码来实现,只不 过代码的组织方式大不相同。面向对象的方法更符合人 的思维习惯。,6.1 面向对象的程序设计概述,5,6.1.2 类和对象,6.1.2 类和对象的区别 类(CLASS,类型):定义了对象特征以及对象外观和行为的模板,它刻划了一组具有共同特性的对象。 对象:是类的一个实例 OOP中,程序由一个或多个类组成,在程序运行时视需要创建该类的各个对象(实例) 类是静态概念,对象是动态概念 对象是基于某种类所创建的实例,包括了数据和过程。 例:猫可以定义为一个类,具有颜色,品种属性,具有 抓老鼠的方法。 某个猫对象:白色波斯猫。,6.1 面向对象的程序设计概述,6,1. 类 基类:VFP系统提供的内部定义的类,可提供给用户用于自定义类的基础(例如:表单、控件) 子类:是以其它类定义为起点,为某一种对象所建立的新类。子类将继承任何对父类所做的修改,6.1 面向对象的程序设计概述,7,对象(Object) 每个对象都具有属性及与之相关的事件和方法,6.1 面向对象的程序设计概述,8,属性(Property) : 定义对象的特征 对象的属性由对象所基于的类决定 如猫的颜色,品种 方法(Method) :是对象能够执行的一个操作 方法是与对象相关联的过程,也称方法程序 方法可由用户自己创建 例:SetColor()设置猫的颜色。(主人将它染发了) 事件(Event) :对象可对该事件做出反应 可编写相应的代码,对动作进行响应 事件可由用户的动作、程序代码或系统产生 例:对于老鼠出现这个事件,猫能做出反应。,6.1 面向对象的程序设计概述,9,6.2 基 类,VFP 基类,派生,子类,子类,子类,10,6.2.1 VFP的基类,VFP提供的所有基类见p151 表5-1 说明: 该表中加*部分的类,只能使用,不能为它们创建子类。 基类可以分为容器类和控件类两种类型。 容器类,见表5-2,其余的都是控件类。,11,基类的最小事件集(重要),激发顺序一般为:Init Error Destroy,12,基类的最小属性集,13,容器类(Container classes)是包容其他类的基类 容器可以包含其它对象 容器可以作为所包含的对象的父对象 允许访问包含的对象 控件类(Control classes)是可以包含在容器类中的基类 控件对象可以包含在容器中 不能作为其它对象的父对象 VFP的对象可分为容器对象和控件对象,6.2.2 容器类与控件类,14,6.3.1 引用对象 6.3.2 设置对象的属性 6.3.3 调用对象的方法程序 6.3.4 对象对事件的响应,6.3 处理对象,15,6.3.1 引用对象,何时要引用对象 当要设置或取得对象的某个属性的值时 当要执行对象的某个方法事件时 容器层次体系 容器与容器中的控件是上下层次的关系 一个应用程序的最高层次是 _screen或_VFP,最低层次是一个非容器类控件或是一个不包含任何控件的容器类控件 例如:_screen.caption=“我的表单”,6.3 处理对象,16,层次体系示意图,表 单 集,表 单,容 器,控 件,17,表单集“表单集1”(该对象的Name属性为FormSet1)中包含2个表单“Form1”和“Form2”;表单“Form1”中包含2个文本框、1个选项按钮组、1个页框;页框中包含2个选项卡式页面Page1和Page2;页面“Page1”中包含1个表格“Grid1”;表格中包含2个列控件对象;列控件又包括标头和文本框控件。,18,绝对引用 从容器的最高层次引用对象,给出对象的绝对地址 例:引用表单Form1对象:FormSet1.Form1 引用表格的第一列中的文本框Text1对象: FormSet1.Form1.Pageframe1.Page1.Grid1.Column1.Text1 相对引用 在容器层次中相对于某个容器层次的引用 相对引用通常运用于某个对象的事件处理代码或方法程序代码中,即在某个容器对象的事件处理代码或方法程序中对所包容的对象的引用,引用时可以直接使用其对象名 相对引用时,所涉及到的一些关键字(P153表5-5) 类似于文件系统中的绝对路径和相对路径,19,相对引用对象时所用的关键字(重要),20,6.3.2 设置对象属性,每个对象都有属性,可以为对象设置属性 属性可以在设计时设置也可在运行时设置(如caption) 设计时修改属性在“属性”窗口中进行 程序代码中,用以下语法进行设置 对象名称 . 属性 = 值 例:绝对引用 FormSet1.Form1.Text1.Value=DATE() FormSet1.Form1.Text1.ForeColor=RGB(0,0,0)黑 FormSet1.Form1.Text1.FontName=“黑体”,21,引用一个对象的多个属性和方法(重要) 如: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) .txtXm.backcolor=rgb(0,128,0) Endwith,22,6.3.3 调用对象的方法程序,方法程序是对象能够执行的一个操作,是和对象相联系的过程 调用语法 . 例1.释放表单:Thisform.release 例2.显示表单Form1,并将焦点设置在文本框Text2上: FormSet1.Form1.show FormSet1.Form1.Text2.SetFocus 有返回值的方法程序以圆括号结尾,23,6.3.4 对象对事件的响应,事件是对对象识别的一个动作,可以编写相应的代码对此动作进行响应 用户不能用其他的程序设计方法产生其事件,但可以调用与这些事件相关的过程 常用的事件类 鼠标事件 键盘事件 表单事件 控件焦点事件 数据环境事件 常用事件和方法的详细讲解留到设计表单时再讲。,24,6.4 相关事件,核心事件集(表5-6),6.4.1 核心事件,这些事件适用于大多数的对象(控件),25,表6-6 核心事件集,26,6.4 相关事件,问题:容器和它包含的控件都设置了某事件的响应代码,系统如何处理这个事件。 为控件编写事件的处理代码时,应注意两条原则: (1)容器不处理与所包含的控件相关联的事件 (2)如果没有与控件相关联的事件代码,Visual FoxPro将在类层次的更高层上检查是否有与此事件相关联的控件代码,6.4. 2 容器层次事件和类层次中的事件,27,6.4 相关事件,6.4. 2 容器层次事件和类层次中的事件,例外:对于选项按钮组与命令按钮组来说,组中个别按钮如果没有编写事件处理代码,则当事件发生时将执行组事件的处理代码。例如,在如图6-4所示的表单中有一个选项按钮组(设置Click事件处理代码),该选项按钮组中有二个选项按钮(选项按钮Option1有Click事件处理代码而选项按钮Option2无Click事件处理代码),则当用户单击Option1时执行与之相关联的事件代码,不执行按钮组的Click事件处理代码,但当用户单击Option2时执行按钮组的Click事件处理代码。 (p128 图6-4 按钮组中的事件代码.scx),28,6.4 相关事件,问题:程序的运行伴随着一系列的事件的产生。如何查看这些事件的发生顺序。 P156 表5-7 vfp中事件顺序,交互事件未列出 *对于表单,事件的激发顺序为: Load Init Activate Destroy Unload,6.4. 3 事件激发的顺序,29,6.4.4 常用的事件,鼠标事件 MouseMove事件 Click事件 RightClick事件 DblClick事件,30,2. 键盘事件,KeyPress事件,31,3. 改变控件内容的事件,InteractiveChange事件 在使用鼠标或键盘更改控件的值时发生,32,4. 焦点事件,焦点(Focus)用以指出当前被操作的对象 GotFocus事件 用任何方法使对象接受到焦点时发生 PROCEDURE Object.GotFocus LPARAMETERS nIndex LostFocus事件 当某个对象失去焦点时发生,33,5. 表单事件,Load事件(表单和表单集) 创建对象之前发生 Load事件发生在Activate和GotFocus事件之前 UnLoad事件(表单和表单集) 在对象被释放时发生 Unload事件发生在Destroy事件和所有包含的对象被释放之后,34,7. 其他事件,Timer事件 (用于计时器控件) 当经过Interval属性中指定的毫秒数时发生 Init事件 在创建对象时发生 Destroy事件 在释放一个对象实例时发生 Error事件 当某方法运行出错时发生,35,6.4.5 事件驱动和事件循环,事件驱动程序代码的执行总是由某个事件的发生而引发,执行顺序无法预料,而面向过程则是顺序执行。Message-based,event-driven,也是面向对象编程模型采用的方法。 *利用VFP进行应用程序设计时,必须创建事件循环(event loop) READ EVENTS命令建立事件循环 CLEAR EVENTS命令终止事件循环 若陷入了死循环,可以按ESC键强制中断程序的运行。,36,6.5 方法,方法(程序)是对象能够执行的一个操作,由系统提供默认的实现代码。 用户可以调用这些方法程序。也可以为这些方法编写自己的实现代码。 使用方法程序可以减少我们写代码的数量。,37,常用的方法,1. AddItem方法 在组合框或列表框中添加一个新数据项,并且可以指定数据项索引 2. RemoveItem方法 从组合框或列表框中移去一项 3. Release方法 Release 方法是从内存中释放表单集或表单。 其调用语法为:thisform.Release,38,常用的方法,4. Hide/Show方法 Hide 方法是通过把 Visible 属性设置为“假”(.F.),隐藏表单、表单集或工具栏。 其调用语法为:Object.Hide 表单被隐藏后,用户不可访问它的控件,但是这些控件仍然可用,并且可以在代码中访问它们。虽然这些控件是不可见的,但这些保存在不可见表单中的控件仍然保留自己的 Visible 属性设置值。 5. Quit方法 Quit方法是结束一个VFP 实例,返回到创建VFP实例的应用程序。 其调用语法为:ApplicationObject.Quit( ),39,常用的方法,6. SetALL方法 SetAll 方法是为容器对象中的所有控件或某类控件指定一个属性设置。 其调用语法为:Container.SetAll(cProperty, Value , cClass) 参数cProperty要设置的属性。Value属性的新值,Value 的数据类型取决于要设置的属性。cClass指定类名,40,小结,OOP的意思:面向对象程序设计 类和对象的区别: 对象具有:属性、方法、事件。 基类分为两种类型:容器类和控件类 基类的最小事件集和最小属性集 相对引用时常用的关键字 事件激发的顺序 建立事件循环和中止事件循环 的命令,41,作业,自己做在书上!,42,考过的等级考试考题,1. 类( class )是面向对象程序设计的核心。类具有许多特点,如抽象性、封装性、继承性等,其中 _ 是指包含和隐藏对象信息(如内部数据结构和代码)的能力,使操作对象的内部复杂性与应用程序隔离开来。,43,2. Visual FoxPro系统提供的基类都有最小事件集(Destroy 、Error、 Init)。从事件的激发顺序看, 最小事件集中 事件是最后激发的。 3. 在事件代码中相对引用当前表单集的关键字是 _ 。 。,44,4. 假定表单(frm2)上有一个文本框对象text1和一个命令组按钮对象cg1,命令按钮组cg1包含cd1 和cd2两个命令按钮。如果要在cd1命令按钮的某个方法中访问文本框对象text1 的Value属

温馨提示

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

评论

0/150

提交评论