第3章-面向对象编程.ppt
《第3章-面向对象编程.ppt》由会员分享,可在线阅读,更多相关《第3章-面向对象编程.ppt(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 1 13.1 对象和类对象和类每一个有明确意义和边界的事物都可以看作是一个对象(Object),这些对象有自己的属性,对象与对象之间还有一定的相互关系。例如,日常生活中使用的电视机就可以看作是一个对象,它可以接收微波信号,可以在屏幕上显示微波信号中包含的信息。此外,我们每个人都可以看作是一个对象,每人都有自己的个性:喜欢看电视或不喜欢看电视。我们与电视机之间还具有一定的关系:当按下电源按钮后,电视机才可以接收微波信号;同时,电视节目还可以让我们高兴、失望或者紧张等
2、。我们可以把具有相似特征的事物归为一类,也就是把具有相同属性的对象看成一个类(Class)。比如,所有的电视机可以归成一个“电视机类”,所有的人可以归成一个“人类”。在面向对象的程序分析和设计技术中,“类”就是对具有相同属性和相同操作的一组相似对象的定义。从另一个角度来看,对象就是类的一个实例。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 2 2在程序设计阶段,一个非常重要的工作就是按照面向对象的方法去分析所要解决的问题。也就是清楚所要解决的问题中有多少实体,每一个实体所具有的属性,各个实体之间的关系等。然后
3、把具有相同属性和相同操作的实体划分为一个类,明确每个类的属性和方法。一个复杂的问题总是可以分成若干个比较简单的问题,一个复杂的类也往往是有一些比较简单的类组成。在Delphi中,系统已经定义了各种各样的丰富的类,我们可以直接使用它们。在定义类的时候,也可以由这些类的对象组成。一个类是一个数据类型,就像记录一样,是一种数据结构。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 3 3此外,一个类的上层可以有父类,下层可以有子类。这种层次结构又叫做继承性,也就是可以在一个基类的基础上派生出一个新类,新类不仅具有基类的
4、属性和方法,而且还可以有自己的一些独特的属性和方法。这样,就可以在不同的类之间共享数据结构和程序代码,减少了冗余代码,增强了系统的健壮性,加快了系统的开发进度,并且使得系统的维护和修改工作变得简单多了。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 4 43.1.1 类的定义在Object Pascal语言中,类和记录比较相似,也是一个构造类型。定义格式如下:typeclassName=class(ancestorClass)memberListend;其中classname表示新声明类的标识符,ancesto
5、rClass表示新声明类的基类,类的名称通常是一个以T开头的标识符,memberList部分是类的成员,南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 5 5可以声明一些变量和对象,也可以声明一些过程与函数。组成类的成员有三种:数据域、属性和方法。数据域一般是类中使用的各种变量。与记录类型变量相似,类数据域存在于每一个该类的实例中。属性实际上也是类的一个数据域,但是属性还被用于类的接口。用户在声明属性时可以指定属性被赋值或者值被修改时进行的操作。类实例的属性对该实例 以外的程序来说,属性更像一个普通的数据域。例
6、如:定义一个TMyClass类typeTMyClass=class(TObject)end;南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 6 63.1.2 数据域类中的数据域就像一个属于某个对象的变量。数据域可以是任何一种类型甚至也可以是一个类的实例。在实际使用中类中的数据域通常都被声明为私有的。如果用户要把数据域声明为类类型,可以像声明其他类型变量一样操作。在定义类时要注意,所有对数据域的声明要在属性和方法的前面。例如:Type TMyClass=class(TObject)x:integer;/定义一个类
7、的数据整型变量xend;南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 7 73.1.3 方法方法(method)是属于某个类的函数或过程。在类中方法的声明被分成两个部分,一个是函数与过程的头部,另一个是函数与过程的定义部分。这种声明方式与函数、过程的前置声明十分类似。但在定义部分的标识符前要加类标识符和“.”来限定隶属关系。例如:Type TMyClass=class(TObject)/在TMyClass类中声明一个方法DoSomething,该方法是一个过程procedure DoSomething;/在T
8、MyClass类中声明一个方法GetSomething,该方法是一个函数function GetSomething:String;end;南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 8 8procedure TMyClass.DoSomething;/方法DoSomething过程的定义beginend;function TMyClass.GetSomething:String;/方法GetSomething函数的定义beginend;方法根据其头部引导字的不同可以分成四种:函数、过程、构造和析构。其中构造
9、和析构是分别用于在使用时创建一个类的对象实例和释放类对象实例。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 9 93.1.4 属性属性(property)是对象状态和行为的特征值,是类中数据的外在表现。外部代码通过属性访问类中的数据。因此属隐藏了类中数据和方法的实现细节。如窗体的Caption属性决定了窗体的标题。属性是类中可以在“读/写”时执行指定方法的数据域;有的属性是可读写(read-write);有的属性只能读不能写,称为只读(read-only)属性。事件事件(event)是基于一种消息处理机制,是
10、系统向窗口发送消息的结果。Delphi的事件是在收到相应的Windows消息后被触发的。如用户单击按钮,就会触发按钮的单击事件。可以为按钮的单击事件编写处理程序。当程序运行时,用户单击按钮,系统就执行该按钮上的用户编写事件处理程序。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 10103.2 类的特性类的特性南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 11113.2.1 封装与继承在Delphi中,如果不指明父类,则默认的
11、父类为TObject类,也就是直接从TObject类派生出一个新类。TObject类是在System单元中定义的。类的所有成员都有一个标明“能见度”的属性,它们是由保留字private、protected、public、published来说明的。通过这些保留字,可以控制对类中成员的访问权限。每个保留字的具体含义如下:1.private 具有private属性的成员称为私有成员,不能被类所在单元以外的程序访问。也就是说,一个私有的属性不可以在所在模块之外的其他模块中读写,一个私有的方法也不可以在所在模块之外的其他模块中被调用。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi
12、 程序设计基础程序设计基础 2006-9-1 2006-9-1 12122.protected具有protected属性的成员称为保护成员,可以被该类的所有派生类访问,并且成为派生类的私有成员。3.public具有public属性的成员称为公有成员,可以被该类以外的类访问。如果两个类不在同一个单元文件中,则要在uses语句中包括被访问的类所在的单元名称。4.published具有published属性的成员称为发行类型成员,它的访问权限基本与公有成员相同,只是在设计期间也可以被访问。通常发行类型的成员用在组件类的声明中,这样,就可以在对象监视器中访问组件的发行类型的成员。除了在类封装的时候可以
13、限制成员的访问权限外,在后面介绍的单元文件中也可以限制对变量、对象、函数和过程等的访问权限。为了使软件系统具有良好的安全性、健壮性,应该注意这些限制权限的用法。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 1313实例讲解【例3.1】该例说明了类的权限的使用。program Project1;$APPTYPE CONSOLEtype THuman=class/定义一个人类 private Name:String;/姓名 public Age:integer;/年龄 procedure SetName(xm:S
14、tring);function GetName:String;end;南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 1414procedure THuman.SetName(xm:String);begin Name:=xm;end;function THuman.GetName:String;begin result:=Name;end;var man:THuman;begin man:=THuman.Create;南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基
15、础 2006-9-1 2006-9-1 1515man.SetName(张三);writeln(姓名:,man.GetName);man.Age:=20;writeln(年龄:,man.Age);writeln(按下回车键退出。);readln;end.南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 1616说明:例程中的THuman类默认从TObject类派生而来,在类中定义了两个私有成员变量Name是字符串型和Age是整型。由于Name是私有的数据,所以不能被类所在单元以外的程序访问。因些我们定义两个公有方
16、法SetName和GetName分别来给Name赋值和得到Name的值。这就体现了类的封装性。而Age是公有的数据,因此可以不需要公有方法来给Age赋值和获得Age赋值。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 17173.2.2 构造函数和析构函数构造函数和析构函数在完成了类的封装之后,就可以使用这个类了。具体的步骤如下:1)声明类的一个变量。这时可以将类作为一种数据类型来看待。2)调用类的一个特殊函数构造函数来进行一些初始化工作,比如按照类的结构来分配内存资源,完成对象的创建。3)对类的实例对象进行操
17、作、使用。可以修改对象的属性或调用对象的方法。4)使用完毕,调用类的另一个特殊函数析构函数,删除创建的对象,同时释放相应的内存资源等。此外,还可以调用free过程释放对象占用的资源。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 1818构造函数和析构函数是类定义中两个非常重要的函数,它们完成的功能正好相反,它们的定义也比较特殊。在声明了类的一个变量后,并没有实际创建该类的对象,只是定义了一个指向该类对象的指针,有时也称之为类的引用。对象的创建和初始化工作是由类的构造函数来完成的。在类的构造函数中,不仅可以根据
18、类的结构为类的对象分配内存空间,而且还可以打开文件或数据库,读取一些初始数据,或者控制一些设备进行复位等。在定义构造函数的时候,不是使用保留字func tion,而是使用保留字constructor,通常函数名使用Create。如果在定义类的时候没有定义构造函数,则系统会自动为该类生成一个默认的构造函数。构造函数必须使用默认的函数调用约定方式,也就是使用register指令字方式。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 1919我们也可以自定义一个或多个构造函数。自定义的构造函数可以有参数列表,可以重载
19、构造函数。一般在自定义的构造函数的函数体中,在开始部分使用inherited保留字来调用父类的构造函数。如果在创建并初始化对象时,调用构造函数发生错误,则会自动调用析构函数来删除这个没有完成的对象。析构函数的作用是将对象删除并释放相应的内存资源,此外还可以在这之前保存一些数据信息并关闭文件或数据库等,或者对一些设备进行复位并关机。在定义析构函数的时候,使用保留字destructor代替通常函数的function,函数名为Destroy。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 2020如果在定义类的时候没
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 编程
限制150内