230 likes | 454 Views
第 8 章 面向对象的程序设计基础. 8.1 面向过程和面向对象的程序设计 8.2 面向对象的基本概念 8.3 VFP 中的类和对象 8.4 事件和方法程序. 第 8 章 面向对象的程序设计基础. 8.1 面向过程和面向对象的程序设计 8.1.1 面向过程的程序设计 在面向过程的程序设计中,整个系统以功能分类,它被划分成各类功能模块,各个功能模块如果需要,还必须划分为更为具体的小功能模块,直至该功能模块能以一个函数或一个过程来实现为止。它具有思路清晰、功能单一等特点,但其缺点也是很明显的,主要表现在:
E N D
第8章 面向对象的程序设计基础 • 8.1 面向过程和面向对象的程序设计 • 8.2 面向对象的基本概念 • 8.3 VFP中的类和对象 • 8.4 事件和方法程序
第8章 面向对象的程序设计基础 8.1 面向过程和面向对象的程序设计 8.1.1 面向过程的程序设计 在面向过程的程序设计中,整个系统以功能分类,它被划分成各类功能模块,各个功能模块如果需要,还必须划分为更为具体的小功能模块,直至该功能模块能以一个函数或一个过程来实现为止。它具有思路清晰、功能单一等特点,但其缺点也是很明显的,主要表现在: 1.程序代码被分为模块和函数,程序越大,在代码中出现错误的可能性也就越大,因此不便维护和修改。
2.程序设计人员需要用大量的时间去设计输入输出界面,而且设计出来的界面又不能像用户普遍使用的如WINDOWS视窗操作系统那样被接受。2.程序设计人员需要用大量的时间去设计输入输出界面,而且设计出来的界面又不能像用户普遍使用的如WINDOWS视窗操作系统那样被接受。 3.程序在执行过程中受过程的控制,会一直独占计算机的资源,难以实现多任务的操作。 由于以上这些问题,使得VFP程序设计逐渐演变发展到了OOP。现在的VFP等Windows应用软件,既提供了传统的面向过程的程序设计方法,也提供了以下的程序设计方法。
面向对象程序设计的两个基本特点是:(1) 它是可视化的编程方式。(2) 程序运行没有一定的顺序,由事件驱动。 8.1.2 面向对象的程序设计 对象是程序和数据的结合体,是VFP的一个操作单位。 对象和对象又可组成新的对象。在面向对象的程序设计方 法中,用户需要考虑的是如何创建对象,及对对象应实施 哪些操作,每个操作应完成什么功能,以完成用户提出的 所有要求。
8.2 面向对象的基本概念 在面向对象的程序设计中,最重要的概念是对象和类,它们是关系密切但又完全不同的两个概念。 8.2.1对象(object) 对象是数据和数据操作代码的组合体。对象既具有静态的属性又可具有动态的行为。在面向对象的程序设计中,对象是构成程序的基本单位,是程序的运行实体。对象可以是任何的具体事物。在VFP中,标签、表格、表单以及所有控件都可看成是应用程序中的对象。对象是应用程序中的一个处理单位。
8.2.2 类(class) 类含有某个对象的数据和操作功能,是对一组具有相同属性和方法的对象的抽象,是对象的原型。在类定义代码中可含有对象的属性、事件和方法。 类和对象是抽象和具体的关系。类包含有关对象的特征和行为信息,是对象定义的模板。对象是类的具体化和实例化,所以对象又称为类的实例(Instance)。一个类可以实例化为多个对象,各个对象都有所属类的属性、事件和方法程序,但每个对象的属性值可以不同。类是一个静态的概念,只有实例化的对象才是可运行的实体。
类具有封装性、继承性和多态性。 封装性(Encapsulation)。封装是指将对象的特性(属性)和行为(方法)包装在一起。 继承性(Inheritance)。类都可以从已有的类中派生而来,派生出的子类继承父类的全部属性和法,可以添加新的方法,也可放弃若干原有的方法。 多态性(Polymorphism)。多态性是指相同的操作可以作用于多种类型的对象上,并获得不同的结果。Visual FoxPro允许用户利用多态性。
8.2.3 类与对象的关系 类和对象关系密切,但并不相同。类包含了有关对象的共同特征和行为信息,它是对象的蓝图和框架。类是对象的抽象描述,对象是类的一个具体实例。例如,电话可以是一个类,而这个类的实例—对象,便是某一部具体的电话。 从某种程度上讲,类也是一种对象,例如学生是一类也是一个对象。类决定了对象的特征。对象可以是类的成品,类与对象是应用程序的组装模块。
8.2.4 属性 对事物性质等进行的描述称为事物的属性。属性是对象的特征,是对象某一方面的行为参数。它描述对象的状态或某一方面的行为功能,说明了对象可以完成的工作,但还没有说明如何去完成任务。状态是对象在其生命周期中某个特定阶段所处的某种境域、所表现的形态,行为是指对象在某种状态下所做的一系列处理、操作、反应。
8.3 VFP 中的类和对象 • VFP的对象所具有的属性是由派生该对象的类决定的,而且这些属性既可以在设计时指定,也可以在运行时指定。当用户打开表单或控件的属性窗口,并选择“其它”选项卡时,可能会看到涉及类定义的以下几个属性: • BaseClass(基类):VFP中内部定义的类,用户可使用它们创建 • 自定义类,如表单和所有控件都是基类,用户可在此基础上创建新类,增添需要的功能。 Class(类):派生该对象的类名。 • (3) ParentClass(父类):派生该对象的父类名。仅对自定义类有效,如果类是直接从VFP基类上派生的,则本项为空。
8.3.1 容器类容器类可以包含其它对象,并允许访问 这些对象。 这些对象无论是在运行时还是在设计时都可以单 独地操作。常用的容器类有:表单(Form)、表单集(FormSet)、列(Coumn)、命令按钮组 (CommandButton Group)、容器(Container)、表格(Grid)、选项按钮组(OptionButtonGroup)、页 (Page)、页框 (PageFrame)、工具栏 (TooBar),其中,表单集和页框是不可见类。
8.3.2 控件类 控件类中不能包含其它对象,只能加入到其它对象中。控件类的封装比容器类更为严密。当引用容器中的控件对象时必须经过容器,其格式是:容器对象.控件对象.属性。 例如,在Form1表单中设置标签abc1的Caption属性: Form1.abc1.Caption="姓名"
VFP中常用的控件类有: 复选框(CheckBox)、组合框(ComboBox)、 命令按钮(CommandButton)、编辑框(EditBox)、 图像(Image)、标签(abe)、线条(ine)、 列表框(IstBox)、选项按钮(OptionButton)、 形状(Shape)、微调(Spinner)、文本框(TextBox)、 计数器(Timer)、控件(Contro)、列标题(Header)、 OE绑定型控件(OE Bound Contro)、 OE容器控件(OE Container Contro)、 自定义类(Custom),其中计数器和自定义类是不可见类。
8.3.3 容器对象和控件对象 VFP的类有容器类和控件类之分,所以VFP中的对象也分为容器对象和控件对象(有时也称之为非容器对象)。 1.容器对象 容器对象是由容器类创建的对象,它们可以包含其它对象,并且允许用户在设计和运行时访问这些对象。
2.控件对象 控件对象也称为非容器对象,即控件对象可以包含在容器对象中,但控件类对象没有“AddObject”(添加对象)的方法程序,因此在控件对象中不能添加其它对象,即控件对象不能作为其它对象的父对象。 控件对象一般作为一个独立的部件出现,提供移动、拖放和单击等操作,用户可执行封装在控件内的方法程序。
8.4 事件和方法程序 VFP中的每个对象都是用类定义的。在VFP的“表单控件工具栏”上,控件代表类并不实际存在,直到在表单上放置了控件的对象为止。创建控件也就是在复制控件类,或者说是建立控件类的实例。这个实例就是程序中将引用的对象。
8.4.1 VFP常用事件 事件确定控件对外部条件的响应。事件由各个控件识别,再由应用程序处理。例如,命令按钮可以识别鼠标单击事件,但无法响应这个事件,除非提供了所需要的代码,即必须告诉VFP在用户单击特定命令按钮时所进行的操作。每个对象都能够识别和响应系统预先定义好的特定事件。用户不能自定义新的事件。在面向对象的程序设计中,程序的执行取决于当前所发生的事件,并由事件来驱动。什么事件发生了,便有相应的事件处理程序去处理。 事件可由用户或系统激活,多数情况下,事件是通过用户的交互操作产生的。用户可以编写具有一定功能的程序代码,以响应特定的事件。
8.4.2 VFP常用方法程序介绍 方法程序是对象能够执行的一些操作,不同的对象具有不同的操作行为。为了很好地、准确地触发并执行方法程序,配备了控件和事件;同时设置了数据环境以满足用户对使用信息数据范围的选取并构成与其他几个方面的完整配合体系。可以把属性看作是一个对象的性质参数,把事件看作是触发对象响应的指令,把方法程序看作是对象的响应动作,把数据环境看作是对象的生存与运行条件。 方法程序是一段能完成特定操作的程序代码。方法程序既可以与相应的事件相关联,例如,为Cick事件编写的方法程序代码将在Cick事件出现时被执行,也可以独立于事件而单独存在,此类方法程序必须在代码中被显式地调用。例如,命令按钮对象具有SetFocus方法程序,该方法程序的作用是将焦点放置到该按钮上。表8.4给出了VFP中常用方法程序。