[理学]02_02_面向对象及类的概述1

上传人:油条 文档编号:49789629 上传时间:2018-08-02 格式:PPT 页数:84 大小:656.50KB
返回 下载 相关 举报
[理学]02_02_面向对象及类的概述1_第1页
第1页 / 共84页
[理学]02_02_面向对象及类的概述1_第2页
第2页 / 共84页
[理学]02_02_面向对象及类的概述1_第3页
第3页 / 共84页
[理学]02_02_面向对象及类的概述1_第4页
第4页 / 共84页
[理学]02_02_面向对象及类的概述1_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《[理学]02_02_面向对象及类的概述1》由会员分享,可在线阅读,更多相关《[理学]02_02_面向对象及类的概述1(84页珍藏版)》请在金锄头文库上搜索。

1、第八章 类和数据抽象(1)C+属于混合型面向对象程序设计语言,所 谓混合,意即在面向过程语言的基础上增加面向 对象的描述和处理机制,例如增加类类型,以支 持封装、继承和多态等面向对象基本要素的实现 。本课程的前面部分主要讲述C+的过程化部 分,该部分除了个别功能(例如I/O操作)之外 ,绝大部分内容与C语言是基本兼容的。下面我们将进入C+的面向对象处理部分, 主要讨论:面向对象的基本概念,类类型的定义 、对象的声明,构造函数与析构函数,继承,运 算符重载,面向对象程序设计范例,I/O流与文 件处理等。 主要内容: 面向对象的基本概念(面向对象的含义、对象 和类的定义)。 面向对象的基本要素(封

2、装、继承、多态等) 。 类类型定义和对象声明。 成员函数的声明和调用 成员的保护。 屏蔽类的内部实现、类的封装。 重点:课堂时数:4-5学时 面向对象的基本概念。 类类型定义和对象声明的语法 。 成员函数及其调用。 上机时数:1-2学时课外上机时数:3-4学时8.1 面向对象的基本概念 把软件系统看成是一系列离散对象的集合。1. 面向对象的基本含义 在强调实体封装性和相对独立性的同时,还 必须充分考虑存在于同一系统中的各个实体之 间的有机联系,也即实体关系。 强调刻画对象性质的数据及行为的紧密联系。也即将对象作为系统的基本单元。即指数据和行为的封装技术。 例8-1 学籍管理系统是由学生、教师、

3、课程、各种 规章制度等多个对象集合而成的。学生、教师、 课程等实体之间存在着各种关联, 例如学生选择 课程,老师讲授课程等等。研究生、本科生、专 科生和学生之间的关系是“一般化”关系。 例8-2 窗体以及其上的各种操作构件,这些“离散” 对象集合在一起就构成窗口系统。 主要的实体关系有:一般化、聚合、关联。 一般化:一般类和特殊类之间存在的关系,形 成静态层次结构继承、多态的应用环境。 聚合:部分到整体的关系。 关联:反应对象间的相互作用。 2. 面向对象的本质 面向对象的本质是:确定动作的主体在先, 而执行动作在后,这种面向对象的模式称为“主体 动作”模式。 例如:数据是对象的主体,因此分析

4、一个实体总 是先分析其数据性质,也即实体的属性,然后才 去考虑对数据所施加的操作。该模式的特点是:将对象作为软件系统结构 的基本组成单元,以主体数据为中心,对数据和 作用在数据上的操作进行封装,以标准接口规范 对外提供服务。因此面向对象已经成为一种风范、一种观察 问题、分析问题解决的方法论。 3 对象对象是现实世界中一个实际存在的事物,它 可以是有形的(比如一辆汽车),也可以是无形 的(比如一项计划)。对象具有自己的静态特征和动态特征。1)什么叫对象 静态特征是可以用某种数据来描述的特征,例 如人的姓名、性别等等。 动态特征即对象所表现的行为或对象所具有的 功能,例如人具有思维能力和行动能力等

