




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Delphi面向对象程序设计Delphi面向对象程序设计第一章 Delphi基础知识本章内容Borland公司和Delphi的传奇历史编程思想和编程工具的辩证关系Delphi7的集成开发环境Delphi编程的一般方法和步骤Delphi工程、窗体和单元文件Delphi面向对象程序设计1.0 Borland公司和Delphi的传奇历史创始人: Niklaus Wirth与Borland并无直接关系,是他发明了Pascal语言。Phillipe Kahn也是他的学生。Delphi语言的演变过程是:Pascal、Object Pascal、Delphi。Niklaus Wirth在1984年获得计算机
2、科学领域最高奖:图灵奖第一章 Delphi基础知识下一页返回Delphi面向对象程序设计第一章 Delphi基础知识1.0 Borland公司和Delphi的传奇历史创始人: 菲力浦凯恩(Phillipe Kahn)是Niklaus Wirth的学生。在美国加利福尼亚州创建了Borland国际。当时就买出了100多万份Pascal拷贝。在C语言问世前,Pascal是风靡全球,最受欢迎的语言之一,创下了发行拷贝数最多的世界纪录。下一页上一页返回Delphi面向对象程序设计1.0 Borland公司和Delphi的传奇历史创始人: Anders Hejlsberg是Borland所有Pascal编
3、译器的架构师,Delphi前3个版本的架构师,C#的设计者,.Net的架构师。推荐书籍:Borland传奇李维著第一章 Delphi基础知识返回上一页下一页Delphi面向对象程序设计1.1 编程思想与编程工具的辩证关系 开发工具之于程序员如同剑之于剑客,而程序员的“剑招”就是自身的编程修养、思想、理念等。只有扎扎实实地打好基础,具备良好的编程思想,才能体会“一剑西来,天外飞仙”的酣畅淋漓。 第一章 Delphi基础知识返回上一页下一页Delphi面向对象程序设计第一章 Delphi基础知识1.2 Delphi7的集成开发环境下一页返回上一页Delphi面向对象程序设计第一章 Delphi基础
4、知识1.2 Delphi7的集成开发环境代码洞察(Code Insight)技术: 代码完善(Code Completion) 代码参数提示(Code Parameters) 代码模板专家( Code Templates) 符号洞察(Tooltip Symbol Insight) 返回上一页下一页Delphi面向对象程序设计第一章 Delphi基础知识1.3 Delphi编程的一般方法和步骤控制台应用程序可视化应用程序组件的命名方式:组件前缀组件功能 补充例程: 欢迎和时间返回上一页下一页Delphi面向对象程序设计第一章 Delphi基础知识1.4 Delphi工程、窗体和单元文件Delph
5、i的工程文件: 扩展名为.dpr,是整个应用程序的主程序。Delphi的窗体文件: 扩展名为.dfm,保存了窗体上各个对象(包括窗体本身)的属性设置,可以以窗体和文本两种方式打开。Delphi的单元文件: 扩展名为.pas,一个工程中可以包含若干单元,一个窗体文件对应一个单元文件,但是也可以有没有窗体的单元文件。返回上一页下一页Delphi面向对象程序设计工程文件的组成program PHello;uses Forms, UMain in UMain.pas frmHello; /单元模块说明$R *.resbegin /主程序开始 Application.Initialize; Applic
6、ation.CreateForm(TfrmHello, frmHello); /创建主窗体 Application.Run; /启动主程序,将控制权交给主窗体end. /主程序结束返回上一页下一页Delphi面向对象程序设计单元文件的组成unit UMain; /单元名称interface /接口部分uses /引用的外部单元,uses关键字类似于C/C+中的include Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TfrmHello = c
7、lass(TForm) /声明窗体类 btnWelocome: TButton; /窗体类的成员 btnClose: TButton; edtDisplay: TEdit; procedure btnCloseClick(Sender: TObject); /成员事件过程的声明 procedure btnWelocomeClick(Sender: TObject); procedure FormCreate(Sender: TObject); private Private declarations public Public declarations end; /类声明结束var frmHe
8、llo: TfrmHello; /声明窗体实例implementation /实现部分$R *.dfmprocedure TfrmHello.btnCloseClick(Sender: TObject); /成员事件过程的实现begin Close;end;end. /单元结束返回上一页Delphi面向对象程序设计第二章 Object Pascal语法基础本章内容保留字、指令字和标识符注释常量和变量常用数据类型运算符与表达式语句过程和函数Delphi面向对象程序设计第二章 Object Pascal语法基础2.1 保留字、指令符和标识符保留字(Reserve Words)是由系统规定的具有特定
9、意义和用途的单词,在编程中不能被重新定义或作其它用途。指令符(Directives)也是由系统规定的具有特定意义的单词,但它们可以被重新定义。一旦被重新定义,则在该定义的作用域之内就采用新的含义。 保留字和指令符没必要死记硬背,熟悉后就知道了。下一页返回Delphi面向对象程序设计第二章 Object Pascal语法基础2.1 保留字、指令符和标识符标识符(Identifiers)是用来表示常量、变量、属性、对象、类型、过程、函数、单元、对象等语法实体的名称的符号。Object Pascal中的标识符的命名规则如下:标识符可以由字母(AZ、az)、数字(09)、下划线组成。标识符必须由字母或
10、下划线开头。标识符的长度不应该超过255个字符,如果超过,将只有前255个字符有效。不能使用保留字作为自定义标识符,尽量不要使用指令字作为自定义标识符。下一页返回上一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.1 保留字、指令符和标识符注意: (1)Object Pascal中,标识符不区分大小写。 (2)在Delphi的库文件中还预先定义了一些标识符,如标准数学函数Sqrt,Sin,标准数据类型如Boolean、Char等,应尽量避免使用这些标识符作为自定义的标识符,以免引起混淆。 (3)使用标识符时,必须先声明再使用,否则编译时,系统会显示错误信息,提示该标
11、识符没有定义。下一页返回上一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.2 注释Delphi中支持三种格式的注释:大括号: “”和“”;小括号和星号的组合: “(*”和“*)”;双斜线:“/”。 在编写程序的过程中,应养成良好的注释习惯,以增强程序的可读性。返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.2 注释 作为良好的编程规范,在程序代码单元文件顶端必须拥有本单元文件的“单元说明”注释。对于常量、结构类型、函数/过程、自定义变量、代码段功能块、关键语句等有含义的代码部分,必须有注释行进行详细说明。注释行可在需说明部
12、分行后以“/XXXXXXXX”方式添加单行注释,也可在需说明部分行上以“XXXXXXXX”方式添加多行。 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.2 注释单元头定义,添加到每个单元的前面。*单元名称:功能描述:作者:软件名称:版本:公司名称:刀剑如梦软件创作室* 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.3 常量与变量常量在程序运行过程中其值不会改变,可以分为直接常量和符号常量两种。注意:字符常量和字符串常量均以单引号括起来,如:a,Hello声明符号常量的语法如下:Const ; ;返回上一页下
13、一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.3 常量与变量变量在程序运行中其值可以改变。变量有三大要素:变量名、数据类型、变量值变量必须先声明后使用,声明变量的语法如下:var :; :;演示:常量和变量的使用返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4 数据类型 数据类型决定了变量的取值范围以及能够参与的运算。 Object Pascal语言是一种“强数据类型”语言。返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4 数据类型简单数据类型字符串型结构类型指针类型过程类型
14、变体类型 整型字符型布尔型枚举型子界型实型集合类型数组类型记录类型文件类型类类型原类类型接口类型有序类型返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.1 简单数据类型 包括整型、字符型、布尔型、枚举型、子界型和实型。其中,整型、字符型、布尔型、枚举型和子界型这五种被称为有序数据类型(Ordinal)。 其中,整型、字符型、布尔型、实型,再加上字符串型是Object Pascal内部预先定义好的数据类型,可以直接使用;其它类型必须先作类型定义后才能使用。返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.1
15、 简单数据类型 对于有序数据类型,常用的操作函数如下表所示:函数参数返回值Dec有序类型变量变量减1后的值Inc有序类型变量变量加1后的值Pred有序表达式表达式前驱的值Succ有序表达式表达式后继的值Ord有序表达式有序表达式的值Low有序类型标识符或有序类型变量该类型的最小值High有序类型标识符或有序类型变量该类型的最大值Odd有序表达式判断是否为奇数返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.1 简单数据类型 整型(Integer):整型数据类型描述了整个数字集合的一个子集。 Delphi支持多种整型数据,请注意从取值范围、占用存储空间
16、、有无符号等方面区别这些不同的整型。演示:整数数据类型的大小和范围 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.1 简单数据类型 字符型(Character):字符型是存储单个字符数据的类型 。 常用的字符型为Char。 常量字符可用代表它们的符号表示,如k,也可以用数字符号表示,如#78。后者还可以用Chr函数表示, Chr函数返回数字对应于AnsiChar或WideChar中的字符值,如Chr(78)返回值为小写字母k。函数Ord则用于获得字符在其字符集中的序号。 下面列出了一些常用的特殊字符#9跳格(Tab键)#10换行#13回车(Ent
17、er键)返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.1 简单数据类型 布尔型(Boolean):布尔型数据用于逻辑运算,表示非真即假的情况。布尔型变量的值为系统预定义的常量True和False,常用的布尔型为Boolean。 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.1 简单数据类型 枚举类型(Enumerated Type):枚举类型采用列举出该类型所有可能取值的方式定义了一个有序的值的集合,其定义语法格式为:type =(值1,值2, ,值n);例如:type weekday=(Sunda
18、y,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);注意:枚举类型也是有序类型。 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.1 简单数据类型 子界类型(Subrange Type):子界类型定义了某种类型的取值范围,是另一种有序类型的子集,其定义语法格式为:type =起始值.终止值;例如:type MyNumber=0.128;注意:子界类型也是有序类型。 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.1 简单数据类型 实型(Real):实
19、数类型定义了一个可以按照浮点格式进行描述的数字的集合。 常用的实数类型为Real。 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.2 字符串类型(String) 字符串类型用于表示一个字符的序列。常用的字符串类型为String,例如: var s:string; begin s:=Hello; end; 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.3 结构类型(Structured Type) 集合类型(Set Type):集合类型是同种有序类型的值的集合,该有序类型为集合类型的基类型。其定义的语
20、法格式为:type =set of ;例如:type TSomeInts=1.250;/定义子界类型TSomeInts TIntSet=set of TSomeInts;/定义集合类型TIntSet,其基类型为TSomeIntsVar IntSet1=TIntSet;begin IntSet1= 1, 3, 5, 7, 9; end;返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.3 结构类型(Structured Type) 数组类型(Array Type):数组类型表示的是同类数据的集合。数组类型的数据每个元素都有一个唯一的下标值,可以通过在方
21、括号中填入下标值的方式来访问数组中的元素。数组类型定义的语法格式为:type =array下标范围 of ;例如,下面的代码定义了一个有10个整型元素的数组:type TMyArr = array 1.10 of Integer;返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.3 结构类型(Structured Type) 数组既可以在声明时指定其大小,也可以在运行时动态分配内存改变大小,即动态数组。例如:type TMyArr1 = array1.10 of integer; /一维静态数组 TMyArr2 = array1.10,1.5 of
22、integer; /二维静态数组 TMyArr3 = array of integer; /一维动态数组 TMyArr4 = array of array of integer; /二维动态数组返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.3 结构类型(Structured Type) 数组在使用时常常会用到Low和High函数来获取数组的下标和上标,同时,数组的使用常会和循环结构结合起来,例如:Var Arr1: array1.10 of integer; I,Sum:integer;begin Sum:=0; For I:=Low(Arr1)
23、 to High(Arr1) do begin Arr1I:=I; sum:=sum+Arr1I; end; ShowMessage(Sum is +IntToStr(Sum);end;返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.3 结构类型(Structured Type) 对于动态数组而言,在使用前,需要调用SetLength过程设置数组的长度,例如:var A:array of integer; I,Sum:integer;begin Sum:=0; SetLength(A,10); for I:=Low(A) to High(A) do
24、 begin AI:=I; Sum:=Sum+AI; end;end;返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.3 结构类型(Structured Type) 记录类型(Record):记录类型类似于C语言中的结构体类型,可以用来保存一组不同数据类型的信息,记录中的每个成员(域),有它自身的数据类型。声明记录类型的语法格式为:type = record Field1:FieldType1; Field2:FieldType2; end; 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.3 结构类型
25、(Structured Type)下面的例子说明了记录类型的使用方法: type TStudent = record StNumber:integer; StName:string; StScore:real; end; var Student1: TStudent;/声明TStudent类型的变量Student1。/为记录类型的变量Student1赋值 Student1.StNumber:=1000; Student1.StName:=张三; Student1.StScore:=85.5; 需要注意的是,记录类型的变量不能在定义变量的时候为其赋初值。 返回上一页下一页Delphi面向对象程序
26、设计第二章 Object Pascal语法基础2.4.4 指针类型(Pointer) 指针是存放指定类型变量内存地址的变量,即指针类型的变量指向的是内存空间的地址。下面的例子说明了指针类型的简单用法:Var P:integer; X:integer;begin X:=100; P:=X;/将整型变量X的地址赋值给指针变量P Writeln(x=,P);/输出P所指向地址中的内容,即X的值 Readln;end; 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.5 运算符与表达式 Object Pascal中的运算符可以分为算术运算符、逻辑运算符、关系运
27、算符、位运算符、指针运算符和集合运算符等。每种运算符结合其操作数的数据类型能够实现特定的功能。 表达式是由常量、变量、数值、运算符和函数调用等按照一定的语法规则组合起来的,可以用于确定赋给一个变量的值、计算函数或过程的参数、或判断一个条件等。 注意:使用运算符要注意优先级的问题。返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.5.1 算术运算符 包括、*、/、div 、mod 。注意: 1.“+”和“-”运算符。可以放在操作数前,表示正数和负数。 2. “/”和“div”和“mod”运算符。“/”运算符进行浮点除,其操作数既可以是整型也可以是实型,运算
28、结果是实型;“div”运算符进行整除,要求两个操作数都是整型,运算结果为经过四舍五入后得到的整数值;取模“mod”运算符也要求两个操作数都是整型,运算结果为两数相除后的余数。这三个运算符都要求第二个操作数的值不能为0。 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.5.2 逻辑运算符 包括not、and、or、xor 。 逻辑运算符的作用是进行逻辑运算,其操作数类型都要求是逻辑型,运算结果也是逻辑型。其中,not运算符的作用是逻辑取反;and运算符的作用是逻辑与;or运算符的作用是逻辑或;xor运算符的作用是逻辑异或。 返回上一页下一页Delphi面
29、向对象程序设计第二章 Object Pascal语法基础2.5.3 关系运算符 包括=、=。 关系运算符反映的是两个操作数之间的关系,其操作数可以是一般的数据类型,但运算结果只能是True和False两种逻辑型。注意:在Object Pascal中,判断不等使用的运算符是“”,而其它语言,如C语言中,使用的是“!=”;还要注意判断相等使用的“=”和赋值号“:=”之间的区别。返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6 语句 在Object Pascal中,语句是由关键字、运算符和操作数等组成的,并且以分号“;”结尾。 还可以将多条语句用“begi
30、nend ”括起来,称为复合语句。 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.1 赋值语句 在Object Pascal中赋值号是“:=”,表示将赋值号右边表达式的值赋给左边的变量。注意: 1.不同语言中的赋值号不同,例如C语言中赋值使用“=”,而在Object Pascal中“=”是关系运算符,表示判断是否相等。 2.赋值符号左边必须是变量,不能是常量或者表达式。 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.2 条件语句在Object Pascal中,条件语句有两种基本形式: if语句和ca
31、se语句。1.If语句 If语句有两种基本形式:if 条件表达式 then 语句if 条件表达式 then 语句1 else 语句2 对于前者而言,仅当条件表达式的值为真,即条件满足时,语句才执行;对于后者,当条件表达式的值为真时,执行语句1,为假时,执行语句2。返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.2 条件语句2.case语句 Case语句执行的是对一个结果的多种分支进行判断,由Case语句中表达式的值来决定具体执行哪个操作。当if语句非常复杂的时候,可以考虑用Case语句来代替它。Case语句的语法格式为:case SwitchExp
32、ression of Case1:Expression1; Case2:Expression2; CaseN:Expressionn;else Statement;end;返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.2 条件语句2.case语句注意:SwitchExpression应该是一个有序类型的表达式(如整型、字符型、布尔型、子界类型等),不能是实型值。caseN的值也应该是一个有序类型的值。而且每个值必须是常量,且必须是唯一的。返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.3 循环语句 循
33、环控制语句的作用是为了多次执行某个或某些语句,以大大缩短程序的源代码,并增加程序的可读性。 Delphi中的循环控制语句主要是fordo、repeatuntil和whiledo语句。返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.3 循环语句fordo循环: Object Pascal中的for循环有两种方式,一种是循环变量增1,即: for 循环变量:=循环变量初值 to 循环变量终值 do 循环体; 另一种是循环变量减1,即: for 循环变量:=循环变量初值 downto 循环变量终值 do 循环体;在to循环中,循环变量的初值必须小于终值,
34、而在downto循环中,循环变量的初值必须大于终值。对于那些已知循环次数的问题来说,for循环是非常适合的。 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.3 循环语句repeatuntil循环: repeatuntil是直到型循环,它的语法格式为: repeat 循环体; until 循环条件;返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.3 循环语句Whiledo循环: Whiledo是当型循环,它的语法格式为: while 循环条件 do 循环体;请注意比较repeatuntil和Whiled
35、o循环二者在循环体执行次数、循环终止条件方面的差别。返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.3 循环语句Break和Continue语句 二者用于改变循环执行的流程。Break语句用来直接中断循环,Continue语句则用来跳出当次循环,而直接回到循环条件处进行判断,或者在for循环中,使循环变量直接增加或减小1,然后继续循环(除非循环条件不满足或循环变量达到了上限)。这和C语言中的Break、Continue语句作用相同。 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.4 With语句 wi
36、th语句的作用主要是用来简化代码的。例如下面的代码: Form1.Canvas.Pen.Width:=2; Form1.Canvas.Pen.Color:=clRed;可以用with语句来简化为: with Form1.Canvas.Pen do begin Width:=2; Color:=clRed; end; 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.7 过程与函数 过程与函数是一个相对独立的语句块,能够实现特定的功能,可以被其他程序块调用,类似于C语言中的子程序。 二者之间最大的差别是:函数在执行后有一个返回值,而过程则没有返回值。因此,
37、函数可以作为表达式来使用。 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.7.1 过程的声明过程声明的语法格式如下:procedure 过程名(形式参数列表);begin 过程体;end; 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.7.2 函数的声明函数声明的语法格式如下:function 函数名(形式参数列表):返回值类型;begin 函数体;end; 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.7.3 过程与函数的参数 过程与函数的形参和实参之间的传递有
38、传值和传地址两种方式。 传值方式是缺省的参数传递方式:即将实参的值拷贝压入栈中,而函数或过程使用和操作的都是栈中的拷贝值,而不是原始值。因此在函数或过程中对参数的改变并不会影响到实参本身。 如果在过程和函数声明时,在形参名前加var保留字进行说明的话,就是传地址方式,也称为引用参数。当通过引用传递参数时,是直接引用参数原始值,函数或过程使用和操作的都是原始值,因此,能够在函数或过程中改变实参的值。 返回上一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.7.4 过程与函数的调用 函数或过程调用时,要求实参与形参数量相同,顺序相同,类型相容,否则会出现编译错误或
39、结果错误。返回上一页Delphi面向对象程序设计第三章 Delphi面向对象编程思想本章内容面向对象程序设计的基本概念Delphi中类的声明、实现和使用构造方法和析构方法Delphi中类的继承性和应用Delphi中类的多态性和应用Delphi中抽象方法和抽象类的应用Delphi中类操作符的应用Delphi面向对象程序设计第三章 面向对象编程思想3.0 面向对象程序设计的基本概念3.0.0 什么是面向对象程序设计OOP(Object Oriented Programming)?下一页返 回Delphi面向对象程序设计3.0 面向对象程序设计的基本概念OOP有以下几个基本观点:客观世界由对象组成,
40、任何客观事物或实体都是对象,复杂的对象可以由简单对象组成。具有相同数据和操作的对象可归为一个类,对象是类的一个实例。类可以派生出子类,子类继承父类的全部特性(数据和操作),又可以有自己的新特征。子类和父类构成层次结构。第三章 Delphi面向对象编程思想下一页上一页返 回Delphi面向对象程序设计3.0 面向对象程序设计的基本概念OOP有以下几个基本观点:对象之间通过消息传递相互联系。类具有封装性,其数据和操作等对外界是不可见的,外界只能通过消息请求某些操作,提供所需服务。 面向对象对象类继承通信第三章 Delphi面向对象编程思想下一页上一页返 回Delphi面向对象程序设计3.0.1 面
41、向对象方法的发展初始阶段 Simula语言是第一个里程碑,引入了类的概念和继承机制;Smalltalk语言发展阶段 C+为代表成熟阶段 面向对象分析和设计技术走向实用,最终形成了从分析、设计到编程、测试与维护一整套的软件工程体系第三章 Delphi面向对象编程思想下一页上一页返 回Delphi面向对象程序设计3.0.2 对象(Object) 系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,由一组属性和对属性的操作方法(服务)组成。属性:描述对象的静态特征的数据项方法:描述对象的动态特征的操作序列 对象属性方法第三章 Delphi面向对象编程思想下一页上一页返 回Delphi面向对象
42、程序设计3.0.3 类(Class) 具有相同属性和方法的一组对象的集合,为该类的全部对象提供了统一的抽象描述,好比一个对象模板,用它可以产生多个对象。 类和对象的关系第三章 Delphi面向对象编程思想下一页上一页返 回Delphi面向对象程序设计3.0.4 封装(Encapsulation) 把对象的属性和方法结合成一个独立的系统单位,并尽可能隐藏对象的内部细节。 封装的概念第三章 Delphi面向对象编程思想下一页上一页返 回Delphi面向对象程序设计3.0.5 继承(Inheritance) 子类可以自动拥有父类的全部属性和方法。 类的继承第三章 Delphi面向对象编程思想下一页上
43、一页返 回Delphi面向对象程序设计3.0.6 消息(Message) 对象发出的服务请求,一般包含提供服务的对象标识、服务标识、输入信息和应答信息等信息。 消息驱动第三章 Delphi面向对象编程思想下一页上一页返 回Delphi面向对象程序设计3.0.6 多态性(Polymorphism ) 在父类中定义的属性或服务被子类继承后,可以具有不同的数据类型或表现出不同的行为。第三章 Delphi面向对象编程思想下一页上一页返 回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用3.1.1 类的声明类声明的语法格式如下:type 类名 = class(基类) 数据成员声明
44、过程和函数声明 属性声明 end; 第三章 Delphi面向对象编程思想下一页上一页返 回Delphi面向对象程序设计3.1.1 类的声明注意: 1.类名可以为任何合法的标识符,但习惯上一般以大写的字母“T”开头,以和Borland公司的编码风格吻合; 2.class为保留字,表示声明的是类类型; 3.class保留字后的括号中是基类名,表示当前声明的类是从该基类继承,如果类声明中省略基类名,则当前声明的类缺省从根类TObject类继承。 第三章 Delphi面向对象编程思想下一页上一页返 回Delphi面向对象程序设计3.1.1 类的声明类声明示例:type THuman = class(T
45、Object) private Fname : String; FAge : Integer; public procedure SetAge(Value : integer); function GetName : string; procedure SetName(Value : string);procedure SayHello(Words : string); property Age : integer read Fage write SetAge; end;第三章 Delphi面向对象编程思想下一页上一页返 回Delphi面向对象程序设计3.1.2 类的实现 类的实现实际上是类的
46、方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。 第三章 Delphi面向对象编程思想下一页上一页返 回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用类的实现 即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。 第三章 Delphi面向对象编程思想3.1.3 类的使用 使用类前需要先创建类的对象实例,再通过该对象实例去访问域、属性和方法以完成类的各种操作。具体步骤如下:1.声明类的一个
47、变量,即类的对象变量。这时可以将类作为一种用户自定义的数据类型来看待;2.调用类的构造方法来生成类的对象实例,并为对象在内存中分配资源,将对象变量的隐含指针指向该内存的首地址。类的构造方法一般命名为Create。3.对类的对象实例进行操作、使用。可以修改对象的属性或调用对象的方法。形式形如:对象名属性名或对象名方法名(参数)。4.对象使用完毕后,调用类的析构方法来删除对象并释放相应的内存资源。析构方法一般命名为Destroy,我们一般会使用Free过程来间接调用类的析构方法,以避免删除不存在的对象而出错。 下一页上一页返 回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用
48、类的实现 即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。 第三章 Delphi面向对象编程思想3.2 构造方法和析构方法3.2.1 构造方法 构造方法是类中特殊的创建和初始化对象实例的方法。构造方法的声明与普通的过程类型声明类似,但是使用Constructor保留字代替Procedure,构造方法的方法名可以是任何合法的标识符,但一般来说,我们都用Create作为构造方法的方法名。 下一页上一页返 回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用类的实现 即类的方法成员的
49、实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。 第三章 Delphi面向对象编程思想3.2 构造方法和析构方法3.2.2 析构方法 析构方法用于释放对象实例所占用的内存。析构方法的声明和过程方法类似,只是使用保留字destructor。析构方法的方法名一般为Destroy。 下一页上一页返 回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用类的实现 即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分
50、开。 第三章 Delphi面向对象编程思想3.3 Delphi中类的继承性和应用 类的继承机制提供了通过重用已有代码定义新类的手段,使父类的数据结构和操作能被子类重用;并在两个或多个不同的类之间建立了关系,使得程序具有良好的结构。 Delphi使用派生类实现继承,允许从任何已存在的类基类(Base Class)或父类(Parent Class)派生新类派生类(Derived Class)或子类(Child Class)。 使用继承机制一般应该遵循is-a原则,即子类对象是父类对象的特例。 下一页上一页返 回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用类的实现 即类的方
51、法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。 第三章 Delphi面向对象编程思想3.3 Delphi中类的继承性和应用Delphi中表示类的继承的语法是: type 子类名 = class(父类名) 子类的域、属性和方法的声明 end; 子类中仅需要自身特有而父类缺少的数据结构和操作,或修改父类的操作即可。注意:在Delphi中,子类会继承父类所有的域、属性和方法,但却不是全部都能在子类中被访问。这里有类成员的可见性问题。下一页上一页返 回Delphi面向对象程序设计3.3 Delphi中类的继承性
52、和应用 Delphi中类成员的可见性分为单元级可见性和类级可见性。 单元级可见性:同一个单元文件中定义的类之间可以相互访问其所有的域或属性。 类级可见性:Private(私有成员,只能被类本身访问)、Protected(保护成员,类似于Private成员,但是可以被派生类访问)、Public(公有成员,可以被程序中任何代码访问)、Published(发布成员,类似于Public成员,但可以在Object Inspector中显示)第三章 Delphi面向对象编程思想Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用类的实现 即类的方法成员的实现。类的声明中方法成员只给出了函
53、数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。 第三章 Delphi面向对象编程思想3.3 Delphi中类的继承性和应用 VCL(Visual Component Liberary)可视化组件库由若干被称为组件的类组成,这些类之间有一定的继承层次关系。 所有的VCL类都继承自TObject类,所有的VCL组件都继承自TComponent类。可见的组件如TForm、TButton、TEdit等,将出现在运行时的屏幕上,成为控件(Control)。所有运行时可见的组件都由TControl类派生,因而控件是组件的一个子集。下一页上一页返 回Delp
54、hi面向对象程序设计3.1 Delphi中类的声明、实现和使用类的实现 即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。 第三章 Delphi面向对象编程思想3.4 Delphi中类的多态性和应用 多态性允许将子类类型的指针赋值给父类类型的指针。在ObjectPascal中多态性是通过虚方法实现的。下一页上一页返 回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用类的实现 即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出
55、。在Delphi中类的声明和实现必须分开。 第三章 Delphi面向对象编程思想3.4.1 静态方法 如果在类的声明中,在方法后不使用virtual或dynamic等方法指示符,则该方法就是静态方法。我们在类中声明的方法缺省就是静态方法。 如果在父类中定义了一个静态方法,在它的派生类中可以定义不同实现的同名方法,其本质相当于对父类同名方法的重载。当调用静态方法时,方法名前的对象的声明类型唯一确定调用哪一个方法。下一页上一页返 回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用类的实现 即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在
56、类的实现部分给出。在Delphi中类的声明和实现必须分开。 第三章 Delphi面向对象编程思想3.4.2 虚拟方法 如果在类的声明中,在方法后使用virtual保留字,则该方法就是虚拟方法。 在派生类中可以用override保留字来覆盖父类中的虚拟方法。 在调用虚拟方法时,调用对象在运行时所引用的实际对象类型决定调用哪一个方法,而不管调用对象声明时是什么类型。即使将一个子类的对象变量转换为父类类型,只要它实际引用的是子类类型的对象实例,调用的都将是子类的方法。 下一页上一页返 回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用类的实现 即类的方法成员的实现。类的声明中方
57、法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。 第三章 Delphi面向对象编程思想3.4.3 动态方法 如果在类的声明中,在方法后使用dynamic保留字,该方法就成为动态方法。 动态方法与虚拟方法在语义上是等价的,都可以在派生类中用override保留字覆盖来实现多态。它们唯一的区别在于Delphi对方法调用策略的内部实现上:虚拟方法从速度最优的角度实现代码优化,而动态方法则从空间最优的角度实现代码优化。 下一页上一页返 回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用类的实现 即类的方法成员的实现。
58、类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。 第三章 Delphi面向对象编程思想3.4.4 多态性小结要实现多态性,下述三大要素是必需的:在父类中定义虚拟或动态方法;在子类中覆盖(override)父类中的虚拟或动态方法;声明父类类型的变量,则该变量既可以指向父类的实例,也可以指向子类的实例。当变量指向父类的实例时,调用的是父类的方法;当变量指向子类实例时则调用子类同名的方法。下一页上一页返 回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用类的实现 即类的方法成员的实现。类的声明中方法成员
59、只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。 第三章 Delphi面向对象编程思想3.5 Delphi中抽象方法和抽象类的应用 抽象方法的声明使用abstract保留字,并且该保留字必须位于virtual或dynamic保留字之后,即抽象方法总是虚拟方法或动态方法。 一个方法一旦声明为抽象的,则具有该方法的当前类就不需要实现它,它的实现延迟到子类中进行。 包含了抽象方法声明的类为抽象类。注意: Object Pascal虽然允许创建抽象类的对象实例,且允许该实例调用其非抽象方法,但不允许调用其中的抽象方法,因为根本没有该方法的实现。
60、 下一页上一页返 回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用类的实现 即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。 第三章 Delphi面向对象编程思想3.6 Delphi中类操作符的应用 在程序运行期间,可以使用is操作符和as操作符来进行类的运行时类型信息检测和类型转换。通常把这两个操作符称为类操作符。 下一页上一页返 回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用类的实现 即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中历史人教八年级上册近代化的探索洋务运动学历案
- 浪潮校招java面试题及答案
- java初级数据库运维面试题及答案
- 学前教育宣传汇报
- 小学生男生教育
- 水泥厂化验室安全培训
- 幼儿园奥运课件
- 2025年中国男士脱毛膏行业市场全景分析及前景机遇研判报告
- 企业征信培训
- 中班幼儿入园常规实施策略
- 国家开放大学《22019统计学原理(统设课)》期末考试题库
- 国家开放大学《应用写作(汉语)》形考任务1-6答案
- 台球助教管理培训
- 顺丰运作主管
- 万达入职在线测评题
- 2024年吉林省长春市中考物理试题(含解析)
- 多校联考高一下学期语文期末考试试卷
- 品管圈PDCA提高手卫生依从性
- 2025高考物理步步高同步练习选修1练透答案精析
- TGDNAS 043-2024 成人静脉中等长度导管置管技术
- 2024年黔东南州能源投资限公司招聘(高频重点提升专题训练)共500题附带答案详解
评论
0/150
提交评论