第6章 De l ph i中类的应用 内容提要 区面向对象的相关概念 团类的定义 团类的成员 类的特性 区共同祖先 Tob ject简介 团 Delphi中的vCL 团自定义类 ccccccMccccccccccc:cMMH
第6章 Delphi中类的应用 内容提要 面向对象的相关概念 类的定义 类的成员 类的特性 共同祖先Tobject简介 Delphi中的VCL 自定义类
6.1面向对象的相关概念 1.对象 对象是现实世界中一类具有某些共同特性的事物的 抽象。对象是构成系统的元素,是组成问题域的事物 这里问题域指应用系统所要解决和问题。小到一个数据, 大到整个系统都是对象。对象不仅仅是物理对象,如写 字台、手机等,还可以是某一类概念实体,如操系统中 进程、室内照明的等级等都是对象 ccccccMccccccccccc:cMMH
6.1 面向对象的相关概念 1.对象 对象是现实世界中一类具有某些共同特性的事物的 抽象。对象是构成系统的元素,是组成问题域的事物。 这里问题域指应用系统所要解决和问题。小到一个数据, 大到整个系统都是对象。对象不仅仅是物理对象,如写 字台、手机等,还可以是某一类概念实体,如操系统中 进程、室内照明的等级等都是对象
2.消息 消息,就是指 Windows发出的一个通知,告诉应用程序 某个事情发生了。例如,单击鼠标,改变窗口尺寸,按下 键盘上的一个键都会使 Windows发送一个消息给应用程序 消息本身是作为一个记录传递给应用程序的,这个记录中 包含了消息的类型及其他信息。例如,对于单击鼠标所 生的消息来说,其记录类型为TMsg,同时消息记录中还包 含了单击鼠标时的坐标信息 对象进行处理及相互之间的联系,都只能通过消息传 递来实现,发送消息的对象叫发送者,接受消息的对象叫 接收者。发送者可以同时向各个对象传递消息;接受者可 同时接受多个对象发来的消息。 ccccccMccccccccccc:cMMH
2.消息 消息,就是指Windows发出的一个通知,告诉应用程序 某个事情发生了。例如,单击鼠标,改变窗口尺寸,按下 键盘上的一个键都会使Windows发送一个消息给应用程序。 消息本身是作为一个记录传递给应用程序的,这个记录中 包含了消息的类型及其他信息。例如,对于单击鼠标所产 生的消息来说,其记录类型为TMsg,同时消息记录中还包 含了单击鼠标时的坐标信息。 对象进行处理及相互之间的联系,都只能通过消息传 递来实现,发送消息的对象叫发送者,接受消息的对象叫 接收者。发送者可以同时向各个对象传递消息;接受者可 同时接受多个对象发来的消息
3类 类定义的是对象的类型,是对一组性质相同的对象的描述 它用于描述对象的所有性质,包括外部特性和内部实现。通过 消息及相应的处理能力的描述,定义对象的外部特性;通过 内部状态和处理能力的实现来描述定义对象的内部实现。在 程序运行时,类被作为样板建立对象。对象和类的关系,就 如同前面介绍的变量和类型的关系。 4.继承 所谓继承就是一个新的类类型,不必什么都重新定义, 只需要继承一个已有的类型再加上自己的成员就构成一个新 的类类型。继承是一个对象可以获得另一个对象特性的机制 类是一种层次结构,类的上层可以有子类。当某个类定义了 某个特征后,所有在它下面的类都不得包启了该特征。类此 子类直接继承其父类的全部描述,这叫传递性。类可以有多 个父类,这叫多重继承,如果只能有一个父类,叫简单继承。 Delphi中的类是简单继承 ccccccMccccccccccc:cMMH
3.类 类定义的是对象的类型,是对一组性质相同的对象的描述. 它用于描述对象的所有性质,包括外部特性和内部实现。通过 消息及相应的处理能力的描述,定义对象的外部特性;通过 内部状态和处理能力的实现来描述定义对象的内部实现。在 程序运行时,类被作为样板建立对象。对象和类的关系,就 如同前面介绍的变量和类型的关系。 4.继承 所谓继承就是一个新的类类型,不必什么都重新定义, 只需要继承一个已有的类型再加上自己的成员就构成一个新 的类类型。继承是一个对象可以获得另一个对象特性的机制。 类是一种层次结构,类的上层可以有子类。当某个类定义了 某个特征后,所有在它下面的类都不得包启了该特征。类此 子类直接继承其父类的全部描述,这叫传递性。类可以有多 个父类,这叫多重继承,如果只能有一个父类,叫简单继承。 Delphi中的类是简单继承
62类的定义 从程序设计的角度讲,类是一种数据类型, 是一种特殊的数据类型,不过类定义了一种由字 段、属性和方法3部分构成的数据结构。声明一个 类的过程,也就是创建字段( Fields)、属性 ( Property)、方法( Method)的过程。 字段:是类的内部数据变量 ≯属性:是类提供给外部使用的数据变量 方法:是类中定义的函数和过程 者统称为类的成员。类成员字段、属性与方法 在类中有不同的作用。下面首先学习如何定义类。 ccccccMccccccccccc:cMMH
6.2 类的定义 从程序设计的角度讲,类是一种数据类型, 是一种特殊的数据类型,不过类定义了一种由字 段、属性和方法3部分构成的数据结构。声明一个 类的过程,也就是创建字段(Fields)、属性 (Property)、方法(Method)的过程。 ➢字段:是类的内部数据变量。 ➢属性:是类提供给外部使用的数据变量。 ➢方法:是类中定义的函数和过程。 三者统称为类的成员。类成员字段、属性与方法 在类中有不同的作用。下面首先学习如何定义类
621类的定义 类类型声明的一般形式: e 类名=Clas(父类名) [类成员 End (1)类名可以是任何合法的标识符,不过Dlph有一个约定,使 用大写字母T作为前缀来标识类类型。 (2) Class是保留字,它表明声明的类型是一个类类型。 (3) Class/后的括号内为父类名,表明当前声明的类派生于父类名 指定的类 (4) Class后的括号是可选的,如果不指明其父类则表示新声明的 类直接从Deph的 Tobject类继承而来。 ccccccMccccccccccc:cMMH
6.2.1 类的定义 类类型声明的一般形式: Type 类名=Class(父类名) [类成员] End; (1)类名可以是任何合法的标识符,不过Delphi有一个约定,使 用大写字母T作为前缀来标识类类型。 (2)Class是保留字,它表明声明的类型是一个类类型。 (3)Class后的括号内为父类名,表明当前声明的类派生于父类名 指定的类。 (4) Class后的括号是可选的,如果不指明其父类则表示新声明的 类直接从Dephi的Tobject类继承而来
ccccccMccccccccccc:cMMH
622类的实例化 类的实例化就是利用类的方法创建对象的过程。方法: (1)首先声明对象变量,形式如下 Va对象变量名:类名: (2)创建对象变量,分两种情况。 ①如果类是直接由 Tobject继承而来,就用如下形式创建 对象: 对象变量名:=类名 Create; ②如果类重载或覆盖了 Tobject的构造方法( Create), 则创建对象的语句形式如下: 对象变量名:=类名构造方法(参数表); 例如,如下代码就是 Average中创建一个对象的过程: Var average: Average;∥声明对象变量 average = Average, Create ∥创建对象实例 ccccccMccccccccccc:cMMH
6.2.2 类的实例化 类的实例化就是利用类的方法创建对象的过程。方法: (1)首先声明对象变量,形式如下: Var对象变量名:类名: (2)创建对象变量,分两种情况。 ①如果类是直接由Tobject继承而来,就用如下形式创建 对象: 对象变量名:=类名.Create; ②如果类重载或覆盖了Tobject的构造方法( Create), 则创建对象的语句形式如下: 对象变量名:=类名.构造方法(参数表); 例如,如下代码就是Taverage中创建一个对象的过程: Var average:Taverage; //声明对象变量 average:=Taverage,Create; //创建对象实例
623类运算符 1类型判断运算符is is运算符用来检测一个类是否与另一个类兼容,即左操作符是否是右 操作规程符的同类或子类,其语法形式如下 对象变量is类名 如果返回值为True,那么对象变量是类或其派生类的一个实例。如 果对象为ni,返回值为 false。在 Windows程序设计中,经常使用is运算 符判断组件的类型,例如: For: o to comonemtcount -1 do If Components is Tedit then redit(components[l).Text 以上代码,逐一检测窗体中的组件是否为编辑框,如果某组件是编辑 框,则清空该编辑框。 ccccccMccccccccccc:cMMH
6.2.3 类运算符 1.类型判断运算符 is is 运算符用来检测一个类是否与另一个类兼容,即左操作符是否是右 操作规程符的同类或子类,其语法形式如下: 对象变量 is 类名 如果返回值为True,那么对象变量是类或其派生类的一个实例。如 果对象为nil,返回值为false。在Windows程序设计中, 经常使用is运算 符判断组件的类型,例如: For I:0 to ComonemtCount-1 do If Components[i] is Tedit then Tedit(Components[I]).Text:=“; 以上代码,逐一检测窗体中的组件是否为编辑框,如果某组件是编辑 框,则清空该编辑框
2.类型强制转换运算符as as运算符是用来进行强制类型转换的,其语法形式如下: 对象变量as类名 as在进行类型强制转换时首先测试,然后进行转换,若 转换不成功,则引起异常 EInvalidcast。 例如, Components[i] as Tedit这条语句相当于以下 语句 If Components i is Tedit then Tedit(Components liD) Else Raise elnvalidCast Create ccccccMccccccccccc:cMMH
2. 类型强制转换运算符as as运算符是用来进行强制类型转换的, 其语法形式如下: 对象变量 as 类名 as在进行类型强制转换时首先测试,然后进行转换,若 转换不成功,则引起异常ElnvalidCast。 例如,Components[i] as Tedit 这条语句相当于以下 语句: If Components [i] is Tedit then Tedit(Components [i]) Else Raise ElnvalidCast.Create;