引言--面向对象程序设计概述.ppt

上传人:sccc 文档编号:5638355 上传时间:2023-08-04 格式:PPT 页数:48 大小:299.04KB
返回 下载 相关 举报
引言--面向对象程序设计概述.ppt_第1页
第1页 / 共48页
引言--面向对象程序设计概述.ppt_第2页
第2页 / 共48页
引言--面向对象程序设计概述.ppt_第3页
第3页 / 共48页
引言--面向对象程序设计概述.ppt_第4页
第4页 / 共48页
引言--面向对象程序设计概述.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《引言--面向对象程序设计概述.ppt》由会员分享,可在线阅读,更多相关《引言--面向对象程序设计概述.ppt(48页珍藏版)》请在三一办公上搜索。

1、面向对象C+程序设计,徐 建南京理工大学计算机学院,主要内容,面向对象程序设计概述类和对象构造函数与析构函数继承和派生类类的其他特性运算符重载输入输出流,课时安排,理论学习40学时上机实验8学时课外上机实验8学时,面向对象程序设计概述,面向对象和面向对象程序设计面向对象程序设计的基本概念面向对象软件的重要特性,一、面向对象和面向对象程序设计,什麽是面向对象对象(object)任何可以被感觉到的事物。面向(oriented)直接面对,以对象为中心。面向对象(Object Oriented)直接面对你能感觉到的任何事物。面向对象编程(Object Oriented Programming)直接面对

2、软件所要模拟的客观世界中的事物,将它们直接映射到软件系统的解空间中,成为组成软件的对象。,面向对象VS.面向过程程序设计,面向过程程序设计,设计程序步骤:根据实际问题的要求和对其进行分析,找出解决问题的方法和步骤(即设计算法)。为了在计算机上具体实现出算法,需要为该种算法选择或构造适当的数据结构,通过对数据的操纵过程体现算法的思想。也就是说,程序是在数据的某种特定表示方式和结构的基础上对抽象算法的具体描述。设计程序的结构为:数据处理过程中,采用自顶向下、分而治之的方法,将整个程序按功能分为几个可独立编程的子过程模块,每个子模块完成指定的子任务,主过程通过调用各子过程来完成全部处理工作。,例如,

3、一个学校管理软件中可以包含如下的数据结构和操作:typedef struct studenttypedef struct teacherchar name10;char name10;long num;double salary;int age;int age;char sex;char sex;student;teacher;void enroll(student*ptr)void raise(teacher*ptr).ptr-num+;ptr-salary+=100;,void print(student*ptr)void print(teacher*ptr).main().student

