面向对象的程序设计.ppt_第1页
面向对象的程序设计.ppt_第2页
面向对象的程序设计.ppt_第3页
面向对象的程序设计.ppt_第4页
面向对象的程序设计.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1,第八章 面 向 对 象 的 程 序 设 计,2,本 章 目 录,第一节 面向对象的概念 第二节 Visual FoxPro 6.0中的类与对象 第三节 类与对象的程序设计方法 第四节 类和对象可视化设计方法,3,学 习 目 标,1理解面向对象的概念,掌握对象、属性、事件、方法、类、 封装性、继承性、多态性、容器、控件等概念。 2掌握用程序方法设计类、用程序方法设计对象。 3掌握用类设计器设计类。 4掌握类浏览器的操作。,4,第一节 面向对象的概念,一、面向对象的概念,在面向对象的程序设计(Object-Oriented Programming )中, 对象(Object)是组成程序的构件,就好像在面向过程的结构 化程序设计方法中的子程序和函数一样。 在面向对象的程序设计方法中,程序设计人员不是完全按 过程对求解问题进行分解,而是按照面向对象的观点来描述 问题、分解问题,最后选择一种支持面向对象方法的程序语 言来解决问题。,5,1对象(Object) 客观世界里的任何实体都可以被看作是对象。对象可以是 具体的物,也可以指某些概念。 从编程的角度来看,对象是一种将数据和操作过程结合在 一起的数据结构,或者是一种具有属性(数据)和方法 (过程和函数)的集合体。事实上程序中的对象就是对客观 世界中对象的一种抽象描述。 在面向对象程序设计中,“对象”是对现实世界中实体的 一种模拟工具。如命令按钮、文本框、菜单、工具栏等。,6,2属性(Property) 所谓属性,就是对象的特性。在面向对象程序设计中, 每个对象都具有自己的属性。 3事件(Event) “事件”是“对象”触发的行为描述,“事件”是预先定义的 动作,由用户或者系统激活。常见的“事件”往往是一些鼠 标动作,如“单击”、“双击”、“拖放”或修改文本框对象的 数据等。,7,4.方法(Method) 方法是与对象相关的过程,是指对象为完成一定功能而编 写的一段代码。当作用在对象上的某一个设定“事件”发生时, 与该事件相联系的“方法程序”(当然假设对象的设计者已经 设计了该程序并与对象一起封装)就运行并完成该程序的功能。 5.事件代码与方法代码 事件代码与方法代码都是定义在某个对象中的一个程序过 程,一个对象包含的事件代码是一定的,不能增加,而一个 对象中所包含的方法代码是可以任意增加的。,8,6.类(Class) “类”是具有相同属性特征和行为规则的多个“对象”的一种 统一描述。 “类”是一个数据模式和若干个程序过程经封装而 形成的一个整体,它是对现实世界的一种模拟与抽象,而 “对象”则是“类”的一个具体实例。 7.子类与继承 在面向对象的方法里,继承是指在基于现有的类创建新类 时,新类继承了现有类里的方法和属性。此外,可以为新类 添加新的方法和属性。我们把新类称为现有类的子类,而把 现有类称为新类的父类。 一个子类的成员一般包括: (1)从其父类继承的属性和方法。 (2)由子类自己定义的属性和方法。,9,8. Visual FoxPro基类 Visual FoxPro基类是系统本身内含的,并不存放在某个类 库中。用户可以基于基类生成所需要的对象,也可以扩展基类 创建自己的子类 在程序设计中,可以使用CREATEOBJECT函数来直接生成基于 某个类的对象。该函数的格式如下: CREATEOBJECT(,) 函数基于指定的类生成一个对象,并返回对象的引用。 9. Visual FoxPro基类列表,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,第二节 Visual FoxPro 6.0中的类与对象,一、Visual FoxPro 6.0的类,各种窗口、菜单栏、单选按钮、复选框等在面向对象的设计中都 称之“对象”。Visual FoxPro 6.0对这些常用的对象提供了丰富的 基本类(基类)供用户直接使用。根据实际需要对它们进行相应的 改造以形成“子类”或者直接形成“对象”,以提高开发者的工作效率。,13,二、容器与控件,Visual FoxPro 6.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】基于Visual FoxPro的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,二、Visual FoxPro 6.0中的事件与方法,1Visual FoxPro 6.0中的事件 在面向对象程序设计中,“事件”是对象触发的行为描述,“事件”是 预先定义的动作,由用户或者系统激活。一个事件有一个事件名,一 个事件与一个事件响应程序(方法程序)相关联,当作用在一个对象 上的事件发生时,与这个事件相关联的程序就获得一次运行。 每种对象所能识别的事件是固定的,开发者只能为指定的事件指定 响应程序,不能为对象添加新的事件,对象的事件只能从其父类中继 承。 表8-2中列出了Visual FoxPro 6.0核心事件集。,20,表8-2 Visual FoxPro 6.0核心事件集,21,2对象对事件的反应 当作用在对象上的一个事件发生时,若没有与之相关的代码,则不 会发生任何操作。开发者只需对少数几个要用到的事件设计响应程序。 事件的响应程序一般是一个过程,用事件的名称来命名。系统对事 件的响应有先后顺序 。 3方法程序的层次 为对象编写事件代码时,注意两条基本原则: ()容器不处理与所包含的对象相关联的事件。 例如:一个命令按钮位于表单上,当用户单击命令按钮时,只会 触发命令按钮的Click事件,不会触发表单的Click事件。,22,()若没有与某对象相关联的事件代码,则Visual FoxPro在该对 象所在的类的层次结构中逐层向上检查是否有与此事件相关联的代码。 若找到则执行此代码。 4.事件驱动模型 (1)事件是面向对象方法中驱动程序的引擎。 (2)事件的触发与停止。 事件的触发分为用户操作触发和在程序运行过程中触发两种 方式。典型的用户操作触发事件有用户单击鼠标时触发Click事件。 程序运行过程中触发事件表示在程序运行过程中自动触发,例如某 对象的Iint事件,是在对象创建时程序自动触发。通常让程序允许 事件触发使用READ EVENTS命令。如果不允许事件触发可以使用 CLEAR EVENTS命令。,23,第三节 类与对象的程序化设计方法,一、用程序方法设计类,创建类的语法基本框架: DEFINE CLASS ClassName1 AS ParentClass OLEPUBLIC PROTECTED | HIDDEN PropertyName1, PropertyName2 . Object.PropertyName = eExpression . ADD OBJECT PROTECTED ObjectName AS ClassName2 NOINIT WITH cPropertylist. PROTECTED | HIDDEN FUNCTION | PROCEDURE Name_ACCESS | _ASSIGN NODEFAULT cStatements ENDFUNC | ENDPROC. ENDDEFINE 其中,用大写的字母组成的单词是保留字,而用小写字母组成的单词是参数。语句中各参数的含义如下:,24,(1) ClassName1: 要创建的“类”的名字。 (2) ParentClass: 要创建的“类”的“父类”,ParentClass既可以 是“基类”,也可以是开发者自己创建的的其它“子类”。 (3) PropertyName1, PropertyName2 :列举该类中要保护或隐 含的的属性名称。 (4) ObjectName: 如果创建的是一个容器对象,这个子句指出该 容器中所含的其它对象,这个参数是所加入的对象的名字。 (5) ClassName2: 加入的对象ObjectName的“父类”的名字 (6) Cpropertylist:创建类的属性名。 (7) Name: 创建类中的过程或函数名。 (8) Cstatements: 类中响应各事件的方法程序或函数。,25,实例: DEFINE CLASS test AS FORM &定义一个子类Test,它的基类 Form ADD OBJECT text1 AS TEXTBOX &在子类Test中增加一个文本框对象text1 PROCEDURE text1.KeyPress &对象text1的KeyPress方法程序 PARAMETERS nKeyCode, nShiftAltCtrl NODEFAULT &不执行父类TEXTBOX中的相应代码 IF BETWEEN(nKeyCode, 65, 122) & 在 A 和 z 之间 This.Value = ALLTRIM(This.Value) + “*“ ACTIVATE SCREEN & 将输出发送到 Visual FoxPro主窗口中 ? CHR(nKeyCode) ENDIF ENDPROC PROCEDURE Destroy &从内存中释放时 CLEAR EVENTS &不允许触发事件 ENDPROC,26,二、用程序方法设计对象,设计好了一个类,则可在此基础上创建该类的对象。 (1)由类创建对象 创建对象就是在内存中建立一个变量。对象变量(简称为对象) 只有在创建后才能使用,使用命令方式创建对象的一般格式是: ObjectName=CreateObject(“ClassName“ ) 功能:在内存中创建一个对象 例如: FrmForm1 = CreateObject (“FORM“) &用基类FORM创建一个对象FromForm1 FrmTest=FrmTest = CreateObject(“Test“) &上面一条命令成立的前提是我们已在前面的例子中已经创建 了一个Test的类,27,(2)对象的属性设置 对象创建以后就可以对它的属性进行设置和修改。设置和修改属 性的语句格式是: 格式1: Parent.Object.Property=Value 格式2: WITH 属性名1=属性值1 属性名2=属性值2 属性名n=属性值n ENDWITH 要同时设置一个对象的多个属性时,用第二种方法更加方便快捷。,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)派生于:指定子类的“父类”。由下拉列表框中可选择相应的 Visual FoxPro中的基类(CommandGroup)就可以了。如果需要用一 个非基类的类作为子类的“父类”,可以单击派生于后面的命令按钮 进入图8-3所示的对话框进一步选择。该对话框的左半部分用于选 择“父类”所在的文件,右半部分选择“父类”。,图8-3 派生于其他子类对话框,33,(3)存储于:指定子类的存储文件(默认扩展名.vcx,),所指定 的文件可以存在,也可以不存在。当指定了一个已经存在的类文件 时,Visual FoxPro把新建的类加入该文件,否则,Visual FoxPro 建立一个新的类文件。一般我们都是将相关的类存储于一个文件中, 很少将每一个类单独用一个文件存储。这个文本框后的命令按钮也 是用于选择子类存储文件。如图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:类所用

温馨提示

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

评论

0/150

提交评论