




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章(2)面向对象程序设计2/6/20231
本章要点新概念的引入类对象的属性事件方法2/6/20232结构化程序设计本质:功能设计方法:自顶向下、功能分解,从外部功能上模拟客观世界开发过程:从“做什么”到“如何做”例:演示!求1~100之和。(“做什么”)S=0forI=1to100s=s+Iendfor?s(“如何做”)优点:系统结构性强、便于设计和理解缺点:维护困难2/6/20233结构化程序设计SP到面向对象程序设计OOP2/6/202341.面向对象的程序设计方法方法:基于问题对象的自底向上的功能综合,从内部结构上模拟客观世界开发过程:从“用什么做”到“要做什么”表单、对象(“用什么做”)事件过程(“要做什么”)优点以对象为中心的问题求解方法简化程序设计,更接近现实世界,可降低开发和维护的费用提高程序代码的可重用性可以和各种模型自然的融合设计出程序的基本单位:类和对象利用类的继承性设计系统的功能5.3面向对象的程序设计概述在VFP中表单是“面向对象”可视化设计的主要体现之所在2/6/202355.3.1类和对象类:所谓类(Class),就是一组具有相同结构、性质、共同操作特点及遵守相同规则的对象的集合。它是对某种具有共同属性及其行为特征的对象群体的抽象描述。对象:是类的一个实例(包含具体数据、过程定义)类是静态概念,对象是动态概念“类”定义了某类对象特征以及对象外观和行为的模板,它刻划了一组具有共同特性的对象群体“对象”则是基于某种类所创建的一个实例在OOP中,类就像是一个模板,对象都是基于这个模板生成的:类定义了对象所具有的属性、事件和方法,从而决定了该类对象的属性和它的行为。VisualFoxPro系统为用户提供29个基类2/6/202361.类基类:VFP系统提供的内部定义的类,可用于用户定义子类的基础子类:是以其它类(已有的)定义为起点,为某一种对象所建立的新类。子类将继承任何对父类所做的修改用户自定义类:与基类相似,由用户自己定义,也可用于派生子类,但无可视化表示形式2/6/20237我们大家都熟悉被称为电视机的这一类对象,它们有许多相同的属性:荧光屏、电源开关、音量调节和频道选择。如果进一步考虑到,尽管都是电视机,但是一些是黑白的,一些是彩色的,一些还可以遥控,那么你已经了解到了类和继承。电视机发展到今天,其功能在不断地完善,但所有的基本特征仍然存在,而且它们仍然具有相同的工作方式。换句话说,新的型号继承了基本型号的所有特征,而且增加了一些它自己的特征。基本型号可以称为基类,而新的型号就称为子类。
(通过类可以简化应用程序设计)2/6/20238类的特点继承性(inheritance)子类沿用父类特征的能力如果父类特征发生改变,则子类将继承这些新特征多态性(polymorphism)一些关联的类包含同名的方法程序,但方法程序的内容可以不同相同的操作作用于多种类型的对象上获得不同的结果,增强系统的灵活性、维护性和扩充性封装性(encapsulation)说明了包含和隐藏对象信息的能力高内聚,低耦合抽象性(abstraction)提取一个类或对象与众不同的特征,而不对该类或对象的所有信息进行处理2/6/20239VFP提供了两种类型的29个基类。我们今后将使用其中的一部分。其次,我们可以建立这些基类的子类。当子类被建立的时候,它们继承了父类的所有属性、事件和方法。然后,我们可以在子类增加或改变属性和方法,以使它们满足特定的需要。
在VFP中,类的使用是非常灵活的,你完全可以不设计新的类,仅使用VFP提供的基类也能满足要求。2/6/2023102.对象(Object)
对象(Object)是类的实例。每个对象都具有描述它特征的属性,以及附属于它的行为。对象把事物的属性和行为封装在一起,是一个动态的概念。对象是面向对象编程的基本元素,是“类”的具体实例。每个对象都具有属性及与之相关的事件和方法
在VFP中,包含在应用程序中的表单及各种控件都是对象。对象是包含数据和代码的实体。在程序设计中,用属性、事件和方法来说明对象,属性就是对象的数据内容,事件和方法则是对象中包含的代码。VFP对象大多数是可见的,也有一些特殊的对象是不可见的。2/6/202311
在VisualFoxPro应用程序中,系统窗口和用户自定义的窗口都可以被看成是一个具体对象。具有以下属性和行为特征:.窗口的标题及窗口的大小;.窗口的前景和背景颜色;.窗口中所显示信息的内容及格式;.窗口中提供了哪些控件;.窗口中每个控件在窗口的位置;.窗口中每个控件的大小;.窗口中的控件应如何操作。另外,在VisualFoxPro应用程序中,命令按钮也可以看成是对象,具有以下属性和行为特征:.命令按钮在窗口的位置;.命令按钮的标题及命令按钮的大小;.按动命令按钮进行什么操作。2/6/2023123.属性(Property)用于定义对象的特征或某一方面的行为
每个对象都具有属性,属性表明了对象的一些基本特征,如大小、颜色、所处的位置等
属性构成:一方面由对象所基于的类决定;另一方面也可为其定义新的属性对象的每一种属性,都是与其它对象加以区别的特性,都具有一定的含义,并可赋予一定的值。
属性值对象各属性的具体内容指定
可设置内容:由用户(设计者)设置不可设置内容:只读2/6/202313
属性是属于某一个类的,不能独立于类而存在。派生出的新类将继承基类和父类的全部属性。在VisualFoxPro系统中,各种对象拥有70多个属性。对象的属性值可以在设计对象时定义,也可以在对象运行时进行设置VFP属性均有名称标识,通过名称使用在VFP中,用户可以根据需要进行属性扩充。(即用户可自己创建新属性)2/6/202314命令按钮属性说明Caption显示在按钮上的标题Name按钮对象的名称FontName按钮的字体名ForeColor前景颜色对象的有些属性值可修改设计阶段运行阶段(show)对象的有些属性值不可修改分类只读(不可以修改:baseclass)单值(直接输入:caption)二值(下拉列表中选择,也可以双击)多个值(下拉列表中选择:borderstyle)2/6/2023154.事件(Event)是由对象识别的一个动作
事件(Event)是每个对象可用以识别和响应的某些行为和动作。
可编写相应的程序代码对事件动作进行响应
事件是一种预先定义好的特定动作,被用户行为或系统事件激活,每个对象都可以对相关事件的动作进行识别和响应。在多数情况下,事件是由用户的交互行为产生的。
不同对象能够识别的事件内容是不一致的
在VFP中,事件集合是固定的(由系统指定),用户不能进行扩充。(即用户不能自己创建新事件)
2/6/202316
在VisualFoxPro系统中,对象可以响应50多种事件。多数情况下,事件是通过用户的操作行为引发的,当事件发生时,将执行包含在事件过程中的全部代码。可编写相应的代码,对动作进行响应事件可由用户的动作、程序代码或系统产生VFP的对象事件集合是固定的,用户不能创建新的事件VFP事件均有名称标识例:click2/6/2023175.方法(Method)是对象能够执行的一个操作流程方法是与对象相关联的过程,也称方法程序方法程序有系统提供的,也可由用户根据需要自己创建VFP方法也均有名称标识,通过名称使用例:release方法程序也往往与对象事件相关联
方法实际上就是对象的内部过程(函数),每个类型的对象都有它自己的方法集。例如在命令按钮对象中,调用Move方法可以移动按钮的位置。与事件不同的是,方法可以由用户进行扩展。
2/6/2023185.3.2基类基类:VFP系统提供的内部定义的类子类:引用VFP基类或其他子类建立的新类用户自定义类:与基类相似,由用户自定义,但无可视的表示形式VFP基类派生子类子类子类2/6/2023191VFP的基类(P151表5-1、表5-2)1标签9列表框17线条自定义2文本框10微调框18形状控件3编辑框11表格19容器工具栏4命令按钮12图像20分隔符*表单5命令按钮组13计时器选项按钮*表单集6选项按钮组14页框标头*7复选框15OLE容器控件表格列*8组合框16OLE绑定型控件页面*1-20为标准类(控件)(控件箱中带)兰色字:容器类,其余为非容器类(控件类)2/6/202320基类的最小事件集事件说明Init当对象创建时激活Destroy当对象从内存中释放时激活error当类中的事件或方法程序运行中发生错误时激活2/6/202321基类的最小属性集属性说明Class该类属于何种类型Baseclass该类由何种基类派生而来(Form,commandbutton或custom等)Classlibrary该类从属于何种类库parentclass对象所基于的类。若该类直接由VFP基类派生而来,则Parentclass属性值与baseclass属性值相同2/6/202322容器类(Containerclasses)是能够包容其它类的基类容器类对象可以包含其它对象容器类对象可以作为所包含的对象的父对象控件类(Controlclasses)不能够包容其它类,但可以放在容器类中的基类控件类对象可以包含在容器中不能作为其它对象的父对象
基于类的不同类型,VFP的对象可分为容器对象和控件对象容器对象可以作为它所包容的对象的父对象2容器类与控件类2/6/202323容器类容器类能包含的对象容器任意控件类工具栏任意控件类、页框、容器表单集表单、工具栏表单页框、任意控件类、容器、自定义对象表格表格列表格列标头以及除表单、表单集、工具栏、计时器和其它列以外的任意对象页框页面页面任意控件类、容器和自定义对象命令按钮组命令按钮选项按钮组选项按钮2/6/2023245.3.3处理对象创建对象:
基类:定义的子类:对象用户子定义类:方式:
编程
可视化开发工具设计2/6/202325容器类:包含了一个“容器”基类控件类:包含了一个“控件”基类
基于它们均可生成对象
VFP中主要以表单(或表单集)为最高容器层,其它基类对象可以在其中生成,成为被表单(或表单集)包容的对象;层层相生,层层包容,最终形成表单(或表单集)的对象群体。一个面向对象的程序就是由一组相关的对象群体以及它们的属性、事件、方法集合而成的整体。2/6/202326层次体系示意图表单集表单容器控件2/6/202327
如何处理对象?
1引用对象分类绝对引用相对引用何时要引用对象当要设置或取得对象的某个属性的值时当要执行对象的某个方法事件时容器层次体系容器与容器中的控件是上下层次的关系一个应用程序的最高层次是各种活动表单或表单集,最低层次是一个非容器类控件对象或是一个不包含任何控件的容器类对象2/6/202328
表单集“表单集1”(该对象的Name属性为FormSet1)中包含2个表单“Form1”和“Form2”;表单“Form1”中包含2个文本框、1个选项按钮组、1个页框;页框中包含2个选项卡式页面Page1和Page2;页面“Page1”中包含1个表格“Grid1”;表格中包含2个列控件对象;列控件又包括标头和文本框控件。2/6/202329绝对引用从容器的最高层次引用对象,给出对象的绝对地址例:表单Form1对象:FormSet1.Form1表格的第一列中的文本框Text1对象:FormSet1.Form1.Pageframe1.page1.column1.Text1注意!引用时按层次关系指明关联对象名称,并用“.”隔开相对引用在容器层次中相对于某个容器层次的引用相对引用通常运用于某个具体对象的事件处理代码或方法程序代码中,即在某个容器对象的事件处理代码或方法程序中对所包容的对象的引用,引用时可以直接使用其对象名相对引用时,所涉及到的一些关键字(P153表5-5)例:在文本框Text1中引用表单Form1:
THISFORM或THIS.PARENT2/6/202330关键字含义ActiveForm当前活动表单ActivePage当前活动表单中的活动页面ActiveControl当前活动表单中具有焦点的控件PARENT该对象的直接容器(父容器)THIS该对象THISFORM包含该对象的表单THISFORMSET包含该对象的表单集相对引用对象时所用的关键字
2/6/2023312设置对象属性每个对象都有属性,可以对对象设置属性属性可以在设计时设置也可在运行时设置,但也有一些属性是只读的。设计时修改属性在“属性”窗口中进行程序代码中,用以下语法进行设置引用对象.属性=值例:绝对引用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=“黑体”2/6/202332引用一个对象的多个属性和方法(重要)如:withformset1.form1.text1
(点不能放在此处)
.Value=DATE()
.ForeColor=RGB(0,0,0)
.BackColor=RGB(192,192,192)
.FontName=“黑体”endwith引用容器中的多个对象:如:WithThisform .txtXh.backcolor=rgb(128,0,0) .txtXm.backcolor=rgb(0,128,0) Endwith2/6/2023333调用对象的方法程序方法程序是对象能够执行的一个操作,是和对象相联系的过程调用语法引用对象.方法程序1.释放表单:Thisform.release2.显示表单Form1,并将焦点设置在文本框Text2上:
FormSet1.Form1.show
FormSet1.Form1.Text2.SetFocus3.有返回值的方法程序以圆括号结尾,如ApplicationObject.Quit()4.如有参数传递给方法程序,该参数应放在括号中.也可以为对象的方法(新建)和事件自行编写方法程序代码,还可在自建的子类中扩展方法集(以后讲)2/6/202334
方法实际上就是对象的内部过程或函数,每个类型的对象都有它自己的方法集。例如在命令按钮对象中,调用Move方法可以移动按钮的位置。与事件不同的是,方法可以由用户进行扩展。
表单对象的常用方法
:Refresh重画表单和控制,刷新表单中的所有值Show显示表单Hide隐藏表单Release从内存中释放表单2/6/2023354对象对事件的响应事件是对象识别的一个动作,用户可以编写相应的代码对此动作进行响应(这样,当该对象的某个事件发生时,该事件的对应的程序代码将被执行)若对象的某个事件没有相关的程序代码,则该事件发生时,对象不会发生任何操作.VFP对象事件集合是固定的用户不能创建新的VFP对象事件.事件一般是由用户的交互方式触发的,如单击或双击鼠标,按下键盘上的键,也有些是被系统触发的.在某事件没有发生时,用户可以显式地调用与该事件相关的过程.如语句:this.Pmand1.click
将使事件代码被执行,但该事件并没有发生。2/6/202336常用对象事件鼠标事件键盘事件表单事件控件焦点事件数据环境事件2/6/2023375.3.4相关事件核心事件集(表5-6)1核心事件
每个对象都有与之相关的事件集合。对于已创建的多个对象,用户根据需要可以为某个或某些事件配置相应的事件处理代码,使得应用程序在运行过程中根据所发生的事件作出相应的处理基类的事件集合是固定的,不能进行扩充。每个类都可识别固定的默认事件集合,它的最小事件集包括Init、Destroy和Error事件.
教材表5-6列出了VisualFoxPro中的核心事件集,这些事件适用于大多数的对象2/6/202338表5-6核心事件集事件事件被激发后的动作Load表单或表单集被加载到内存中Unload从内存中释放表单或表单集Init创建对象Destroy从内存中释放对象Click用户使用主鼠标按钮单击对象Dblclick用户使用主鼠标按钮双击对象Rightclick用户使用辅鼠标按钮单击对象Gotfocus对象接收焦点,由用户动作引起Lostfocus对象失去焦点,由用户动作引起Keypress用户按下或释放键Mousedown当鼠标指针停在一个对象上时,用户按下鼠标按钮Mousemove用户在对象上移动鼠标Mouseup当鼠标指针停在一个对象上时,用户释放鼠标按钮interactivechange以交互方式改变对象值programmaticchange以编程方式改变对象值2/6/202339
在VFP面向对象程序设计中,程序就是由表单及各种控件组成的一个整体,包含在应用程序中的表单及各种控件都被称作对象:对象是该程序包含数据和代码的实体。在程序设计中,用属性、事件和方法来说明对象,属性就是对象的数据,事件和方法则是对象中包含的代码。
2/6/202340
在实际应用中,控件对象一般都被包含在容器对象中,如命令按钮、文本框包含在表单中,页面包含在页框中等,那么当用户单击命令按钮时,是命令按钮的Click事件被触发,还是表单的Click事件被触发,或者是两个对象的Click事件都被触发?实际上,当某事件发生时,只有与事件相关联的最里层对象识别该事件,更高层的容器不识别这个事件。因此当用户单击命令按钮时,只有该命令按钮的Click事件被触发,而包含命令按钮的容器——表单,则不识别这个Click事件。即使该命令按钮没有与Click事件相关联的事件代码,而表单有自己的Click事件代码,也不会执行表单的事件代码。2容器层次和类层次中的事件2/6/202341例如:在图6-2所示的表单中有一个命令按钮,表单设置了Click事件和DblClick事件的处理代码;命令按钮仅设置了Click事件的处理代码,那么当用户单击命令按钮时,不会触发表单的Click事件2/6/202342
对于表格控件来说,表格包含列控件,列控件又包含标头和文本框控件。当事件发生时,只有与事件相关联的最里层对象识别该事件,更高层的容器不识别该事件,如图6-3所示2/6/202343例外:对于选项按钮组与命令按钮组来说,组中个别按钮如果没有编写事件处理代码,则当事件发生时将执行组事件的处理代码。例如,在如图6-4所示的表单中有一个选项按钮组(设置Click事件处理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 往年药师试题及答案
- 2025年商务公司股权变更协议
- 2025年商场内部装修工程安全管理协议
- 2025年饭庄股东权益保护协议
- 2025年仓储设施租赁协议策划终止标准
- 2025年劳务合作策划管理协议
- 统筹推进教师教育能力提升的现状及总体形势
- 储备物资的高效配送与仓储创新
- 文化创新与社会需求的契合路径
- 高升专数学(文)一元一次方程应用题模拟试卷(2025年)
- 2025年中国振弦式应变计市场调查研究报告
- 上海市闵行区六校联考2023-2024学年高一下学期期末考试数学试题(解析版)
- GB/T 6516-2025电解镍
- 职业技术学院2024级工业互联网技术专业人才培养方案
- 2025年全国低压电工证(复审)考试笔试试题(300题)含答案
- 罗森加盟合同协议
- 榆林市煤炭资源整合实施方案
- 跨学科实践活动05 基于碳中和理念设计低碳行动方案(活动设计)-2024-2025学年九年级化学跨学科实践活动教学教学设计+设计(人教版2024)
- 2025年中考英语押题预测卷(徐州专用)(原卷版)
- 前程无忧测评题库
- 2025-2030中国马丁靴行业发展分析及发展前景与投资研究报告
评论
0/150
提交评论