CPP课件第3章面向对象程序设计概述2008章节

上传人:E**** 文档编号:91278306 上传时间:2019-06-27 格式:PPT 页数:57 大小:349KB
返回 下载 相关 举报
CPP课件第3章面向对象程序设计概述2008章节_第1页
第1页 / 共57页
CPP课件第3章面向对象程序设计概述2008章节_第2页
第2页 / 共57页
CPP课件第3章面向对象程序设计概述2008章节_第3页
第3页 / 共57页
CPP课件第3章面向对象程序设计概述2008章节_第4页
第4页 / 共57页
CPP课件第3章面向对象程序设计概述2008章节_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《CPP课件第3章面向对象程序设计概述2008章节》由会员分享,可在线阅读,更多相关《CPP课件第3章面向对象程序设计概述2008章节(57页珍藏版)》请在金锄头文库上搜索。

1、C+面向对象程序设计教学内容,第1章 C+概述 第2章 类和对象 第3章 面向对象程序设计概述 第4章 进一步学习类和对象 第5章 堆与复制构造函数 第6章 继承性:派生类 第7章 运算符重载 第8章 虚函数和多态性 第9章 模板 第10章 类库和C+的标准模板库STL 第11章 输入输出流 第12章 异常处理,金尊和,“计算机和软件的发展很快,新的概念名词和技术手段层出不穷,可谓日新月异。停留于表面的现象,可以让人眼花乱,应接不暇。 只有深入到本质,从哲学方法论的高度上看问题,找答案,才能如庖丁解牛,游刃有余。”,第3章 面向对象程序设计概述,3.1 类与对象 3.2 消息和方法 3.3 什

2、么是面向对象程序设计 3.4 数据抽象 3.5 封装性和信息隐藏 3.6 继承性与软件重用 3.7 多态性 3.8 面向对象的程序设计语言 3.9 面向对象的软件工程,3.1 类与对象,3.1.1 对象 3.1.2 类 3.1.3 对象与类的关系,对象的广义定义,什么是对象(object)? 现实世界中的任何一个事物都可以看成是一个对象。,自然的实体: 一个人, 一辆汽车, 一个教师,逻辑结构: 一个银行帐号, 一个学生的学籍档案,客户通信录,对象的特性,对象是人们要研究的任何事物 ,其特性是: 1、每一个对象必须有一个名字以区别于其它对象; 2、用属性(或叫状态)来描述它的某些特征; 3、有

3、一组操作,每一个操作决定对象的一种行为。 /这是关于对象的广义定义,面向对象的系统中的对象,对象是基本的运行时实体,它既包含数据(属性),也包括作用与数据的操作(行为)。 一个对象把属性和行为封装成一个整体。 对象是数据和对数据的操作的结合体。 从程序设计者来看,对象是一个程序模块; 从用户来看,对象为他们提供了所希望的行为。,类的例子,人类 水果类 鱼类 “类”是对一组具有共同属性特征和行为特征的对象的抽象。,OOP中类的例子,class Student int number; char *name; float score; public: Student (int number1,cha

4、r * name1, float score1); Student( ); void modify(float score1); void print( ); ;,属性,操作,什么是类(class)?,在C+语言中,我们通过定义新的数据类型来构成类。 在新的数据类型中,既包含数据内容又包含对数据的操作。 一个类所包含的方法和数据描述一组对象的共同行为和属性。,什么是类(class)?,一个类定义了一个大体上相似的对象。 把一组对象的共同特性加以抽象并存储在一个类中的能力,是面向对象技术最重要的一点。,对象与类的关系,类是对一组性质相同的对象的描述,是对一组数据和方法的封装。 对象则是类的具体化

5、,是类的实例。可以这样定义对象:对象是类的一个实例,包括了数据和过程。,3.2 消息和方法,3.2.1 消息 3.2.2 方法,消息 Message,消息是要求某个对象执行其中某个功能操作的规格说明。 OOP中的一条消息由消息选择器(“消息操作”或“消息名”)及若干个参数和接受消息的对象三部分组成, 例如:student1. modify(score1);,消息的例子,接受消息的对象 参数 student1. modify(score1); 消息名,发送消息与函数调用的比较,1) 函数调用可以带或不带参量,但消息至少带一个参量(对象名或对象指针);它指明接受该消息的对象。消息选择器则告诉对响应

