[社会学]Delphi中的面向对象.ppt_第1页
[社会学]Delphi中的面向对象.ppt_第2页
[社会学]Delphi中的面向对象.ppt_第3页
[社会学]Delphi中的面向对象.ppt_第4页
[社会学]Delphi中的面向对象.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本章学习要点,了解面向对象程序设计的基本思想及其Object Pascal的语言实现。 掌握类的定义和对象的使用 掌握构造函数和析构函数的含义及定义 掌握派生类的定义及继承的意义 理解多态性的概念及多态性的实现:重载和虚方法(或动态方法) 理解Delphi中组件属性和方法的含义,第一章 Delphi中的面向对象,1.1 面向对象程序设计概述 1.2 类与对象 1.3 类成员的访问权限 1.4 继承和多态 1.5 属性与方法,1.1 面向对象程序设计概述,面向对象的方法学认为: 客观世界由各种“对象”构成,每个对象都有自己的运行规律和内部状态。 通过归类,具有相同属性和行为的对象抽象为类,每个对象都属于某个类,都是该类的一个实例。,类之间通过继承关系构成类的层次结构,子类可以直接继承父类的性质和功能。 对象之间通过消息相互作用,相同的消息作用于不同的对象会产生不同的反应.,面向对象方法学的中心是围绕着对象、类、消息、继承性和多态性等概念、机制和原理展开的。其中,对象和类是面向对象方法的核心,消息是连接它们的纽带,封装是面向对象的基本要素,继承性是面向对象方法的独特贡献,而多态性则使面向对象方法更加完美。,1.2 类与对象,一、类与对象的概念 二、定义类 三、对象的使用 四、构造函数与析构函数,一、类与对象的概念,类(class)是具有相同或相似属性和行为的一组对象的共同描述,是对相似对象建立的模板(template)。它是一个抽象的概念,每个对象则是一个有意义的实体。 对象(object)由属性和方法构成。属性是描述对象静态特征的一组数据项;方法描述了该类对象动态特征的一个操作序列,体现对象的行为特征或功能。,二、定义类,在Object Pascal中,使用保留字class定义类,定义格式如下: type 类名= class 数据成员 成员函数或过程 end;,说明: 数据成员 可以是任何数据类型的变量,描述类的状态特征,即属性。不能在类中对数据成员进行初始化。 成员函数或过程 描述类的行为特征,即方法。 成员函数或过程必须在类体以外定义,格式如下: function 类名.成员函数名(参数表):返回类型; 函数体 procedure 类名.成员过程名(参数表); 过程体 ,三、对象的使用,1.对象声明 var 对象名:类名; 对象名的命名规则和其他标识符相同。例如: var c1: Circle; / 对象 p: Circle; / 指针 a: array 110 of Circle; / 数组,2. 访问对象成员 声明了对象后,就可以通过对象使用类中的成员。使用类成员的一般格式为: 对象名.成员 3. 类作用域 类作用域在类体范围内,此外,成员函数体或成员过程体也属于类体的一部分,在类的作用域内。,四、构造函数与析构函数,由类说明一个对象后,系统并没有实际创建该类的对象,只是定义了一个指向该类对象的指针。为此,Object Pascal提供了构造函数,它是专用的创建对象和初始化对象的成员函数。由于构造函数是专用的成员函数,因此,在定义时不使用保留字function,而使用保留字constructor,函数名通常为Create。,Object Pascal允许用户自定义一个或多个构造函数,自定义的构造函数可以带参数。若在定义类时没有定义构造函数,则系统会自动为该类生成一个默认的构造函数。,析构函数的功能正好和构造函数相反,它是专用的删除对象和为对象进行善后处理的成员函数。在定义析构函数时同样不使用保留字function,而是使用保留字destructor,函数名通常为Destroy。 Object Pascal允许用户自定义一个或多个析构函数。若在类定义时没有定义析构函数,则系统会自动为该类生成一个默认的析构函数。,1.3 类成员的访问权限,一、 封装 二、类成员的访问权限,一、封装,在程序设计中,封装(encapsulation)就是把一组数据和与这组数据有关的操作集合组装在一起,形成一个能动的实体,也就是对象。这样的封装体包括外部特征和内部实现两个方面,用户不必知道对象的内部实现,只需根据对象提供的外部特性接口访问对象。,二、类成员的访问权限,在Object Pascal中,类的所有成员都有一个标明其可见性的属性,由保留字private、protected、public、published或automated来说明。通过这些保留字,可以控制对类中成员的访问权限。,Private:具有private访问权限的成员称为私有成员,不能被类所在单元以外的程序访问,但在本单元是可见的。 Protected:具有protected访问权限的成员称为保护成员,可以被该类及该类的所有派生类访问,并成为派生类的私有成员。 Public:具有public访问权限的成员称为公有成员,可以被该类以外的类访问。如果两个类不在一个单元文件中,则要在uses语句中加入被访问的类所在的单元名称。,Published:具有published访问权限的成员称为公布类型成员,它除了与公有成员具有相同的访问权限以外,在设计期间的对象观察器窗口中也是可见的。 Automated:具有automated访问权限的成员称为自动类型成员,它与公有成员具有相同的访问权限,常用于响应对象链接与嵌入(简称OLE)自动化类型信息的公用接口。,类定义的完整格式如下: type 类名=class private 私有数据成员、成员函数或过程 protected 保护数据成员、成员函数或过程 public 公有数据成员、成员函数或过程 published 公布类型数据成员、成员函数或过程 automated 自动类型数据成员、成员函数或过程 end;,在类说明中,访问权限声明的出现次序和次数可以是任意的。每遇到一个访问权限声明,编译器就将其后成员的访问权限确定为该保留字所规定的访问权限,直到遇到下一个访问权限声明为止。,1.4 继承和多态,1.4.1 继承 1.4.2 覆盖 1.4.3 抽象类 1.4.4 多态,1.4.1 继承,一、继承的概念及意义 二、派生类的定义及使用 三、派生类的构造函数和析构函数,一、继承的概念及意义,继承的实质就是在既有类的基础上构造新的类,即新类从一个或多个已有的类中继承数据和方法,同时增加或重新定义数据和方法,由此构造出一个新的类型,称为派生类(或子类),那些已有的类则称为基类(或父类)。 继承的主要目的是实现代码的重用 。,二、派生类的定义及使用,派生类的定义格式为: type 派生类 = class(基类) 派生类新增或改写部分 end;,三、派生类的构造函数和析构函数,在Object Pascal中,在派生类的构造函数的开始部分,使用inherited保留字来调用基类的构造函数,首先初始化基类的成员,然后构造派生类的特有成员。在派生类的析构函数的结尾部分,使用inherited保留字来调用基类的析构函数,最后释放基类的成员部分。,1.4.2覆盖(虚方法),方法调用中,在运行时才确定对象方法的调用地址,这种调用方法叫动态联编。动态联编通过虚方法来实现,虚方法使用指令字virtual说明。 重载参数个数和类型完全相同的方法时使用保留字override,而不使用保留字overload。,在面向对象的程序设计中,有一种扬弃的方法。对于祖先类中适合子类的属性和方法,一定要保留,不适合,则可以不用。但是有些方法并不是完全适合子类的,它在父类中完成对父类数据操作的任务,在子类中应该完成操作子类数据的任务。因此,需要对父类的该方法进行改造,使之能够适用于子类。改造时,必须用关键字override声明,否则子类会将它当作 一个新方法,这个方法并未继承父类,相反 它把父类的方法屏蔽了。,并非所有的方法都可以覆盖,只有在祖先类中使用关键字virtual和dynamic修饰过的方法才可以覆盖。,program Project01_1; $APPTYPE CONSOLE type Ta=class procedure Show;virtual; end; Tb=class(Ta) procedure show;override; end; procedure Ta.show; begin write(A); end; procedure Tb.show; begin inherited show; write(B); end; var x:Tb; begin x:=Tb.create; x.show; readln; end.,动态联编除可以通过虚方法实现外,还可以通过动态方法实现,动态方法使用指令字dynamic。虚方法和动态方法在功能上是等价的,它们的不同在于:虚方法的调用速度比较快,而动态方法的代码数量比较少。,1.4.3抽象类,在定义虚方法或动态方法时,使用指令字abstract说明,则该方法成为抽象方法,包含抽象方法的类称为抽象类。 抽象方法不可以定义函数体,且必须是虚方法或动态方法。,type Ta=class procedure Show; virtual; abstract; end; Tb=class(Ta) procedure show; override; end; procedure Tb.show; begin write(B); end; var x:Tb; begin x:=Tb.create; x.show; readln; end.,1.4.4多态性的概念,在面向对象程序设计中,多态性是指相同的操作,在不同类的对象中具体的实现过程不同。Object Pascal支持两种多态性:编译时的多态性和运行时的多态性。编译时的多态性通过重载实现,运行时的多态性通过虚方法来实现。,重载,在面向对象程序设计中,重载的含义是相同名字的函数或过程,在不同的场合可以表现出不同的行为,也就是说,可以同时定义多个具有相同名字的函数或过程,而它们的操作对象具有不同的类型。重载函数或过程用保留字overload来说明。,function Max(x,y:integer):integer;overload; begin If xy then result:=x else result:=y; Form1.listbox1.items.add(调用Max(x,y:integer)函数); end; function Max(a,b:real):real;overload; begin if ab then result:=a else result:=b; Form1.listbox1.items.add(调用Max(a,b:real)函数); end; procedure TForm1.Button1Click(Sender: TObject); var i1,i2:integer; r1,r2:real; begin i1:=8;i2:=5; r1:=6.4;r2:=9.8; Listbox1.items.Add(结果为:+inttostr(Max(i1,i2); Listbox1.items.Add(结果为:+floattostr(Max(r1,r2); end;,1.5 属性与方法,一、属性 二、方法,一、属性,在Delphi中,组件的属性可以看成是对类中数据进行访问和修改的特殊的辅助域。 当然,在Delphi中,我们并不需要了解属性是如何实现的,我们只要通过O

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论