




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第八章面向对象的程序设计,2,本章目录,第一节面向对象的概念第二节VisualFoxPro6.0中的类与对象第三节类与对象的程序设计方法第四节类和对象可视化设计方法,3,学习目标,1理解面向对象的概念,掌握对象、属性、事件、方法、类、封装性、继承性、多态性、容器、控件等概念。2掌握用程序方法设计类、用程序方法设计对象。3掌握用类设计器设计类。4掌握类浏览器的操作。,4,第一节面向对象的概念,一、面向对象的概念,在面向对象的程序设计(Object-OrientedProgramming)中,对象(Object)是组成程序的构件,就好像在面向过程的结构化程序设计方法中的子程序和函数一样。在面向对象的程序设计方法中,程序设计人员不是完全按过程对求解问题进行分解,而是按照面向对象的观点来描述问题、分解问题,最后选择一种支持面向对象方法的程序语言来解决问题。,5,1对象(Object)客观世界里的任何实体都可以被看作是对象。对象可以是具体的物,也可以指某些概念。从编程的角度来看,对象是一种将数据和操作过程结合在一起的数据结构,或者是一种具有属性(数据)和方法(过程和函数)的集合体。事实上程序中的对象就是对客观世界中对象的一种抽象描述。在面向对象程序设计中,“对象”是对现实世界中实体的一种模拟工具。如命令按钮、文本框、菜单、工具栏等。,6,2属性(Property)所谓属性,就是对象的特性。在面向对象程序设计中,每个对象都具有自己的属性。3事件(Event)“事件”是“对象”触发的行为描述,“事件”是预先定义的动作,由用户或者系统激活。常见的“事件”往往是一些鼠标动作,如“单击”、“双击”、“拖放”或修改文本框对象的数据等。,7,4.方法(Method)方法是与对象相关的过程,是指对象为完成一定功能而编写的一段代码。当作用在对象上的某一个设定“事件”发生时,与该事件相联系的“方法程序”(当然假设对象的设计者已经设计了该程序并与对象一起封装)就运行并完成该程序的功能。5.事件代码与方法代码事件代码与方法代码都是定义在某个对象中的一个程序过程,一个对象包含的事件代码是一定的,不能增加,而一个对象中所包含的方法代码是可以任意增加的。,8,6.类(Class)“类”是具有相同属性特征和行为规则的多个“对象”的一种统一描述。“类”是一个数据模式和若干个程序过程经封装而形成的一个整体,它是对现实世界的一种模拟与抽象,而“对象”则是“类”的一个具体实例。7.子类与继承在面向对象的方法里,继承是指在基于现有的类创建新类时,新类继承了现有类里的方法和属性。此外,可以为新类添加新的方法和属性。我们把新类称为现有类的子类,而把现有类称为新类的父类。一个子类的成员一般包括:(1)从其父类继承的属性和方法。(2)由子类自己定义的属性和方法。,9,8.VisualFoxPro基类VisualFoxPro基类是系统本身内含的,并不存放在某个类库中。用户可以基于基类生成所需要的对象,也可以扩展基类创建自己的子类在程序设计中,可以使用CREATEOBJECT函数来直接生成基于某个类的对象。该函数的格式如下:CREATEOBJECT(,)函数基于指定的类生成一个对象,并返回对象的引用。9.VisualFoxPro基类列表,10,类名,类名,含义,含义,类名,类名,含义,含义,ActiveDoc,ActiveDoc,活动文档,活动文档,Label,Label,标签,标签,CheckBox,CheckBox,复选框,复选框,Line,Line,线条,线条,Column,Column,(表格)列,(表格)列,Listbox,Listbox,列表框,列表框,ComboBox,ComboBox,组合框,组合框,Olecontrol,Olecontrol,OLE,容器控件,OLE,容器控件,CommandButton,CommandButton,命令按钮,命令按钮,Oleboundcontrol,Oleboundcontrol,OLE,绑定控件,OLE,绑定控件,CommandGroup,CommandGroup,命令按钮组,命令按钮组,OptionButton,OptionButton,选项按钮,选项按钮,Container,Container,容器,容器,Optiongroup,Optiongroup,选项按钮组,选项按钮组,Contorl,Contorl,控件,控件,Page,Page,页,页,Custom,Custom,定制,定制,PageFrame,PageFrame,页框,页框,EditBox,EditBox,编辑框,编辑框,ProjectHook,ProjectHook,项目挂钩,项目挂钩,Form,Form,表单,表单,Separator,Separator,分隔符,分隔符,FormSet,FormSet,表单集,表单集,Shape,Shape,图形,图形,Grid,Grid,表格,表格,Spinner,Spinner,微调控件,微调控件,Header,Header,(列)标头,(列)标头,TextBox,TextBox,文本框,文本框,HyperLink,HyperLink,超级链接,超级链接,Timer,Timer,定时器,定时器,Image,Image,图象,图象,ToolBar,ToolBar,11,二、面向对象程序设计的基本特征,1封装性对象的封装性,就是指将对象的方法程序和属性代码包装在一起。封装是借助类来实现的。2继承性从一种现有的、普遍的类派生出的一种新的、具体的类型的方法。现有的、普遍的的类叫做父类,也称基类。新的、具体的类被称作子类,也被称作派生类。子类继承父类的属性或方法。一个子类可以拥有其父类的全部功能,并可在此基础上,添加其他功能。3多态性所谓多态性实际上就是在运行时方法与对象的动态绑定。多态性使得用户可以将所定义的方法应用于多个对象,并使得程序更加容易扩充。,12,第二节VisualFoxPro6.0中的类与对象,一、VisualFoxPro6.0的类,各种窗口、菜单栏、单选按钮、复选框等在面向对象的设计中都称之“对象”。VisualFoxPro6.0对这些常用的对象提供了丰富的基本类(基类)供用户直接使用。根据实际需要对它们进行相应的改造以形成“子类”或者直接形成“对象”,以提高开发者的工作效率。,13,二、容器与控件,VisualFoxPro6.0的基类共分为两个大类:容器类和非容器类。1容器类容器类可以包含其他对象,并且允许访问这些对象。下表列出了每种容器类所能包含的对象。,14,2控件类控件类的封装比容器类更为严密,但也因此损失了一些灵活性,控件类中不能包含其他类,最典型的就是命令按钮。3容器中各对象的引用在进行容器类“子类”或“对象”的设计时,往往要引用容器中某一个特定对象,这就要掌握面向对象的标识方法。()容器类中对象的层次容器中的对象仍然可以是一个容器,一般把一个“对象”的直接容器称为“父容器”,不能将一个对象的间接容器错误地视为“父容器”。图8-1表示了可能的一种容器类嵌套的状况。,15,图8-1容器类的嵌套,()对象使用局域名每个对象都有一个名字,在给对象命名时,只要保证同一个“父容器”下的各个对象不重名,即对象使用的是局域名,因此不能单独使用对象名来引用对象,对象引用的一般格式是:,16,Object1.Object2.Object1,Object2是对象的名字,其中左边Object1是右边Object2的“父容器”,这种格式所表示的是最后一个对象的名字,中间用小园点(.)分隔。如图8-1中列容器中的控件名可以表示为:Formset.Form.PageFrame.Page.Grid.Column.Cmd1()几个代词的用法,说明:这些代词只能在方法代码或事件代码中使用。,17,【例8-1】基于VisualFoxPro的FORM类生成一个对象,然后访问该对象的一些属性和方法。,Oform=CREATEOBJECT(Form)&生成一个空白表单Oform.show&显示表单Oform.caption=”演示”&修改表单的标题?“这是一个生成对象的演示程序”&在表单上输出字符串Oform.release,【例8-2】如果Form1中有一个命令按钮组commandgroup1,该命令按钮组有两个命令按钮:command1和command2,label1是表单form1上的一个标签控件。,18,如果要在命令按钮command1的事件(如单击事件)代码中修改该按钮的标题可用下列命令:this.caption=”确定”如果要在命令按钮command1的事件代码中修改命令按钮command2的标题可用下列命令:thisform.Cmand2.caption=取消或者mand2.caption=取消但不能写成下列命令:mand2.caption=取消如果要在命令按钮command1的事件代码中修改表单的标题可用下列命令:This.Parent.parent.Caption=”测试窗口”或者thisform.caption=”测试窗口”,19,二、VisualFoxPro6.0中的事件与方法,1VisualFoxPro6.0中的事件在面向对象程序设计中,“事件”是对象触发的行为描述,“事件”是预先定义的动作,由用户或者系统激活。一个事件有一个事件名,一个事件与一个事件响应程序(方法程序)相关联,当作用在一个对象上的事件发生时,与这个事件相关联的程序就获得一次运行。每种对象所能识别的事件是固定的,开发者只能为指定的事件指定响应程序,不能为对象添加新的事件,对象的事件只能从其父类中继承。表8-2中列出了VisualFoxPro6.0核心事件集。,20,表8-2VisualFoxPro6.0核心事件集,21,2对象对事件的反应当作用在对象上的一个事件发生时,若没有与之相关的代码,则不会发生任何操作。开发者只需对少数几个要用到的事件设计响应程序。事件的响应程序一般是一个过程,用事件的名称来命名。系统对事件的响应有先后顺序。3方法程序的层次为对象编写事件代码时,注意两条基本原则:()容器不处理与所包含的对象相关联的事件。例如:一个命令按钮位于表单上,当用户单击命令按钮时,只会触发命令按钮的Click事件,不会触发表单的Click事件。,22,()若没有与某对象相关联的事件代码,则VisualFoxPro在该对象所在的类的层次结构中逐层向上检查是否有与此事件相关联的代码。若找到则执行此代码。4.事件驱动模型(1)事件是面向对象方法中驱动程序的引擎。(2)事件的触发与停止。事件的触发分为用户操作触发和在程序运行过程中触发两种方式。典型的用户操作触发事件有用户单击鼠标时触发Click事件。程序运行过程中触发事件表示在程序运行过程中自动触发,例如某对象的Iint事件,是在对象创建时程序自动触发。通常让程序允许事件触发使用READEVENTS命令。如果不允许事件触发可以使用CLEAREVENTS命令。,23,第三节类与对象的程序化设计方法,一、用程序方法设计类,创建类的语法基本框架:DEFINECLASSClassName1ASParentClassOLEPUBLICPROTECTED|HIDDENPropertyName1,PropertyName2.Object.PropertyName=eExpression.ADDOBJECTPROTECTEDObjectNameASClassName2NOINITWITHcPropertylist.PROTECTED|HIDDENFUNCTION|PROCEDUREName_ACCESS|_ASSIGNNODEFAULTcStatementsENDFUNC|ENDPROC.ENDDEFINE其中,用大写的字母组成的单词是保留字,而用小写字母组成的单词是参数。语句中各参数的含义如下:,24,(1)ClassName1:要创建的“类”的名字。(2)ParentClass:要创建的“类”的“父类”,ParentClass既可以是“基类”,也可以是开发者自己创建的的其它“子类”。(3)PropertyName1,PropertyName2:列举该类中要保护或隐含的的属性名称。(4)ObjectName:如果创建的是一个容器对象,这个子句指出该容器中所含的其它对象,这个参数是所加入的对象的名字。(5)ClassName2:加入的对象ObjectName的“父类”的名字(6)Cpropertylist:创建类的属性名。(7)Name:创建类中的过程或函数名。(8)Cstatements:类中响应各事件的方法程序或函数。,25,实例:DEFINECLASStestASFORM&定义一个子类Test,它的基类FormADDOBJECTtext1ASTEXTBOX&在子类Test中增加一个文本框对象text1PROCEDUREtext1.KeyPress&对象text1的KeyPress方法程序PARAMETERSnKeyCode,nShiftAltCtrlNODEFAULT&不执行父类TEXTBOX中的相应代码IFBETWEEN(nKeyCode,65,122)&在A和z之间This.Value=ALLTRIM(This.Value)+*ACTIVATESCREEN&将输出发送到VisualFoxPro主窗口中?CHR(nKeyCode)ENDIFENDPROCPROCEDUREDestroy&从内存中释放时CLEAREVENTS&不允许触发事件ENDPROC,26,二、用程序方法设计对象,设计好了一个类,则可在此基础上创建该类的对象。(1)由类创建对象创建对象就是在内存中建立一个变量。对象变量(简称为对象)只有在创建后才能使用,使用命令方式创建对象的一般格式是:ObjectName=CreateObject(ClassName)功能:在内存中创建一个对象例如:FrmForm1=CreateObject(FORM)&用基类FORM创建一个对象FromForm1FrmTest=FrmTest=CreateObject(Test)&上面一条命令成立的前提是我们已在前面的例子中已经创建了一个Test的类,27,(2)对象的属性设置对象创建以后就可以对它的属性进行设置和修改。设置和修改属性的语句格式是:格式1:Parent.Object.Property=Value格式2:WITH属性名1=属性值1属性名2=属性值2属性名n=属性值nENDWITH要同时设置一个对象的多个属性时,用第二种方法更加方便快捷。,28,(3)对象方法程序的调用调用对象的方法程序的语法如下:Parent.Object.Method例如:要调用显示frmform1表单对象的Show()方法,则代码形式如下:FrmForm1.Show()(4)对象变量的的分类与普通变量一样,对象变量也有全局变量、局部变量和私有变量之分,其对应的说明符也是PUBLIC、LOCAL、PRIVATE。局部变量和私有变量都随着创建对象的程序结束而自动释放,而全局变量则会留存在内存中直到用显式的命令释放对象。,29,(5)对象变量的释放Release(6)在容器对象中添加对象在容器对象已经创建后,要在容器对象中添加对象应使用AddObject()方法,格式是:.AddObject(,)该方法在已经建立的容器对象中加入一个由类名派生的对象,对象就成为容器的一个成员。,30,第四节类和对象可视化设计方法,一、用类设计器设计类的一般步骤,1进入类设计器有两种方法可以进入类设计器。(1)在系统菜单栏中单击“文件”菜单中的“新建”命令,在“新建”对话框中指定文件类型是“类”,单击“新建文件”按钮。(2)已经进入项目管理器,就可以在项目管理器中,选择“类”选项卡,并单击“新建”命令按钮。两者都将进入一个统一的界面(如图8-2所示),31,2指定子类的名称、父类和存储类的文件名。图8-2中有3个文本框中的内容需要设计者根据设计确定相应信息:(1)类名:每一个类都有一个名称,只要按照一般的命名规则给子类取一个名字即可(cdm_test)。,图8-2新建类对话框,32,(2)派生于:指定子类的“父类”。由下拉列表框中可选择相应的VisualFoxPro中的基类(CommandGroup)就可以了。如果需要用一个非基类的类作为子类的“父类”,可以单击派生于后面的命令按钮进入图8-3所示的对话框进一步选择。该对话框的左半部分用于选择“父类”所在的文件,右半部分选择“父类”。,图8-3派生于其他子类对话框,33,(3)存储于:指定子类的存储文件(默认扩展名.vcx,),所指定的文件可以存在,也可以不存在。当指定了一个已经存在的类文件时,VisualFoxPro把新建的类加入该文件,否则,VisualFoxPro建立一个新的类文件。一般我们都是将相关的类存储于一个文件中,很少将每一个类单独用一个文件存储。这个文本框后的命令按钮也是用于选择子类存储文件。如图8-4所示。,图8-4子类存储对话框,34,完成以上操作后,已经设计出了一个子类,该类与其“父类”具有相同的属性和事件代码,也可以理解为是父类的一个拷贝,如图8-5所示。,图8-5类设计器窗口,35,3子类属性设置(1)修改子类的属性新设计的类cmd_test继承了其父类CommandGroup全部的属性,要重新设置cmd_test的属性值,需进入属性设置窗口(见图8-6)。方法是:将鼠标移到cmd_test上并单击右键,在弹出的快捷键中选择“属性”。或在系统菜单栏中,选择“显示”菜单中的“属性”选项。,图8-6子类的属性设置容器,36,属性可从“父类”那里获得继承值。这里只设置ButtonCount为4。最常见的属性有:Name:描述类的名称。Caption:类的标题。FontName:类所用字体。FontSize:类所用字号。(2)添加新属性当
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025教师资格试题含答案详解(综合题)
- 法院司法辅助人员题库试题(各地真题)附答案详解
- 危重患者交接班制度
- 2026届淮安市重点中学九年级英语第一学期期末学业水平测试试题含解析
- 用餐接待礼仪培训
- 中国政治制度讲解
- 2026届云南省腾冲市十五所学校英语九年级第一学期期末预测试题含解析
- 江苏省句容市华阳片区2026届九年级化学第一学期期中考试试题含解析
- 机关科室工作总结
- 教育学新闻汇报
- 2025年人社局编外考试题库及答案
- 木制品厂安全生产培训课件
- 排污许可证管理条例课件
- 乡镇人大主席“干在实处、走在前列”学习讨论发言材料
- 电工四级考试理论题库及答案
- 世纪英才教程课件
- 小学科学新教科版三年级上册全册教案(2025秋新版)
- 婴幼儿发展引导员技能竞赛考试题库(含答案)
- 小学生航空航天知识题库及答案
- 2025年综合基础知识题库(含答案)
- 常用焊条焊丝质量证明书
评论
0/150
提交评论