《面向对象程序设计.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计.ppt(18页珍藏版)》请在优知文库上搜索。
1、C语语言言程程序序设设计计 第10章面向对象程序设计第10章 面向对象程序设计教学目的:教学目的:了解面向对象程序设计的编程思想了解面向对象程序设计的编程思想了解面向对象程序设计的基本概念了解面向对象程序设计的基本概念了解面向对象程序设计的基本方法和实现了解面向对象程序设计的基本方法和实现了解面向对象的软件开发了解面向对象的软件开发 C语语言言程程序序设设计计 第10章面向对象程序设计教学内容:教学内容:结构化程序设计与面向对象程序设计结构化程序设计与面向对象程序设计面向对象程序设计的基本概念面向对象程序设计的基本概念面向对象程序设计的基本特定面向对象程序设计的基本特定类和对象类和对象继承和派
2、生继承和派生多态性多态性面向对象的软件开发面向对象的软件开发C语语言言程程序序设设计计 第10章面向对象程序设计10.1 结构化程序设计与面向对象程序设计结构化程序设计与面向对象程序设计10.1.1 结构化程序设计与面向对象程序设计概述结构化程序设计与面向对象程序设计概述 结构化程序设计的思路:结构化程序设计的思路:自顶向下、逐步求精自顶向下、逐步求精,其程其程序结构是按功能划分为若干个基本模块,这些模块形成序结构是按功能划分为若干个基本模块,这些模块形成一个树状结构;各模块之间的关系尽可能简单,在功能一个树状结构;各模块之间的关系尽可能简单,在功能上相对独立;每模块内部均是由顺序、选择和循环
3、三种上相对独立;每模块内部均是由顺序、选择和循环三种基本结构组成;模块实现的方法是调用子模块。基本结构组成;模块实现的方法是调用子模块。 优点:优点:有效的将一个复杂的程序系统设计任务分解有效的将一个复杂的程序系统设计任务分解成易于控制和处理的子任务,成易于控制和处理的子任务,便于开发和维护便于开发和维护。 缺点:缺点:把数据和处理数据的过程分离为相互独立的把数据和处理数据的过程分离为相互独立的实体,当数据结构发生改变时,所有相关的处理过程都实体,当数据结构发生改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的新方法都要要进行相应的修改,每一种相对于老问题的新方法都要带来额外的
4、开销,带来额外的开销,程序的可重用性差程序的可重用性差。 面向对象的程序设计面向对象的程序设计是由是由对象对象组合而成的,其中对组合而成的,其中对象是用象是用类类来定义的,程序之间的交互主要是通过来定义的,程序之间的交互主要是通过对象与对象与对象之间的消息传递对象之间的消息传递进行操作的。进行操作的。 软件开发从本质上讲,就是对软件所要处理的问题软件开发从本质上讲,就是对软件所要处理的问题域进行正确的认识,并把这种认识正确的描述出来。面域进行正确的认识,并把这种认识正确的描述出来。面向对象方法所强调的基本原则,就是直接面对客观存在向对象方法所强调的基本原则,就是直接面对客观存在的事务进行软件开
5、发,将人们日常生活的习惯的思维方的事务进行软件开发,将人们日常生活的习惯的思维方式和表达方式应用在软件开发中,使软件开发从过分专式和表达方式应用在软件开发中,使软件开发从过分专业化的方法、规则和技巧回到客观世界,回到人们通常业化的方法、规则和技巧回到客观世界,回到人们通常的思维方式。的思维方式。C语语言言程程序序设设计计 第10章面向对象程序设计10.1.2 结构化程序设计和面向对象程序设计解决结构化程序设计和面向对象程序设计解决问题的比较问题的比较 解决一个设置时钟的时间,并显示出来的问题。解决一个设置时钟的时间,并显示出来的问题。 用用结构化程序设计结构化程序设计的方法,的方法,把各步骤分
6、解出来做成由几把各步骤分解出来做成由几个函数来解决问题,步骤如下:个函数来解决问题,步骤如下:(1 1)建立结构)建立结构(2 2)定义全局变量)定义全局变量(3 3)定义设置时间函数)定义设置时间函数(4 4)定义显示时间函数)定义显示时间函数(5 5)定义主程序,分别调用相关函数)定义主程序,分别调用相关函数 #includestdio.h#include structstruct time time int int hour,minute,second; hour,minute,second;t1;t1;void showtimevoid showtime( )( ) printf(%d
7、:%d:%dn,t1.hour,t1.minute,t1.second); printf(%d:%d:%dn,t1.hour,t1.minute,t1.second); void settime(int hour,int minute,intvoid settime(int hour,int minute,int second) second) t1.hour=hour; t1.hour=hour; t1.minute=minute; t1.minute=minute; t1.second=second; t1.second=second; void main()void main() set
8、time(8,30,30); settime(8,30,30); showtime showtime();(); #includeiostream.h#include class Clockclass Clock private: private: int int hour,minute,second; hour,minute,second; public: public: Clock() / Clock() /构造函数完成数据成员的初始化构造函数完成数据成员的初始化 hour=0;minute=0;second=0; hour=0;minute=0;second=0; void settim
9、e(int h,int m,int void settime(int h,int m,int s) / s) /设置时间的函数设置时间的函数 hour=h;minute=m;second=s; hour=h;minute=m;second=s; void showtime void showtime() /() /显示时间的函数显示时间的函数 couthour:minute:secondendl couthour:minute:secondendl;void main() /void main() /主函数的定义主函数的定义 Clock c1; Clock c1; c1.settime(8,3
10、0,30); c1.settime(8,30,30); c1.showtime(); c1.showtime(); 面向对象的程序设计的思路面向对象的程序设计的思路:把时钟问题用把时钟问题用ClockClock类来实现,类来实现,在主函数中,用户只需要使用在主函数中,用户只需要使用ClockClock类设计其对象类设计其对象, ,只要明确知道只要明确知道ClockClock类的外部接口函数类的外部接口函数, ,也就是操作该对象的方法也就是操作该对象的方法settime()settime()和和showtimeshowtime()()就可以了,至于就可以了,至于ClockClock类的内部实现类
11、的内部实现, ,使用者一概不需要使用者一概不需要知道,知道接口和接口方法是什么,只须拿来用就可以了知道,知道接口和接口方法是什么,只须拿来用就可以了。这样的程序设计很好的保护了各类成员数据的安全,主函数代码调这样的程序设计很好的保护了各类成员数据的安全,主函数代码调用极其简单,只有建立对象和调用对象方法的操作这两步而已。以用极其简单,只有建立对象和调用对象方法的操作这两步而已。以后类一旦需要修改,只修改类体本身就可以,而主函数不需要做任后类一旦需要修改,只修改类体本身就可以,而主函数不需要做任何修改,这样就很好的做到了什么人做的事情什么人处理,互不冲何修改,这样就很好的做到了什么人做的事情什么
12、人处理,互不冲突。突。 C语语言言程程序序设设计计 第10章面向对象程序设计10.2 面向对象程序设计的基本概念面向对象程序设计的基本概念 面向对象的思想认为,客观世界是由各种各样的对面向对象的思想认为,客观世界是由各种各样的对象构成的,每种对象都有各自的属性和行为,不同对象象构成的,每种对象都有各自的属性和行为,不同对象之间的相互作用和联系构成了不同的系统。面向对象的之间的相互作用和联系构成了不同的系统。面向对象的方法就是要面对现实世界的实体,并将其抽象为对象,方法就是要面对现实世界的实体,并将其抽象为对象,以对象为基本单位,分析、设计和实现一个系统。以对象为基本单位,分析、设计和实现一个系
13、统。 (1 1)对象对象对象是指现实世界中无所不在的各种各样的实体。每一对象是指现实世界中无所不在的各种各样的实体。每一个实体包括特定的静态的属性和动态的行为,在面向对个实体包括特定的静态的属性和动态的行为,在面向对象的程序设计中将该实体的属性(用数据成员表示)和象的程序设计中将该实体的属性(用数据成员表示)和行为(用操作数据的函数成员表示)封装在一个整体里;行为(用操作数据的函数成员表示)封装在一个整体里;每一个实体都有所属的类,在该类中还有许多其它的不每一个实体都有所属的类,在该类中还有许多其它的不同实体,因此在建立对象时,必须给对象赋予唯一的标同实体,因此在建立对象时,必须给对象赋予唯一
14、的标识符,用来标识该对象。识符,用来标识该对象。 (3 3)消息消息消息是向某对象请求服务的一种表达式,如果用户或其消息是向某对象请求服务的一种表达式,如果用户或其他对象提出服务请求,便可以称为向该对象发送消息。他对象提出服务请求,便可以称为向该对象发送消息。在面向对象的程序中,程序执行是靠对象之间传递消息在面向对象的程序中,程序执行是靠对象之间传递消息来完成的。消息实现了对象与外界、对象于其他对象之来完成的。消息实现了对象与外界、对象于其他对象之间的联系,消息传递组成部分:间的联系,消息传递组成部分:接收消息的对象、请求接收消息的对象、请求对象的方法和一个或多个参数。对象的方法和一个或多个参
15、数。(2)类类类是对一组对象共同具有的属性和行为的抽象,它提供了一个具有特定功能的模块和一种代码共享的手段。类是实现数据抽象和封装的工具。类是一组对象的抽象,而对象则是类的一个实例。在程序中,从语法来看,类和对象的关系相当于数据类型和变量的关系。(4 4)方法方法方法是一个函数成员,是对某个对象接受了某一消息后方法是一个函数成员,是对某个对象接受了某一消息后所采取的一系列操作的描述。所采取的一系列操作的描述。C语语言言程程序序设设计计 第10章面向对象程序设计10.3 10.3 面向对象程序设计的基本特点面向对象程序设计的基本特点 (1)抽象性抽象性:抽象是指忽略一类事物中与当前处理问题的主题
16、无关的细节,包括数据抽象和代码抽象两方面,数据抽象定义了对象的属性,而代码抽象则定义了某类对象的共同行为特征。在面向对象的程序设计中,类是实现抽象的工具。(2)封装性封装性:封装是将抽象得到的数据和代码集合在一个整体里的过程,它还具有对内部细节隐藏保护的能力,类内某些成员可以以对外隐藏的属性被保护起来。在C+的内部,类是实现封装的工具,封装保证了类具有较好的独立性,防止外部程序破坏类的内部数据,同时便于程序的维护和修改。(3 3)继承性继承性:继承是一个形象的、易于理解的术语。比:继承是一个形象的、易于理解的术语。比如子承父业、继承遗产等都涵盖了这一名词所连接的两如子承父业、继承遗产等都涵盖了这一名词所连接的两个类层次之间的关系,既继承者拥有被继承者所有的相个类层次之间的关系,既继承者拥有被继承者所有的相关属性及行为。在面向对象程序设计中,继承是一种连关属性及行为。在面向对象程序设计中,继承是一种连接类与类的层次模型,利用现有类派生新类的过程称为接类与类的层次模型,利用现有类派生新类的过程称为类的继承。新类(子类或称为派生类)拥有原有类(父类的继承。新类(子类或称为派生类)拥有原有类(