4、 Zhang;/定义学生数据模块teacher Li;/定义教师数据模块enroll(/操作与被操作数据匹配.,优点:自顶向下、逐步求精的结构化设计原则,该设计方法力求算法描述准确;对每一子过程模块容易进行程序正确性证明。缺点:该设计方法本质是面向“过程”的,而“过程”又是不稳定和多变的,因此不能直接反映人求解问题的思路;数据与操作的分离,容易产生数据的失配操作、不易提高程序的重用性、维护和扩展困难。程序代码可重用性差;维护程序的一致性困难。,面向过程程序设计的特点,面向对象程序设计(Object Oriented Programming)吸取结构化程序设计的一切优点,又考虑了所模拟的现实世界

5、与程序解空间的直接映射关系;采用数据抽象和信息隐藏技术使得数据和(施加于数据的)操作成为不可分割的整体;程序由类定义、类实例(对象)和对象之间的动态联系组成;程序的重用性好、易于维护和扩展较好地解决了软件复杂性控制和生产率的提高。,面向对象VS.面向过程程序设计,用面向对象的设计方法实现前例的功能:class student/类定义/属性char name10;long num;int age;char sex;/方法public:void enroll().;friend ostream,class teacher/类定义/属性char name10;double salary;int ag

6、e;char sex;/方法public:void raise().;friend ostream,main()./类实例 对象student Zhang;teacher Li;/对象方法调用Zhang.enroll();Li.raise();cout Zhang;cout Li;.,面向对象程序设计的方法,建立模型模型是对事物特征和变化规律的一种抽象,是对客体认识的深化。,被模拟的系统:,感性具体,模拟系统:,面向对象程序设计语言,Simula引入了数据抽象概念以及类和继承机制。Ada,Modula-2 等语言在它的基础上发展起来。Smalltalk第一个真正的面向对象的程序设计语言。该语言

7、引入和完善了类、方法、实例等概念,应用了继承和动态链接机制,是一种完全面向对象的程序设计语言。,面向对象程序设计语言,LISP 语言家族是一种以表处理表达为特色的人工智能程序设计语言。70 年代以来,在 LISP 的基础上开发出许多 LISP 家族的面向对象程序设计语言,例如:FlavorsLOOPS(Lisp Object Oriented Programming System)CommonLOOPSCommonObjectsCLOS(Common Lisp Object System),面向对象程序设计语言,C+C+是在 C 程序设计语言的基础上进行扩充,增加了相应的面向对象机制的混合型面

8、向对象的程序设计语言。由于 C+既具有完备的面向对象机制,又保持了 C 的灵活高效和对 C 程序的兼容性,是目前使用最广泛的面向对象程序设计语言之一。常用的 C+语言版本有:MS-C+、Turbo C+、Boland C+、Visual C+和GCC 等。,面向对象程序设计语言,Java由 Sun Microsystems 公司开发的一种完全面向对象的程序设计语言。Java 编译器生成的是一种称为“字节码”的中间码文件,该文件的执行是由运行在不同计算机平台上的 Java 虚拟机 JVM(Java Virtual Machine)完成的,所以 Java 语言非常适合网络编程,实现程序的跨平台、跨

9、介质运行的需要。,面向对象程序设计语言,C#C#是由 Microsoft 公司近年来开发一种直接用于在 Microsoft Net 平台上更易于编译产生网络程序(字节码程序)的面向对象程序设计语言。该语言具有 Java 程序的跨介质运行机制,在一定程度上保持了 C 的风格和高效率,并融入了 VB 语言开发程序的友好性和方便性,但目前还不能实现跨平台运行,二、面向对象程序设计的基本概念,对象(object)消息(message)类(class),对象,对象的定义在客观世界中,对象是任何可以感觉到的事物。对象可以是自然事物(人、动物、植物等),组织结构(学校、院系、班级等),(人类的)物质产品(房

10、屋、汽车、计算机等)和信息产品(文章、乐曲、规则、计划等)等。对象可小可大,可简单可复杂;复杂对象可以由简单对象构成。无论对象的类型、大小、复杂程度多么不同,都具有共同的特性:,对象,对象的定义无论对象的类型、大小、复杂程度多么不同,都具有共同的特性:有一个特定的名字以区别于其他对象;有一组属性,用来描述对象的静态特性;有一组行为,用来描述对象的动态特性;对象的操作可分为两类:对内提供自身服务的行为对外为其他对象提供服务的行为。,对象,(2)对象的状态在客观世界中,对象的状态是同类型的不同实例独立存在的依据,也是这些对象的行为表现差异的基础。在面向对象的软件中,对象的状态是同类对象属性的静态类

11、型和这些属性的动态值的总和。一个对象一旦创建,由静态类型所描述的属性存储区域就被分配确定,描述不同对象差异的属性动态值可以在对象创建的同时被确定,并由对象的相应行为修改。,对象,(3)对象的特性模块独立性:对象的行为仅由对象本身的状态确定,而对象的状态和行为的操作细节被封闭在模块内;动态连接性:对象(模块)之间通过消息机制,实现不同对象行为的动态连接,完成确定任务;易维护性:维护工作被最大程度地限定在对对象的状态和行为的确定规则(对象的定义类)的维护。,消息(message),(1)消息的定义消息是一个对象请求另一个对象执行其某种行为操作(也称为方法)的规格说明。这种规格说明总是由消息的接收者

