6.1 面向对象程序设计概述
1. 基本概念
面向对象的程序设计是通过对类、子类和对象等的设计来体现的,类是面向对象程序设计技术的核心。
类:定义了对象特征以及对象外观和行为的模板。
类的特征:
封装性:隐藏了类中对象的内部数据或操作细节,只看到外表信息。
继承性:
任何类都可以从其它已有的类中派生,新类保持了父类中的行为和属性,但增加了新的功能。体现了面向对象设计方法的共享机制。
多态性:相同的操作可作用于多种类型的对象上,并获得不同的结果。
抽象性:提取一个类或对象与众不同的特征,而不对该类或对象的所有信息进行处理。
基类:
系统本身提供的类称为基类。基类包括容器类和控件类。容器类是其他对象的集合,如表格、选项按钮组;控件类是单一的对象,不包含其他对象,如命令按钮、文本框。
子类:
以其他类定义为起点,对某一对象所建立的新类。新类将继承任何对父类所做的修改。
类库:
存储类的文件,每一个以可视方式设计的类都存储在一个类库中。类库文件的扩展名为 .VCX 。
对象:是类的一个实例,包括了数据和过程。具有所在类所定义的全部属性和方法。
VFP有两种对象:容器对象和控件对象。
属性:控件、字段或数据库对象的特性。
事件:由对象识别的一个动作。
方法:与对象相联系的由程序执行的一个处理过程,即处理事件的一组代码。
用户不可以为对象创建新的事件,但可以创建新的方法程序。
2. Visual FoxPro 基类
容器命令组控件微调标签表单命令按钮复选框OLE 容器控制线条表单集选项组列表框OLE 绑定型控制分隔符 #表格选项按钮 #文本框自定义形状标头 #页框组合框工具栏图象列 #页面 #编辑框计时器从下述 Visual FoxPro 基类中,可以派生子类或创建对象。
注:# 这些类是父容器的集成部分,在类设计器中不能子类化。
基类事件的最小集合
事件
说明
Init当对象创建时激活。Destroy当对象从内存中释放时激活。Error当类中的事件或方法过程中发生错误时激活。
基类属性的最小集合
属性
说明
Class该类属于何种类型。BaseClass该类由何种基类派生而来,例如 Form、Commandbutton 或 Custom 等ClassLibrary该类从属于哪种类库。ParentClass对象所基于的类。若该类直接由 Visual FoxPro 基类派生而来,则 ParentClass 属性值与 BaseClass 属性值相同。
容器类
容器类可以包含其他对象,并且允许访问这些对象。每种容器类所能包含的对象如下。
容器
能包含的对象
命令按钮组命令按钮容器任意控件控件任意控件表单集表单、工具栏表单页框、任意控件、容器或自定义对象表格列标头对象以及除表单、表单集、工具栏、计时器和其他列对象以外的任意对象表格表格列选项按钮组选项按钮页框页面页面任意控件、容器和自定义对象工具栏任意控件、页框和容器
[1] [2] [3] [4] 下一页
6.2 类的创建
1. 创建类的方法
(1)类设计器
(2)表单设计器
(3)编程方式
2. 用类设计器创建类
使用“类设计器”能够可视化地创建并修改类。 类存储在类库 (.VCX) 文件中。
(1) 创建新类
可以用三种方法(文件菜单、项目管理器、CREATE CLASS命令)打开类设计器并在其中创建新类,且在设计时就能看到每个对象的最终外观。
步骤:
单击文件菜单中的新建 → 选择类,新文件 → 在对话框中给出新类的名称、新类基于的类以及保存新类的类库 → 进入类设计器 <→ 根据需要在基类的基础上进行所需修改 → 关闭设计器并确定保存。
(2) 为类指定设计时的外观
1) 为类设置一个工具栏图标
在类设计器中从类菜单中选择类信息 → 打开类信息对话框,在工具栏图标框中键入 .BMP 文件的名称和路径。
附注:
工具栏图标的 .BMP 文件必须是 15 x 16 象素点大小。如果图片过大或过小,它将被调整到 15 x 16 象素点,图形可能变形。
2) 为类设置一个容器图标
打开类设计器从类菜单选择类信息 → 在容器图标框中键入将在表单设计器中的控件工具栏按钮上显示的 .BMP 文件名称和路径。
(3) 创建类库
可以用三种方法创建类库。
1) 在创建类时,在新类对话框的“存储于”框中指定一个新的类库文件。
2) 使用 CREATE CLASS 命令,同时指定新建类库的名称。
例如,下面的语句创建了一个名为 myclass 的新类和一个名为 new_lib 的新类库:
CREATE CLASS myclass OF new_lib AS CUSTOM
3) 使用 CREATE CLASSLIB 命令。
例如,在命令窗口键入下面的命令,可以创建一个名为 new_lib 的类:
CREATE CLASSLIB new_lib
(5) 修改类定义
在创建类之后,还可以修改它,对类的修改将影响所有的