5、等。 2)对象的定义系统中的一个对象对应于客观世界中的一个 事物或实体,它是构成系统的一个基本单位。一个对象是由一组属性和对这组属性进行 操作的一组服务构成的。 属性是用来描述对象静态特征的一个数据项 ,也叫对象特性,一个对象通常具有多个属性 ; 服务是用来描述对象动态特征(行为)的一 个操作,一个对象通常具有多种操作 ; 4. 对象类 对象的属性和操作称为对象的性质。 1)类是对象的抽象把具有共性的一些事物归为一类,这是认 识客观世界和分析问题的一般方法。这里的共性是指事物的本质特征,分类实 际上是一种抓住事物的本质而忽略一些无关紧 要的细节的抽象过程,请看以下一些例子: 注意:抽象是分类的

6、依据,也即分类一定要满足“ 一般化”这一基本要求 。例8-3 从各种自行车到自行车类的抽象。 抽象2)类的定义 所谓一般化是对形形色色的事物进行高度概括 所获取的共性,反过来能适应于类中的所有对象。 一组具有相同性质(属性和操作)的对象的 抽象。 或者说:类是具有相同属性和服务的一组对象 的集合,它为属于该类的全部对象提供统一的抽 象描述,其内部包括属性和服务两个主要部分。注意 :(2)被归类的一组对象必须具有一般特性、行 为,一般关系(对象之间)和一般语义。 (1)类的全称是对象类; 3)类和对象的关系 “类与对象的关系如同模具与用这个模具铸 造出来的铸件之间的关系”,模具只有一个,而相 同

7、的铸件可以成千上万;类是抽象的,而对象则 是类的具体存在,概括起来有以下三种关系: 每个对象都是其所属类的一个实例( instance),称为对象实例。 类是对象实例的可能的无限集合,同一个 类的所有对象都具有相同的属性描述和操作集, 不同的对象标识符。 在面向对象程序设计语言中,通常用类作 为样板(数据类型)来定义对象。8.2 对象类的主要性质 对象类具有抽象、封装、多态和共享(继承 )等诸多性质和特点,其中封装性是对象类独具 的,因此封装性就成了面向对象的基本要素。 例8-5 C+允许程序员先自定义类类型(Class类 型)然后用它来声明对象,并利用构造方法这一 特殊成员函数自动给类的某些

8、属性赋初值,就产 生一个对象实例。 1. 抽象 所谓抽象是指在分析问题时,强调实体的本 质、内在属性而忽略一些无关紧要的细节。 类就是由对象抽象而成的。2. 封装 1) 封装的涵义(1)强调对象的不可分割性,也即把一个客观 实体的内在属性和服务(操作)结合在一起,形 成一个不可分割的独立单位对象; (2)强调信息的隐蔽,也即隐蔽对象的内部实 现细节 。具体而言,就是将主体数据和和处理细节隐 蔽在数据容许操作的界面下,使得对象的外部功 能与内部实现细节相分离。信息隐蔽使得访问者(外部对象)无须知道 被访问者的内部特性及构造,就可以直接使用之 。 2)定义 封装是指将对象的属性和服务结合成一个独

9、立的系统单位,并尽可能隐蔽其内部细节。 注意:封装是对象的一个非常重要的性质,也是 面向对象必须提供的机制。 3)封装的实际意义(作用) 保证对象的界面清晰、简单。 防止由于模块之间的相互依赖所带来的变动的 相互影响 ,也即降低对象模块之间的耦合度,以 提高对象的相对独立性。 封装使得一个对象可以像一个可插接的部件一 样用在各种程序中 。3. 继承 1) 继承的基本条件继承发生在类的一般化层次结构上,特殊类 (子类)享有一般类(父类)的所有性质(属性 和操作),例如: 教师和教辅人员都是教职工的子类,它们都继 承教职工的性质:2)定义 包括:姓名、性别、出生年月等基本属性以及工 作、进修、晋升