12、(提供方法的对象)、消息所请求的方法(方法名)和实现方法的必要参数组成的。所以在面向对象的程序中,消息通常的表示形式是:对象名.方法。,消息(message),(2)消息的性质同一对象可以接受不同形式的多个消息,并产生不同的响应;相同形式的消息可以发送给不同接收对象,所获得的响应可以截然不同;消息的发送者可以不必考虑消息接收者是否会响应消息,消息接收者对消息的响应并不是必须的。,消息(message),(3)消息的响应接收消息的对象的状态和消息所请求的方法决定了消息的响应。消息响应所引起的操作主要包括四种:返回对象的状态;修改对象的状态;完成特定的操作;改变系统的某些状态。,消息(messag

13、e),(4)消息序列与现实世界中一样,在面向对象软件的运行中一个任务所涉及的操作总会有多个对象的参与和多次按顺序相互作用才能完成,使得这些对象能够按任务要求的顺序相互通讯的消息组成的序列被称为消息序列。,类(class),(1)类的定义在客观世界中,类是对一组具有共同特性(属性和行为)的客观事物的抽象概念。在面向对象的软件中,类是由程序员自定义的具有特定数据结构和建立数据结构上的操作功能的抽象数据类型。,类(class),(2)类与对象的关系类是创建对象的模板,提供了对象的构造规则。对象是类的实例,按类提供的规则构造的数据。同一类的不同实例(对象)必须具有:相同的操作集合;相同的静态属性集合;

14、不同的对象名和属性动态值,在C+中,就是用类来描述对象的,类是对现实世界的抽象得到的。例如,在真实世界中,同是人类的张三和李四,有许多共同点,但肯定也有许多不同点。当用C+描述时,相同类的对象具有相同的属性和行为,它把对象分为两个部分:数据(相当于属性)和对数据的操作(相当于行为)。我们刻画张三和李四的数据可能用姓名、性别、年龄、职业、住址等,而对数据的操作可能是读或设置它们他们的名字、年龄等。,从程序设计的观点来说,类就是数据类型,是用户定义的数据类型。这种类型的使用虽然与C+内置的数据类型类似,但是也有很大的区别。例如,C+内置的浮点类型并不针对任何具体问题,仅仅与机器的存储单元相对应,而

15、类是用户根据具体问题的需要而定义的,也就是说,类与具体问题相适应。我们可以通过定义所需要的类,来扩展程序设计语言解决问题的能力。,三、面向对象软件的重要特性,抽象性(abstraction)封装性(encapsulation)继承性(inheritance)多态性(polymorphism),1 抽象性(abstraction),抽象是对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述的过程。先注意问题的本质及描述,其次是实现过程或细节。数据抽象:描述某类对象的属性或状态(对象相互区别的物理量)。代码抽象:描述某类对象的共有的行为特征或具有的功能。抽象的实现:通过类的声明。,1 抽

16、象性(abstraction)实例钟表,数据抽象:int Hour,int Minute,int Second代码抽象:SetTime(),ShowTime()class Clock public:void SetTime(int NewH,int NewM,int NewS);void ShowTime();private:int Hour,Minute,Second;,1 抽象性(abstraction)实例人,数据抽象:char*name,char*gender,int age,int id代码抽象:生物属性角度:GetCloth(),Eat(),Step(),社会属性角度:Work()

17、,Promote(),2 封装性(encapsulation)什麽是封装 具有一个确定的边界,对象的所有数据成员(属性)、成员函数(行为)都被固定在这个 边界内部。对象属性的私有部分和行为的实现代码受到保 护,其他对象不能直接修改该对象所拥有的数 据和代码。具有一个接口,这个接口描述对象之间的相互 作用(请求和响应)的规格说明,即消息。封装反映了客观世界中事物的基本特性。,2 封装性(encapsulation)什麽是协议 对象对外服务的说明。对象的操作行为有三类:私有(private)操作,不向外界公开的对象行为,只供对象自身调用保护(protected)操作,向受限的外界公开的对象行为,允

18、许对象自身和派生类对象调用;公有(public)操作,向外公开的功能的对象行为,允许对象自身、派生类对象和其他对象调用,即协议的内容。,2 封装性(encapsulation)面向对象软件的封装性 实现数据隐藏和软件安全的关键。将设计与使用分隔,提供使用而隐藏设计。将功能与实现分隔。提供功能而隐藏实现。封装的三个重要概念:封装的原理 抽象数据类型;封装的实现 类定义;封装的单位 对象。,2 封装性(encapsulation)实例,class Clock public:void SetTime(int NewH,int NewM,int NewS);void ShowTime();privat

