《第五章程序设计基础对象PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第五章程序设计基础对象PPT讲稿.ppt(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第五章程序设计基础对象第五章程序设计基础对象第1页,共28页,编辑于2022年,星期三1、对象、对象(Object)n现实世界的实体现实世界的实体事、物、概念等,都统事、物、概念等,都统称为对象。在面向对象系统中一切成分都是称为对象。在面向对象系统中一切成分都是对象,大到整个系统、项目、数据库、表、对象,大到整个系统、项目、数据库、表、表单,小到窗口、控件都被视为对象。表单,小到窗口、控件都被视为对象。n 对象对象是一个逻辑实体,它包括是一个逻辑实体,它包括数据数据和完成和完成处理所需要的处理所需要的程序代码程序代码,是数据和代码的组,是数据和代码的组合。合。第2页,共28页,编辑于2022年
2、,星期三对象对象 对对象象是是一一个个封封装装了了属属性性、事事件件和和方方法法的的实实体体,对对对对象象的的操操作是通过对象的属性、事件和方法来完成。作是通过对象的属性、事件和方法来完成。n 属性描述了对象的静态特征;属性描述了对象的静态特征;n 事事件件是是由由对对象象识识别别的的动动作作,一一个个事事件件产产生生后后会会触触发发相相关关联联的的代代码码,每个对象都有特定的事件;每个对象都有特定的事件;n 方法,是对象固有的动作,也就是已经编写好了的代码。方法,是对象固有的动作,也就是已经编写好了的代码。第3页,共28页,编辑于2022年,星期三类类n “类类”源于日常生活中类别、分类概念
3、。同类实体具有相同的属性和行为源于日常生活中类别、分类概念。同类实体具有相同的属性和行为特征。类是对一组相似对象的共同抽象描述,它将该组对象所具有的共同特征。类是对一组相似对象的共同抽象描述,它将该组对象所具有的共同特征集中起来,用于说明该组对象的性质和能力。特征集中起来,用于说明该组对象的性质和能力。n 可以看出,可以看出,“类类”是将相同属性和行为特征的对象,提取共同属性和特征而是将相同属性和行为特征的对象,提取共同属性和特征而产生的,是对象抽象化的结果,是对象的蓝图和框架。产生的,是对象抽象化的结果,是对象的蓝图和框架。n 而而“对象对象”是类的具体实例是类的具体实例,它是将类所描述的共
4、同特征赋予具体实体而形成的。,它是将类所描述的共同特征赋予具体实体而形成的。因此,类与对象既有区别,又有联系,两者关系十分紧密。因此,类与对象既有区别,又有联系,两者关系十分紧密。n 所有对象的属性、事件和方法都是在定义类时被指定,由于类是定义了对象特征、外所有对象的属性、事件和方法都是在定义类时被指定,由于类是定义了对象特征、外观和行为的模板,所以对象由类生成,生成的对象也自然具有相同的属性、事件和方法。观和行为的模板,所以对象由类生成,生成的对象也自然具有相同的属性、事件和方法。例如,由复选框类、单选按钮类可以生成各种形式的复选框、单选按钮。例如,由复选框类、单选按钮类可以生成各种形式的复
5、选框、单选按钮。第4页,共28页,编辑于2022年,星期三类的特性类的特性n1封装性封装性n 封装实际上是一种信息隐藏技术。封装实际上是一种信息隐藏技术。封装就是指将对象的方法程序封装就是指将对象的方法程序和属性代码包装在一起。封装将操作对象的内部复杂性与应用程序的其和属性代码包装在一起。封装将操作对象的内部复杂性与应用程序的其它部分隔离开来。它部分隔离开来。n 例如,我们将电话的零部件和线路封装在电话的外壳里,这样使用例如,我们将电话的零部件和线路封装在电话的外壳里,这样使用户看不到电话内部线路的复杂性,只专心拨号、讲话、听音,从而也产户看不到电话内部线路的复杂性,只专心拨号、讲话、听音,从
6、而也产生用户对电话具有拨号、讲话、听音功能这种抽象化的认识。生用户对电话具有拨号、讲话、听音功能这种抽象化的认识。第5页,共28页,编辑于2022年,星期三面向对象程序设计的特性面向对象程序设计的特性 n2继承性继承性n 例如,由基本类型的电话(拨号、讲话、听音功例如,由基本类型的电话(拨号、讲话、听音功能),可以派生出电话传真机、移动电话、公用投币能),可以派生出电话传真机、移动电话、公用投币电话等,这些电话都继承了电话基本类型的拨号、讲电话等,这些电话都继承了电话基本类型的拨号、讲话、听音功能,又添加了各自的独特功能。话、听音功能,又添加了各自的独特功能。n 由于有了继承性,当我们把由于有
7、了继承性,当我们把基本类型基本类型的电话由拨号的电话由拨号改为按键,改为按键,其它类型其它类型的电话的电话都都可以可以改为改为按键,继承性使按键,继承性使我们不必研究每种电话如何实现按键。我们不必研究每种电话如何实现按键。n 继承性即子类延用父类特征的能力。一个子类可以拥有继承性即子类延用父类特征的能力。一个子类可以拥有其父类的全部功能,然后在此基础上,可以添加其他控件或其父类的全部功能,然后在此基础上,可以添加其他控件或功能。继承性体现了类层次中的功能。继承性体现了类层次中的“共享共享”机制。机制。第6页,共28页,编辑于2022年,星期三面向对象程序设计的特性面向对象程序设计的特性 2继承
8、性继承性n 由于有继承性,就可以使得在一个类上所做的改动反由于有继承性,就可以使得在一个类上所做的改动反映到它的所有子类当中,若发现类中有一个小错误,用映到它的所有子类当中,若发现类中有一个小错误,用户不必逐一修改各子类的代码,只需要在父类中改动,户不必逐一修改各子类的代码,只需要在父类中改动,然后这个变动将会体现在全部子类中。这种自动更新可然后这个变动将会体现在全部子类中。这种自动更新可节省用户的时间和精力。节省用户的时间和精力。n 若类的层次具有多层,则这种若类的层次具有多层,则这种继承性继承性还具有还具有传递作用传递作用,即下层的子类可继承其以上各层父类的全部功能。即下层的子类可继承其以
9、上各层父类的全部功能。第7页,共28页,编辑于2022年,星期三面向对象程序设计的特性面向对象程序设计的特性 n3多态性多态性n 例:例:F1 F12功能键,不同的软件环境对每一功能键功能键,不同的软件环境对每一功能键有不同的功能定义。同是一键在不同的软件中就会产生有不同的功能定义。同是一键在不同的软件中就会产生不同的操作,这就是多态性。不同的操作,这就是多态性。n对象之间是通过对象之间是通过“消息消息”传递实现相互联系。向某个对传递实现相互联系。向某个对象发送消息,就是要求该对象执行一个操作。象发送消息,就是要求该对象执行一个操作。n 一个消息只说明接受者应该执行哪种操作,而不一个消息只说明
10、接受者应该执行哪种操作,而不说明怎样去执行这个操作,操作的具体执行由消息接说明怎样去执行这个操作,操作的具体执行由消息接受者确定。受者确定。第8页,共28页,编辑于2022年,星期三面向对象程序设计的特性面向对象程序设计的特性 3多态性多态性n 所谓多态性是指同一个消息可以根据接收消息的对象所谓多态性是指同一个消息可以根据接收消息的对象不同采用不同的操作。不同采用不同的操作。n 也就说,当不同的对象收到相同的消息时将产生不同也就说,当不同的对象收到相同的消息时将产生不同的操作。的操作。n 例如例如VFP中的加中的加“+”运算符,不仅可以进行数值相运算符,不仅可以进行数值相加,而且可以进行字符串
11、相加。这完全取决于表达式中加,而且可以进行字符串相加。这完全取决于表达式中加法运算符加法运算符“+”所操作的对象的数据类型。所操作的对象的数据类型。第9页,共28页,编辑于2022年,星期三举例举例nsdie=createobject(employee)&从类派生实例(对象)从类派生实例(对象)nsdie.employeename=abcnsdie.worktime=2005-11-1n?worktme:,sdie.worktimen?sdie.workhowlong()n?sdie.employeenamen*定义类定义类ndefine class employee as customnem
12、ployeename=nworktime=2002/09/11nprocedure workhowlong()n return date()-this.worktimenendprocnenddefine第10页,共28页,编辑于2022年,星期三VFP中的基类中的基类 基类是系统内部已定义好的基本类,用户可以利用基类是系统内部已定义好的基本类,用户可以利用这些基类创建自己的对象,或派生出子类。这些基类创建自己的对象,或派生出子类。第11页,共28页,编辑于2022年,星期三VFP 中的基类中的基类 由基类可以创建对象,对象将继承该类的功能。由基类可以创建对象,对象将继承该类的功能。每一个对象
13、都会对特定事件作出响应,对一些最小事每一个对象都会对特定事件作出响应,对一些最小事件(基本事件)的响应,各类是共同的。件(基本事件)的响应,各类是共同的。n 事件事件它它由对象来识别由对象来识别。n 用户可以用户可以编写程序代码对相应的动作进行响应。编写程序代码对相应的动作进行响应。n 事件事件可以可以由由操作者的一个操作者的一个动作产生动作产生,如单击鼠标或按,如单击鼠标或按下一个键;也可以由下一个键;也可以由程序代码或系统产生程序代码或系统产生。第12页,共28页,编辑于2022年,星期三VFP基类的最小事件集基类的最小事件集每个基类都可能有各自的区别于其它基类的属性、事件或方法,但每个基
14、类都可能有各自的区别于其它基类的属性、事件或方法,但VFP基类都至少包含以下三个事件和四个属性。基类都至少包含以下三个事件和四个属性。n VFP的基类有以下最小事件集的基类有以下最小事件集所有基类都具有的事件组所有基类都具有的事件组成的集合,包含这三个事件:成的集合,包含这三个事件:n Init (初始初始):当对象创建时激活。当对象创建时激活。n Destroy(破坏破坏):当对象从内存中释放时激活。当对象从内存中释放时激活。n Error (错误错误):当类中的事件或方法发生错误时激活。当类中的事件或方法发生错误时激活。第13页,共28页,编辑于2022年,星期三VFP基类的最小属性基类的
15、最小属性nVFP的基类都有各自属性,但还有最小属性(最基本属性)的基类都有各自属性,但还有最小属性(最基本属性),所有基类至少包含以下所有基类至少包含以下四个属性:四个属性:n Class(类类):该类对象属于何类,返回派生对象的类名称。该类对象属于何类,返回派生对象的类名称。n BaseClass(基类基类):该类是由何基类派生而来,指定被引用对象的基类的该类是由何基类派生而来,指定被引用对象的基类的类名。例如类名。例如Form(表单表单),CommandButton(命令按钮命令按钮)或或TextBox(文本文本框框)。n ClassLibrary(类库)(类库):该类从属于哪个类库,指定
16、用户自定义类库的文该类从属于哪个类库,指定用户自定义类库的文件名。件名。n ParentClass(父类父类):返回对象所属的父类名。返回对象所属的父类名。若该类直接由若该类直接由VFP基类派生基类派生而来,则而来,则ParentClass属性值与属性值与BaseClass属性值相同,即父类为基类。属性值相同,即父类为基类。第14页,共28页,编辑于2022年,星期三基类中的容器类和控件类基类中的容器类和控件类 VFP的基类有两大主要类型,的基类有两大主要类型,容器类容器类和和控件类控件类。因此。因此VFP的对象也可分为这两大的对象也可分为这两大类型。类型。容器类容器类 容器类中可以包含其他对
17、象,这些对象可以是容器类对象,也可以是控件类对容器类中可以包含其他对象,这些对象可以是容器类对象,也可以是控件类对象,并允许访问这些对象。象,并允许访问这些对象。2控件类控件类 控控件件类类也也可可以以包包含含其其他他对对象象,这这些些对对象象在在设设计计和和运运行行时时是是作作为为一一个个整整体体对对待待进进行行修修改改或操作,而不能单独对其中的个别对象进行修改或操作。或操作,而不能单独对其中的个别对象进行修改或操作。也就是说,也就是说,控件类中的对象控件类中的对象不能是容器类对象,不能是容器类对象,只能是最基本的对象只能是最基本的对象,不能再,不能再分隔为几个其它对象。分隔为几个其它对象。
18、容器类与控件类的根本区别在于,容器类可以按层次访问容器类中的对象;而控容器类与控件类的根本区别在于,容器类可以按层次访问容器类中的对象;而控件类的对象都是同一层的对象,不能再包含下一层对象。件类的对象都是同一层的对象,不能再包含下一层对象。第15页,共28页,编辑于2022年,星期三引用对象引用对象 VFP中引用对象可以有两种方式:中引用对象可以有两种方式:绝对引用绝对引用和和相对引用相对引用。第16页,共28页,编辑于2022年,星期三引用对象引用对象n 对象绝对引用对象绝对引用n绝对引用是通过提供对象完整的容器层次来引用对象的。绝对引用是通过提供对象完整的容器层次来引用对象的。n例如:在嵌
19、套的容器中,使命令按钮例如:在嵌套的容器中,使命令按钮1(Command1)可用,使)可用,使命令按钮命令按钮2(Command2)禁用,可以通过设置命令按钮的)禁用,可以通过设置命令按钮的Enabled属性来实现。属性来实现。nFormsetFormPageFrame.Page.Command1.Enabled=.T.(表单集表单页框页表单集表单页框页.命令按钮命令按钮Enabled=.T.)nFormsetFormPageFrame.Page.Command2.Enabled=.F.第17页,共28页,编辑于2022年,星期三对象相对引用对象相对引用n 对象相对引用是通过使用一些属性和关键
20、字,可以直接从对象相对引用是通过使用一些属性和关键字,可以直接从对象某层次中引用对象。对象某层次中引用对象。n 对象相对引用时,要表示出从哪一级对象开始引用对象,对象相对引用时,要表示出从哪一级对象开始引用对象,使用的属性和关键字含义如下:使用的属性和关键字含义如下:n Parent(父属性父属性):引用该对象所在的直接容器的属性、方引用该对象所在的直接容器的属性、方法或控制。法或控制。n THIS :引用该对象本身(直接由对象本身开始引用)。引用该对象本身(直接由对象本身开始引用)。n THISFORM :引用包含该对象的表单(由包含该对象的表引用包含该对象的表单(由包含该对象的表单开始引用
21、)。单开始引用)。n THISFORMSET:引用包含该对象的表单集(由包含该对象引用包含该对象的表单集(由包含该对象的表单集开始引用)。的表单集开始引用)。第18页,共28页,编辑于2022年,星期三对象相对引用对象相对引用 用于相对引用的属性和关键字,在容器层次结构中表示某用于相对引用的属性和关键字,在容器层次结构中表示某个层次,其引用关系为:个层次,其引用关系为:nTHISFORMSETTHISFORMTHISProperty (表单集表单对象表单集表单对象属性属性)n例如:例如:nTHISFORMCommand1.Caption=”确定确定”n通过通过Caption属性设置命令按钮属性
22、设置命令按钮Command1的标题。而的标题。而Command1是包含在表单中。是包含在表单中。nTHISFORMSET.Form1.Command1.Caption=”确定确定”n设置表单集中设置表单集中Form1表单里的表单里的Command1命令按钮的标题命令按钮的标题属性。属性。第19页,共28页,编辑于2022年,星期三设置对象属性设置对象属性n 对象的对象的属性属性既可以在既可以在设计对象时设置设计对象时设置,也可以在,也可以在程序运行时重程序运行时重新设置新设置。第20页,共28页,编辑于2022年,星期三设置属性设置属性n设置属性值的语法是:设置属性值的语法是:nContain
23、erObjectProperty=Value (即:容器对象属性值即:容器对象属性值)例:例:nTHISFORMImage1Visible=.T.n&设置表单中的图像设置表单中的图像1可见可见nTHISFORMImage2Visible=.F.n&设置表单中的图像设置表单中的图像2不可见不可见nTHISFORMBackcolor=rgb(192,192,192)n&设置表单的背景颜色设置表单的背景颜色第21页,共28页,编辑于2022年,星期三设置属性设置属性n在属性设置时,可能要为在属性设置时,可能要为一个对象设置多个属性一个对象设置多个属性,或者为同一容,或者为同一容器中的多个对象设置属性
24、,都要给出相同的层次结构中的从属器中的多个对象设置属性,都要给出相同的层次结构中的从属关系(类似路径)。为此关系(类似路径)。为此VFP 提供了提供了WITH ENDWITH,结构语句,简化了设置多个对象、多个属性的过程。例:结构语句,简化了设置多个对象、多个属性的过程。例:WITH THISFORMSETWITH THISFORMSETForm1Form1.Image1.Image1Visible=.T.Visible=.T.Image2.Image2Visible=.F.Visible=.F.Backcolor=RGB(255,255,0).Backcolor=RGB(255,255,0)
25、ENDWITHENDWITH第22页,共28页,编辑于2022年,星期三调用对象方法调用对象方法n调用对象方法的语法:调用对象方法的语法:Object.Method 即,即,n 这里对象引用同样可以绝对引用或相对引用。这里对象引用同样可以绝对引用或相对引用。例:例:THISFORMBox(100,150)&Box方法在表单中画一个矩形方法在表单中画一个矩形,括号可不要括号可不要 THISFORMRefresh&Refresh方法刷新表单方法刷新表单n 有些方法可以返回值,方法名后要有圆括号。如果方法要有些方法可以返回值,方法名后要有圆括号。如果方法要使用多个参数,要把这些参数放到方法名后的圆括
26、号内,并用使用多个参数,要把这些参数放到方法名后的圆括号内,并用逗号将它们分开。逗号将它们分开。n语法是:语法是:Object.Method()第23页,共28页,编辑于2022年,星期三编写事件代码编写事件代码n当事件发生时,该事件的代码程序(过程当事件发生时,该事件的代码程序(过程代码)就将被执行,这是对事件的响应。代码)就将被执行,这是对事件的响应。第24页,共28页,编辑于2022年,星期三编写事件代码编写事件代码n例如:对表单中标题为例如:对表单中标题为“确认确认”的命令按钮为其的命令按钮为其Click事件添事件添加如下过程代码:加如下过程代码:SELECT RSDAAPPENA B
27、LANKREPLACE RSDA.姓名姓名 WITH THISFORM.TxtName.Vaule&取表单中文本框值属性数据替换取表单中文本框值属性数据替换THISFORM.Release&调用从内存中释放表单方法程序调用从内存中释放表单方法程序n 这样,当用户单击该这样,当用户单击该“确认确认”命令按钮时,将用命令按钮时,将用TxtName文本文本框的框的Vaule属性值替换表的姓名字段属性值替换表的姓名字段,然后释放表单。然后释放表单。第25页,共28页,编辑于2022年,星期三响应事件响应事件事件的触发方式事件的触发方式 事件有两种触发方式事件有两种触发方式n第一种,是第一种,是用户的干
28、预用户的干预触发事件,如点击鼠标,可以产生触发事件,如点击鼠标,可以产生Click(单击单击)、DoubleClick(双击双击)、MouseMove(移动到移动到)、DragDrop(托放托放)等事件,按键可以等事件,按键可以产生产生KeyPress(按键按键)事件,这是用户实际操作的情况。事件,这是用户实际操作的情况。n第二种事件触发方式是第二种事件触发方式是VFP系统自动产生系统自动产生事件,这类事件占事件,这类事件占VFP事件的绝大部分。事件的绝大部分。n例如,当创建对象时,都会自动产生例如,当创建对象时,都会自动产生Init(初始初始)事件;释放对象时,都会自动产生事件;释放对象时,
29、都会自动产生Destroy(释放释放)事件等。事件等。第26页,共28页,编辑于2022年,星期三响应事件响应事件 事件触发顺序事件触发顺序n对于一个对象可以触发多个事件,而且事件触发也有先后顺序。了对于一个对象可以触发多个事件,而且事件触发也有先后顺序。了解事件的触发顺序,并为不同事件编写出相应的关联代码,是很重解事件的触发顺序,并为不同事件编写出相应的关联代码,是很重要的。要的。n对于表单事件的顺序是对于表单事件的顺序是Load(装载装载)、Init(初始初始)、Show(显示显示)、Activate(激活激活)、GotFocus(得到焦点得到焦点)。n表单被释放时的事件顺序是表单被释放时的事件顺序是LostFocus(失去焦点失去焦点)、Dcactivate(失去失去活动活动)、Destroy(破坏破坏)、Unload(卸载卸载)。第27页,共28页,编辑于2022年,星期三第28页,共28页,编辑于2022年,星期三