6、作些什么。 2) 消息名(消息选择器或消息操作)类似于函数名,但二者之间的本质差别在于:函数名仅代表一段可执行的代码,而消息名的具体功能的实现取决于所接受消息的对象。,发送消息与函数调用的比较(续),3) 函数调用是过程式(面向过程)的即“如何做(How to do)”,而消息则是通知式(面向对象)的,即告诉对象“做什么(What to do)”,具体“如何做(How to do)”由对象根据接受到的消息自行确定。 lst.sort( ); 其中,lst代表一个链表对象,sort是表示排序的消息名。,方法(method),“方法”对应于对象的行为(能力),即它是实现对象所具有的功能操作的代码段

7、。 在C+程序中,方法即是类中定义的成员函数,它是该类对象所能执行的操作的算法实现。 通常每个类中包含多个方法(即C+的成员函数),每个方法由方法名(函数名+参数表)和说明该成员函数的算法实现的一段代码所组成。,方法的例子,void Student:print( ) cout”number: ” number” name:”name ” score: ”scoren; ,方法是与对象相连决定怎么做的操作执行代码,所以方法是实现每条消息具体功能的手段。,3.3 什么是面向对象程序设计,3.3.1 结构化程序设计方法 3.3.2 面向对象程序设计方法,表3.1 程序设计方法的发展过程,195719

8、72: 面向过程的程序设计 19681990 : 面向过程的结构化程序设计 1984今: 面向对象的程序设计,程序设计方法的发展过程(续),1990今:面向组件的程序设计(component-oriented programming,COP,例如DCOM, CORBA, and Java Beans) 1994今:面向服务的程序设计(service orientation programming ),软件组件,XML Web Service应用案例,Internet,天气预报 XML Web Service,汇率 XML Web Service,飞机票价 数据库,飞机票价 XML Web Se

9、rvice,结构化程序设计的基本思想,按功能划分模块,分而治之。 分解系统时按照自顶向下的顺序,逐步求精。 设计时使各模块间的关系尽可能简单,功能上相对独立, 从而可单独验证模块的正确性。,结构化程序的组成,结构化程序设计方法的基本特点,把数据结构和处理数据的操作过程分离为相互独立的实体。 用数据表达实际问题中的信息; 程序代码则实现用于处理加工这些数据的算法。 简而言之,就是数据和操作代码分离。,数据和操作代码分离 产生的问题,给程序员增加了负担:必须确保数据和代码匹配。 当数据结构改变时,所有相关的处理过程都要进行相应的修改。可维护性低。 即使要对不同的数据格式(结构和类型)作同样的处理计

10、算,也必须编写不同的程序。可重用性不好。,面向对象程序设计,用面向对象程序设计语言中的对象和类直接模拟现实世界中的对象,将问题空间直接映射到软件空间。 从而设计出尽可能直接、自然地表示问题求解方法的软件。 面向对象的这种思维方式符合人类的自然思维习惯,使我们能够在程序中自然地描述现实世界的实体和问题,增强了程序代码的可读性,有利于控制软件的复杂性。,模块化,将一个复杂的大规模软件系统划分成几个规模较小、相对简单的模块,即分而治之。 面向对象程序设计方法是按对象来划分。 面向对象的软件系统由对象组成,对象之间通过消息传递互相联系,如图3.4所示。,面向对象的软件系统的组成,对象作为程序模块,面向

11、对象的软件系统中每一个模块都是高度独立的对象,而对象是比功能模块粒度更大的模块。 对象是由数据和对数据的操作(代码)形成的一个整体。 面向对象程序设计采用封装的办法,使对象的内部实现与外界隔离,实现了信息隐藏,从而提供了更理想的模块化机制,显著地减少了程序模块间的相互干扰和依赖性。,数据抽象技术,将数据和对数据的操作封装在一起,作为一个相互依存、不可分割的整体对象来处理,它采用数据抽象和信息隐藏技术。 它将具有相同特征的对象抽象成一个新的数据类型类,并且考虑不同对象之间的联系和对象类的重用性,3.4 数据抽象,3.4.1 什么是抽象? 3.4.2 数据抽象和抽象数据类型,抽象性的例子,clas

