您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第6章对象模型和事件模型
第六章对象模型和事件模型【本章要点】●类和对象、容器类和控件类;类的特性;基类的最小事件集●属性、事件、方法●对象的绝对引用和相对引用●常见的属性、事件和方法第一节面向对象的程序设计概述一、面向对象的程序设计方法从程序设计的方法来看,VFP支持两种程序设计的方法:结构化的程序设计和面向对象的程序设计。传统的结构化程序设计的本质是功能设计,即以功能为主进行设计,共方法是自顶向下,功能分解。它从外部功能上模拟客观世界,其开发过程通常是从“做什么”到“如何做”。面向对象的程序设计是基于问题的自底向上的功能综合,它从内部结构上模拟客观世界,其开发过程是从“用什么做”到“要做什么”。“用什么做”说明面向对象的程序设计的首要工作是认识应用领域中的对象及其相互关系,形成相应的概念并设计出程序的基本单位——类与对象。“要做什么”说明面向对象的程序设计的后继工作才是具体解决某一应用任务。面向对象程序设计是一种系统化的程序设计方法,允许抽象化、模块化的分层结构,利用对象可以简化程序设计,提高程序代码的可重用性。面向对象的程序设计是通过对类、子类和对象等的设计来体现的。二、类和对象客观世界里的任何实体都可以被看作是对象。对象可以是具体的物,也可以指某些概念。每个对象都有一定的状态和行为。属性用来表示对象的状态,方法用来描述对象的行为,即当某个对象接受了某个消息后所采取的一系列操作的描述。类是面向对象程序设计中的核心。所谓类是指:具有相同的结构、操作,并遵守相同的规则的对象的集合。类包含了对象的程序设计和数据抽象,是一个具有相同行为的对象的抽象。所有对象的属性、事件和方法都在类中定义。对象仅仅是类的一个实例。有了类定义后,基于类就可以生成这类对象中任何一个对象。这些对象虽然采用相同的属性来表示状态,但它们在属性上的取值完全可以不同。这些对象一般有着不同的状态,且彼此间相对独立。类和对象的关系密切,但并不相同。类定义了对象特征以及对象外观和行为的模板,它刻划了一组具有共同特性的对象;对象是类的一个实例,包括了数据和过程(操作)。在采用面向对象的程序设计方法设计的程序中,程序由一个或多个类组成,在程序运行时,根据需要来创建该类的各个对象(实例)。因此,类是静态概念,而对象是动态概念。对象是基于某种类所创建的实例,它包括了数据和过程。1、类在VFP中,把类分为:▲基类是VFP系统提供的内部定义的类,可用作其它用户自定义类的基础。▲子类是以其它类的定义为起点,为某一种对象所建立的新类。子类将继承任何对父类(即子类所基于的类)所做的修改。▲用户自定义类与VFP基类相似,但由用户定义,并且可用来派生子类。这种类没有可视化的表示形式。通过类可以简化应用程序的设计,这是因为类具有继承性、多态性、封装性、抽象性。▲继承性是指子类具有父类的属性和方法,即从某一类创建一个子类,子类除具有自己的属性和方法外,还具有其父类的属性和方法。如果父类特征发生改变,则子类将继承这些新特征。继承性说明了子类延用父类特征的能力,体现并扩充了面向对象程序设计方法的共享机制。▲多态性是指一些关联的类,虽然都可包含同名的方法程序,但方法程序的具体内容可以是各不相同的。运行时,系统将根据对象的类确定执行哪种方法程序。例如,相关联的几个对象可以同时包含Draw方法程序(重新绘制表单对象),当某个过程将其中一个对象作为参数传递时,它不必知道该参数是何种类型的对象,只需调用Draw方法程序即可。在面向对象的程序设计中,多态性使得相同的操作可以作用于多种类型的对象并获得不同的结果,从而增强了系统的灵活性、维护性、扩充性等。▲封装性说明包含和隐藏对象信息(内部数据结构以及实现功能的细节,即对象的方法程序和属性代码等)的能力。封装使操作对象的内部复杂性与应用程序的其它部分隔离开来,使用户不必了解数据的存储方法及实现的代码。封装和隐藏是面向对象技术的核心,使得软件具有很好的模块性,各模块具有明显的范围和边界,实现了模块内的高内聚和模块间的低耦合。▲抽象性是指提取一个类或对象与众不同的特征,而不对该类和对象的所有信息进行处理。当创建一个类时,例如一系列表的定位按钮,可以将它作为整体,而不必关心其中的单个组件以及它们相互之间是如何作用的。2、对象每个对象都具有属性,以及与之相关的事件和方法,通过对象的属性、事件和方法来处理对象。▲属性属性是定义对象的特征或某一方面的行为。在VFP中,所创建的对象的属性由对象所基于的类决定,也可以为对象定义新的属性。属性一般用数据来表示(如按钮的大小、标题、位置等),对象的某些属性值既可以在设计阶段,也能在运行阶段进行设置,某些属性则是不能被设置的,是只读的。用户可以给对象增加新的属性。▲事件事件是由对象识别的一个动作,可以编写相应的代码对此动作进行响应。通常事件是由一个用户动作产生(如鼠标单击事件Click),也可以由程序代码或系统产生(计时器的Timer事件)。在VFP中,不同的对象所能识别的事件虽然有所不同,但事件集合是固定的,用户不能创建新的事件。▲方法方法是对象能够执行的一个操作。在VFP中,方法是与对象相关联的过程(完成某种操作的处理代码),通常也称作方法程序,它与对象紧密地连接在一起。方法也可以由用户自己创建,因此其集合是可以无限地扩展的。事件可以具有与之相关联的方法程序(如为Click事件编写的Click程序代码);方法程序也可以独立于事件而单独存在,它在系统中被显式地调用(如ThisForm.Refresh)。事件的集合是固定的,用户不能扩充事件,但用户可扩充某一事件的方法程序,可以为事件编写代码,因此方法程序的集合是无限的。对象是面向对象式系统中运行时刻的基本成分,它是属性与行为(即数据与操作)以及与其它对象的接口的封装体。用户是通过对象的属性、事件和方法来处理对象的。第二节基类一、VFP的基类在面向对象的程序设计过程中,一切安排都是以对象为中心进行的。而对象又是通过类的实例化而实现的,因此类是面向对象编程技术的核心部分。VFP提供的一系列基类(见教材P149),支持用户基于这些类定义新类,从而简化新类的创建过程。VFP的基类按类所创建的对象是否允许包含其它对象来区分,可分为:容器类和控件类两种。按类所创建的对象在运行时是否能显示来区分,可分为:可视类和不可视类两种。控件类容器类控件Control命令按钮CommandButton容器Container表单集FormSet编辑框EditBox文本框TextBox表单Form工具栏Toolbar微调框Spinner*标头Header命令按钮组表格Grid列表框ListBox组合框ComboBox*表格列Column页框PageFrame复选框CheckBox计时器Timer*页面Page选项按钮组标签Lable图像Image*表示该类是容器类的集成部分,在类设计器中不能基于它们创建子类。带底纹的为不可视类,其余为可视类。见教材第149页。形状Shape线条Line自定义CustomOLE绑定型控件OLE容器控件*选项按钮*分隔符VFP基类的事件集合是固定的,不能进行扩充。每个类都可识别固定的默认事件集合,下表所列的是基类的最小事件集(教材P149)。事件说明Init当对象创建时被激活Destroy当对象从内存中释放时激活Error当类中的事件或方法程序运行中发生错误时激活VFP基类的最小属性集属性说明Class该类属于何种类型BaseClass该类由何种基类派生而来。例如,Form、CommandButton或Custom等ClassLibrary该类从属于哪种类库ParentClass对象所基于的类。若该类直接由VFP基类派生而来,则ParentClass属性值与BaseClass属性值相同二、容器类和控件类VFP中的类可分为两大类型:容器类和控件类。▲容器类是包容其它类的基类。将容器类的对象加入表单后,无论是在设计时,还是在运行时,都可以将容器类的对象作为一个整体进行操作,也可以分别对其包容的对象进行处理,即可以单独访问或处理容器类中的任何一个对象(容器所能包含的对象见教材P149)。▲控件类是可以包含在容器类中的基类,用于进行一种或多种的相关控制。如:命令按钮、文本框、计时器、标签等均属控件类。控件类的封装性比容器类严密,因此损失了一些灵活性。对由控件类创建的对象在设计和运行阶段都必须作为一个整体来处理,不能对构成它的各个部分单独修改和操作。注意区分“容器类”和“容器”、“控件类”和“控件”:容器类、控件类是指基类的类型;容器、控件是两个具体的基类,分别属于容器类和控件类。VFP中的对象根据所基于的类的性质,也可以分为容器对象和控件对象。容器对象可以作为其它对象的父对象(即可包容其它对象);控件对象可以包含在容器中,但不能作为其它对象的父对象(即不可包容其它对象)。第三节处理对象一、引用对象在引用对象时,必须指明对象与容器层次的关系,犹如在文件操作时,必须指出文件所在的磁盘和文件夹。可以这样说,引用对象就是提供对象的地址。对象引用分为绝对引用和相对引用两种,引用时,各个对象之间以及对象和属性之间必须用“.”进行分隔。1、绝对引用绝对引用是指从容器的最高层次引用对象,给出了对象的绝对地址。(注意教材P151和P195页上的描述)MySys.Form1.Text1MySys.Form1.PageFrame1.Page1.CommandGroup1.Command2注:此表单保存在一个名为:MySys的表单文件中。2、相对引用相对引用是指在容器层次中相对于某个容器层次的引用。相对引用通过一些关键字指明所要处理的对象。相对引用通常应用于某个对象的事件处理代码或方法程序代码中,即在某个容器对象的事件处理代码或方法程序中对所包容的对象的引用,引用时可以直接使用其对象名。VFP提供了若干个关键字来进行相对引用:ActiveForm当前活动表单ActivePage当前活动表单中的活动页面ActiveControl当前活动表单中具有焦点的控件Parent该对象的直接容器THIS该对象ThisForm包含该对象的表单ThisFormSet包含该对象的表单集注:This、ThisForm、ThisFormSet仅在方法程序或事件处理代码中使用。若当前对象为Page1,则以下均为对Option1的引用:This.Parent.Parent.OptionGroup1.Option1ThisForm.OptionGroup1.Option1注:OptionGroup1为选项按钮组的名称。VFP的系统变量_SCREEN表示屏幕对象,它把VisualFoxPro的主窗口作为一个对象来处理。_SCREEN与ActiveForm等组合可以在不知道表单名的情况下处理活动表单,例:_SCREEN.ActiveForm_SCREEN.ActiveForm.ActiveControl二、设置对象每个对象都有许多属性。通过对对象属性的设置,可以定义对象的特征或某一方面的行为。对象的大多数属性既可以在设计阶段设置,也可以在运行阶段设置,但也有一些属性是只读的。设置对象的属性的基本方法是:▲在采用可视化的方法进行对象设计时(在表单设计器中),在属性窗口中对对象属性进行设置。▲在程序代码中,用以下语法设置对象的属性:引用对象.属性=值(见教材P151举例)在属性设置中,对象的引用可以采用绝对引用或相对引用。例:MyForm.Text1.FontName=宋体This.FontSize=9ThisForm.Command1.Caption=确认MyForm.Text1.ForeColor=RGB(0,0,255)This.Parent.Parent.Text1.Enabled=.F.对同一个对象多个属性的设置可以由下列语句进行设置:WITH引用对象.属性=值……ENDWITH例:WITHThisForm.Command1.FontName=宋体.FontSize=9.Caption=确认.ForeColor=RGB(0,0,255)ENDWIT
本文标题:第6章对象模型和事件模型
链接地址:https://www.777doc.com/doc-3788749 .html