面向对象程序设计语言C第01章引论.ppt_第1页
面向对象程序设计语言C第01章引论.ppt_第2页
面向对象程序设计语言C第01章引论.ppt_第3页
面向对象程序设计语言C第01章引论.ppt_第4页
面向对象程序设计语言C第01章引论.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

面向对象程序设计语言C+,电子科技大学计算机学院 陈文宇,1,B1-513,第一章 引论,1.1 面向对象的目标 传统的程序设计方法是模块化(或结构化)的,具体步骤为: 1.整个软件系统功能逐步细化为多个小的功能功能划分。 2.每个小的功能对应由一个模块(如函数、过程、分程序、子程序等)来实现。 3.多个模块合作完成较大的功能,所有模块的合作完成整个软件系统的功能。,3,第一章 引论,1.1 面向对象的目标 对于传统的程序设计,在设计和实现(编程)阶段考虑的是模块,程序本身也是由模块构成的。 面向对象的概念与(抽象)数据类型有关。 数据类型是一个抽象的概念,包含有一组数据的定义和一组对该组数据操作的定义。 对于数据类型的使用,必须通过类型的实际例子(实例/实体,即变量或常量)来体现。,4,第一章 引论,1.1 面向对象的目标 数据类型分为三种: 简单数据类型:内建(built-in)类型,语言本身提供的类型。 用户定义数据类型:以简单数据类型为基础,它包含多个简单数据类型成分,这些数据成分是可以直接操作的。 抽象数据类型:在定义数据的同时,必须定义对数据的操作;它的数据成分是不可见的,也不可以直接操作。,5,第一章 引论,1.1 面向对象的目标 抽象数据类型隐藏了表示的细节,通过过程(或方法)来访问抽象数据对象。 对象和抽象类型的关系,类似于 整型变量和整型数据类型的关系。,6,第一章 引论,1.1 面向对象的目标 面向对象语言中的对象,就是抽象类型的实体,具体的说,是“将某组数据和使用该数据的一组基本操作封装在一起而形成的一个实体”。,7,第一章 引论,1.1 面向对象的目标 面向对象的基本思想就是把要构造的软件系统表示为对象的集合,它的目的是想在某种程度上解决软件开发面临的两大课题: 怎样克服软件的复杂性 怎样将现实世界模型(包括它们之间的关系)在计算机领域中自然地表示出来,8,第一章 引论,1.1 面向对象的目标 从软件的角度来看,计算是一种仿真。 如果每一个被仿真的实体都由一个数据结构来表示,并且将相关的操作信息封装进去,仿真将被简化,可以更方便地刻画对象的内部状态和运动规律。 面向对象就是这样一种适用于直观模型化的设计方法。这意味着设计模型与客观对象之间有近乎一对一的对应关系。这一思想非常利于实现大型的软件系统。,9,第一章 引论,1.1 面向对象的目标 作为克服软件复杂性的手段,在面向对象的方法中,利用了如下对象的性质: 将密切相关的数据和过程封装成为一个实体; 定义了一个实体后,即使不知道此实体的功能是怎样实现的,也能使用它。,10,第一章 引论,1.1 面向对象的目标 面向对象设计非常注重设计方法。实际上,用面向对象方法编程的关键是模型化。,11,第一章 引论,1.1 面向对象的目标 面向对象的目标可以归纳为: 对试图利用计算机进行问题求解和信息处理的领域,尽量使用对象的概念,将问题空间中的现实模型映射到程序空间。 由此得到的自然性可望克服软件的复杂性,从而得到问题得求解和信息处理的高性能。,12,第一章 引论,1.2 面向对象语言的核心概念 1.2.1 数据封装 Data Encapsulation 面向过程语言的做法,13,第一章 引论,1.2 面向对象语言的核心概念 1.2.1 数据封装 Data Encapsulation 面向过程语言的做法:实例,14,第一章 引论,1.2 面向对象语言的核心概念 1.2.1 数据封装 Data Encapsulation 面向对象语言的做法,15,第一章 引论,1.2 面向对象语言的核心概念 1.2.1 数据封装 Data Encapsulation 面向对象语言的做法:实例,16,第一章 引论,1.2 面向对象语言的核心概念 1.2.1 数据封装 Data Encapsulation 面向对象语言采用了抽象的方法。而抽象的原则之一就是信息隐藏。 数据封装将一组数据和这组数据相关的操作集合封装在一起,形成了一个能动的实体,成为对象。用户不必知道对象行为的实现细节,只需根据对象提供的外部特性接口访问对象。 在C+中,实现数据封装的机制是“类(class)”。 在Java和C#中,实现数据封装的机制也是“类(class)”。,17,第一章 引论,1.2 面向对象语言的核心概念 1.2.2 继承 Inheritance 继承是面向对象语言的另一个重要的概念。 在客观世界中,存在着两类关系 整体和部分的关系(is part of) 一般和特殊的关系(is kind of) 。,18,第一章 引论,1.2 面向对象语言的核心概念 1.2.2 继承 Inheritance 现实世界中继承的例子:,Insect,19,第一章 引论,1.2 面向对象语言的核心概念 1.2.2 继承 Inheritance 在一个的继承树中,每下一层都比上一层更加具体地定义了特性。 反过来,一旦某层的某个特性被确定了下来,那么其下所有的种类都应该包含该特性。 这就是“继承”的一般性概念。,20,第一章 引论,1.2 面向对象语言的核心概念 1.2.2 继承 Inheritance 在面向对象的语言中,类功能支持继承机制。 除了根类,每个类都可以有父类或基类,也可以有它的子类或派生类。 一个子类从它的父类那里继承了所有的数据和操作,并扩充自己的特殊数据和操作。父类抽象出共同特征,子类表达差别。,21,第一章 引论,1.2 面向对象语言的核心概念 1.2.2 继承 Inheritance 要注意区分:is part of 和 is kind of (is kind of 才是继承的概念) Kind of Butterfly is a kind of insect. Part of Wheels are part of a car. Wheel is not a kind of car.,22,第一章 引论,1.2 面向对象语言的核心概念 1.2.3 多态性 Poly-morphism 多态,是指一个名字(或符号)具有多种含义。 用户在使用函数编程时,关心的是该函数的功能及其使用接口,并不需要了解该函数的使用接口与函数的哪一种实现方法相匹配(binding)。 在设计这一级上,只关心“施加在对象上的动作是什么”,而不必牵涉“如何实现这个动作”以及“实现这个动作有多少种方法”的细节。,23,第一章 引论,1.2 面向对象语言的核心概念 1.2.3 多态性 Poly-morphism 函数重载 在面向对象的语言中,函数重载(overload)表达了最简单的多态性(同名函数)。 void value(int); Int value( );,24,第一章 引论,1.2 面向对象语言的核心概念 1.2.3 多态性 Poly-morphism 运算符重载 运算符重载指的是相同的运算符在不同的上下文有不同的解释。例如:两个整数使用+运算符表示它们要做加法,而两个字符串可以使用+运算符则表示串连接。 C+为运算符重载提供了完整的语法支持。,25,第一章 引论,1.2 面向对象语言的核心概念 1.2.3 多态性 Poly-morphism 如果函数调用(接口)与哪个函数实现相匹配是在编译时完成的,称为早期匹配或静态联编。 如果匹配是在运行时确定的,则称为后期匹配或动态联编。 C+的虚函数提供了后期匹配带来的良好特性。,26,第一章 引论,1.3 按对象方式思维 面向对象是一种仿真技术,面向对象设计产生一种与现实具有自然关系的软件系统。 面向过程的程序设计方法鼓励全局地看问题,强调系统功能的逐步细化。而在面向对象程序设计中,每个对象严格地是局部的。每个对象管理自己的实现。 学习面向对象设计,需要将思维方式从全局转到局部,在局部中发现对象。,27,第一章 引论,1.3 按对象方式思维 设计对象需要做许多小决策,怎样将计算部分合理地分配给不同的对象。这叫做分散责任。 这是设计决策的基础,其余都是次要的。CRC方法帮助设计者分散责任,直到设计的最后阶段才考虑问题的总体。,28,第一章 引论,1.3 按对象方式思维 面向对象的CRC方法从三个方面来表述对象: Class Name。给对象命名,实际上就是对需要处理的问题空间中包含的不同性质的数据进行分类。 一个好的具有一致性的名字会为以后设计的正确性奠定基础。,29,第一章 引论,1.3 按对象方式思维 面向对象的CRC方法从三个方面来表述对象: Responsibilities。每个对象完成设计中的一个小目标的功能,它实现了这个系统状态的某一部分。 责任要简明扼要,不要太多,同时不要让对象负责自己不需要承担的责任。,30,第一章 引论,1.3 按对象方式思维 面向对象的CRC方法从三个方面来表述对象: Collaborators。每个对象都可能依赖于其它对象来完成任务。 合作者应该不要多,并且应该实用。尽量避免设计同所有对象打交道的也就是全局的对象。,31,第一章 引论,1.4 面向对象的思想和方法 1.4.1 面向对象是一种认知方法学 人们的认识过程,主要有以下两种方法。 从一般到特殊的演绎方法。 从特殊到一般的归纳方法。 面向对象提供了从一般到特殊的演绎手段,又提供了从特殊到一般的归纳形式,从而说明它是一种很好的认知方法。 这种分类、归纳的方法在面向对象设计技术中是很重要的。,32,1.4.2 面向对象与软件IC 类概念支持 “软件 IC” 技术 在面向对象语言中,类充当了系统构造的单元 类是一类对象的统一模板,它具有很强的模块性、独立性和可靠性 类是对象一级的抽象,它将一类对象的数据结构和功能实现封装起来,使得不必清楚其内部实现,只要了解功能接口就可以使用它。 类支持代码共享,这也支持了可重用性。 因此类作为 “软件 IC” 来组织软件系统从概念上是非常合适的。,1.4.3 面向对象方法与结构化程序设计方法 结构程序设计强调了功能抽象和模块性,解决问题的过程看作是处理过程。 面向对象程序设计则综合了功能抽象和数据抽象,它将解决问题的过程看作是一个分类演绎的过程。,1.4.4 对象是抽象数据类型的实现 抽象是一个系统的简化描述,它强调了系统的某些特性而忽略了其他特性。对于用户来说,所关心的是程序能做什么,而不是它的实现细节。 抽象可以用来对用户所关心的重要信息予以强调,而忽略不重要的信息。 整个程序设计语言(甚至软件开发)的发展过程就是抽象层次不断提高的过程。,1.4.4 对象是抽象数据类型的实现 为了不涉及对象的物理表示和操作实现的细节,采用抽象数据类型的描述技术。 抽象数据类型包含的信息有: 外部不可见的数据 外部不可见的操作的实现细节 外部可见的施于数据上的各操作界面(接口),将数据类型抽象为提供给外部世界的数据和操作集。使用了抽象数据类型描述,不再关心数据结构是什么,而仅仅关心它具有些什么功能可用。符合信息隐藏原则。 抽象数据类型描述的信息与对象包含的信息是一致的,对象是抽象数据类型的实现,第一章 引论,1.5 类属 类属并不是面向对象语言特有的成分,它指的是类型参数化,即参数化一个软件分量的能力。 C语言没有类属的能力,但可以通过C的宏定义来模拟类属。 C+采用模板来实现类属。 在现代的编程思想中,用“泛型”的概念来代替类属,同时具有更广泛的含义。

温馨提示

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

评论

0/150

提交评论