12、s student int number; char *name; float score; public: student( int number1,char * name1, float score1); student( ); void modify(float score1); void print( ); ;,抽象是有选择地忽略。,抽象性(Abstraction),抽象是对复杂的现实世界的简明的表示。 抽象强调了我们所关心的(感兴趣)的信息,而将我们不关心的其他信息忽略。,名家之言,EDijkstra:“设计并实现一个大规模的软件的中心问题是怎样减小复杂度,一个途径就是通过抽象”。

13、Bjarne Stroustrup说:“在C+语言中,我一直在努力提高程序设计的抽象层次”。,抽象数据类型,一个值集和作用在值集上的操作集 C+语言中的一个类就是一个抽象数据类型 每个抽象数据类型自成一个模块,模块的接口和内部实现分离开来, 使用模块的应用程序员只需要知道如何使用该模块,而不必知道模块内部是如何实现的, 也就是说,可以忽略模块内部的实现细节。,3.5 封装性和信息隐藏,所谓封装(encapsulation) ,就是包含和隐藏对象信息,如内部数据结构和代码的能力。 在面向对象的程序中,通过创建对象将代码和数据捆绑在一起,并且在对象中包含了所有必需的代码和数据。 对象是支持封装的元

14、素。 一个程序中的对象把现实世界中的实体的属性和行为封装成一个整体。,信息隐藏(information hiding ),信息隐蔽(Information Hiding)的含义: 有效的模块化可以通过定义一组独立模块来实现,这些模块相互之间只交流软件功能必需的信息。 换句话说: 模块所包含的信息,不允许其它不需要这些信息的模块访问,独立的模块间仅仅交换为完成系统功能而必须交换的信息。,封装的好处,封装性降低了程序设计的复杂度。 封装将操作对象的内部复杂性与应用程序的其他部分隔离开来。 应用程序员只需要通过对象的接口来操作对象完成特定的任务,而不需要知道对象内部复杂的细节。,封装的好处(续),提

15、高了代码的安全性和可靠性; 通过类实现封装,集中和统一了对类中数据成员的所有操作,从而可避免因分散操作造成的错误。 能有效提到程序模块的独立性、可重用性和可维护性; 只要类的接口(即类的共有部分)保持不变,类的结构部分的任何变化(包括数据结构和算法)都不会对使用该类的源程序有所影响,源程序可以不做任何修改。,面向对象程序设计的主要特征,抽象性 封装性 继承性 多态性,3.6 继承性与软件重用,面向对象程序设计的第二个主要特征就是继承性,继承的目的就是为了重用(reuse)。 继承,就是在一个已有的类的基础上创建一个新类 ,这个新类获得了已有类的数据和操作代码,并且新类可以增加新的数据和操作代码

16、。,继承与派生问题举例,派生类的概念,在已有类的基础上新增自己的特性而产生新类的过程称为派生。 被继承的已有类称为基类(或父类)。 派生出的新类称为派生类(或子类)。 参见图3.5 类的继承,继承与派生的目的,继承的目的:实现代码重用。 派生的目的:当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造。 C+中类的继承层次自然地表达了人们分析问题时所用的分类结构。大大改善了软件系统的可理解性和可维护性。,继承的好处,(1)继承性很好地实现了代码的重用。 (2)能改进软件系统的可维护性。 (3)继承性使已有的程序库具有清晰的层次结构关系。,3.7 多态性,广义多态性:自然语言中的多态性; 面向对象程序设计中的多态性,什么是多态性?(广义),polymorphism,“many forms”:即多种形态 在自然语言中,多态性即是“一词多义”; 更准确地说,多态性是指相同的动词作用到不同类型的对象上, 例如: 驾驶摩托车 驾驶汽车 驾驶飞机 驾驶轮船

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

当前位置:首页 > 高等教育 > 大学课件

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