10、、退休等基本操作。 特殊类拥有一般类的全部属性和服务(操作 ),称作特殊类对一般类的继承。概念上,继承是一种子类对父类性质的隐式 自动拥有,也即逻辑上是必然的;实现上必须通 过OO系统的继承机制来保证。 3)继承的实际意义(作用) 实现代码重用以及增强系统的可扩充性。 简化了人们对事物的认识和描述,这是继承所 具有的最最重要的意义。 4. 多态性 1) 如何理解多态性 其一、操作的多态性,即指同一个操作在不 同的类中有不同的实现方法和不同的执行结果; 多态有两个涵义:其二、属性的多态性,即允许同一个属性在 不同的类中具有不同的数据类型。 例如:在下图所给的图形类的一般化层次结 构中,各个特殊类

11、都有Display操作,各自的实现 方法却是不一样的。这就是Display这一操作体现 出来的多态性。其特点是源于继承而并非简单地继承,必须 有不同的表现。 2)多态性的定义在一般类中定义的属性或操作被特殊类继承 之后,可以具有不同的数据类型或表现出不同的 行为。3)多态性的实际意义 减少消息的信息量,统一消息的书写格式; 在应用程序中调用操作不必每次都重复选择程 序分支; 在增加新的特殊类时,不会影响到其它相关类 (不必修改调用码和请求服务的消息)。 其实质是同一属性或操作在一般类和各个特 殊类中具有不同的语义。 8.2 定义类和对象定义一个类就是定义一种新的、十分独特的 数据类型,其独特之

12、处在于它既包含有数据成员 也包含函数成员(内部操作)。 C+隐蔽了类的内部细节,外部只有通过公 有成员函数才能使用类的数据。所以类的构造使 数据抽象和封装的实现成为可能,并且促进了模 块化。 1. 实例 例8-6 将文件定义成C+类。在任何数据处理系统中,文件都是十分重 要的实体,一个文件由以下两部分组成: 操作部分 ,文件这一实体所具有的内在的行 为,例如打开、读、写等等,这些行为所对应 的实现方法称为成员函数。 数据部分(文件对象的属性):例如文件号 、文件操作模式、文件缓冲区起始位置等;我们可以将这样的实体抽象为“文件类”, 并定义成C+的class类型。 class File FILE

13、 *fp; public:File(const char *name, const char *open_mode);File(); size_t read(const size_t howmany, const size_t elem_size, void *buffer); size_t write(const size_t howmany, const size_t elem_size, const void *buffer); /其它成员函数/文件指针(主要属性)/其它属性构造函数析构函数类型名(类名)2类的语法 解释: class class-name : /private|prot

14、ected|public :data members;: /public|protected|public:member-functions; ; class:保留字,表示所定义的类型是类类型; class-name:类名,用标识符命名,但首字符一 般用大写; data members:数据成员表,定义类的属性; 3. 访问说明符 member-functions:成员函数集,定义类的操作 。 public: 表示成员是公有的,既可以被本类的成 员函数访问,也可以被程序的其它部分直接访问 。C+给出public、private、protected等三个说明 符(也称为限制符,用来指明对类的成员

15、访问上 的限定。被限定的成员可以是属性也可以是操作 (成员函数)。该函数集所包含的成员函数可以是内联的,也 可以只是函数原型,而函数定义则出现在类的外 部(本源文件或其它源文件中)。 注意:通常将类定义放在头文件中。 protected:界于public 和private之间,只允许被 基类和派生类的成员函数和友元函数访问。 private:表示成员是私有的,只允许本类(基 类)的成员函数和友元访问。private通常用来限定数据成员 ,以确保数据的 对外隐蔽封装。派生类就是该类的子类。 4类和结构的比较两点说明: (1) 类和结构类型有相似之处,但结构中无法 定义成员函数,而类则可以定义成员函数; (2) 结构的成员其访问限制是public,也即可 以被结构的外部处理所访问;类的数据成员,其 默认访问方式是 Private,也即不允许被外部处理 所访问;5. 类的封装概念的进一步阐述 数据和操作构成一个不可分割的整体,在这一 整体中有既有私有的和受保护的成员(主要指数 据成员),也有公共成员(成员函数的默认形式 就是公共的)。 保护部分数据成员的目的在于将它们有效地屏 蔽,以防外界的干扰和误操作,增强适应性。 公共成员作为类的接口提供给外部使用。 例8-8 定义时间类(Time)。6. 实例分析:Time包括以下属性和操作:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号