19、e:int Hour,Minute,Second;,边界,特定的访问权限,3 继承性(inheritance)什麽是继承继承表达了一种对象类之间的依赖关系,它使得某类对象可以在另一类对象的属性和行为的基础上建造自己的属性和行为。继承反映了客观世界中事物间的基本结构关系。具有继承关系的类间具有如下特征:类间具有共享特征(数据和代码的共享);类间具有细微的差别和新增部分(非共享的数 据和代码);类间具有层次结构。,3 继承性(inheritance)继承的分类具有继承关系的类自然地被分为两种:父类(基类):提供共享数据和功能的类。子类(派生类):继承共享数据和功能的类。按继承源划分:单继承:从单一

20、父类继承属性和行为。多继承:从多个父类继承属性和行为。按继承的内容划分:取代继承:子类可取代父类的作用。包含继承:子类包含了父类的全部特征。受限继承:子类只能继承父类的某些特征。特化继承:子类是父类的一种特殊类。,3 继承性(inheritance)继承与封装 继承不破坏封装;继承提供了一种静态共享手段;封装提供了一种动态共享手段。继承与委托 继承与委托的共同之处 通过代码重用提 供功能操作的共享。继承使得类之间的共享操作都由基类对象完 成,提供了从一般类构造特殊类的手段。继承 提供的共享是静态实现的,即类之间的共享是 在类定义的编译时确定的。,3 继承性(inheritance)继承与委托

21、继承与委托的共同之处 通过代码重用提 供功能操作的共享。继承使得类之间的共享操作都由基类对象完 成,提供了从一般类构造特殊类的手段。继承 提供的共享是静态实现的,即类之间的共享是 在类定义的编译时确定的。委托是将一个对象的操作或操作的一部分交给 另一个特定对象去完成。委托提供的共享既可 以静态实现又可以动态实现,即在类对象的操 作执行时确定委托对象。,3 继承性(inheritance)面向对象软件的继承性 实现软件代码重用和结构化的重要手段。能清晰体现类之间的层次结构关系;能减小代码和数据的重复冗余度,大大提高 了程序的代码重用性;能通过增加一致性来减少模块间的接口和界 面,大大提高程序的易

22、维护性;继承是能自动传播代码的有力工具;继承是在一些具有一般特征的类的基础上扩 充属性和行为,建立新类的最有效的手段。,4 多态性(polymorphism)多态表现了不同对象在接收到同一消息时,调用不 同操作,作出不同响应的现象。例如,不同类对象 的标准输入、输出、算术运算操作;具有继承关系 的不同类对象的统一接口操作。多态反映了客观世界中事物之间的通讯特征。实现多态性的重要机制和概念:重载(overlaod)为函数或运算符创建附加定义,使具有相同名字的函数或运算符在不同的场合可以表现出不同的行为,是静态实现多态性的方法。,4 多态性(polymorphism)虚函数(vitual func

23、tion)在具有继承层次结构的基类中定义虚函数的原始版本,在派生类中重定义该虚函数的新版本。运行时,根据接收消息的对象,确定虚函数的哪个版本被调用,是动态实现多态性的方法。抽象类(abstrct class)抽象类是一个公共基类;抽象类刻划了所有由它派生的类的公有行为的 统一接口(协议),而行为的操作实现由派生 类确定;抽象类不能创建对象;在 C+语言中,用声明纯虚函数的原型来实现 定义抽象类。,4 多态性(polymorphism)面向对象软件的多态性 实现了操作的多样性和编程灵活性。根据实现机制不同,多态性分为两种:静态多态性:通过重载实现,即程序在编译时 确定执行操作的哪一个重载版本,故又称为编 译多态性;动态多态性:通过虚函数和继承实现,即在程 序运行时依据接收消息的对象来确定执行操作 的哪一个虚函数版本,故又称为运行多态性。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号