《面向对象概述》PPT课件.ppt
面向对象程序设计概述面向对象程序设计概述1/21/20231面向对象程序设计概述w面向过程就是面向过程就是n n分析出解决问题所需要的步骤,然后用函数把分析出解决问题所需要的步骤,然后用函数把分析出解决问题所需要的步骤,然后用函数把分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个这些步骤一步一步实现,使用的时候一个一个这些步骤一步一步实现,使用的时候一个一个这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。依次调用就可以了。依次调用就可以了。依次调用就可以了。n n面向对象是把构成问题事务分解成各个对象,面向对象是把构成问题事务分解成各个对象,面向对象是把构成问题事务分解成各个对象,面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是建立对象的目的不是为了完成一个步骤,而是建立对象的目的不是为了完成一个步骤,而是建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的为了描叙某个事物在整个解决问题的步骤中的为了描叙某个事物在整个解决问题的步骤中的为了描叙某个事物在整个解决问题的步骤中的行为。通过对象的功能解决问题。行为。通过对象的功能解决问题。行为。通过对象的功能解决问题。行为。通过对象的功能解决问题。w1/21/20232面向对象程序设计概述w w例如五子棋,面向过程的设计思路就是首先分析问题的步例如五子棋,面向过程的设计思路就是首先分析问题的步例如五子棋,面向过程的设计思路就是首先分析问题的步例如五子棋,面向过程的设计思路就是首先分析问题的步骤:骤:骤:骤:w w1 1、开始游戏,、开始游戏,、开始游戏,、开始游戏,w w2 2、黑子先走,、黑子先走,、黑子先走,、黑子先走,w w3 3、绘制画面,、绘制画面,、绘制画面,、绘制画面,w w4 4、判断输赢,、判断输赢,、判断输赢,、判断输赢,w w5 5、轮到白子,、轮到白子,、轮到白子,、轮到白子,w w6 6、绘制画面,、绘制画面,、绘制画面,、绘制画面,w w7 7、判断输赢,、判断输赢,、判断输赢,、判断输赢,w w8 8、返回步骤、返回步骤、返回步骤、返回步骤2 2,w w9 9、输出最后结果。、输出最后结果。、输出最后结果。、输出最后结果。w w把上面每个步骤用分别的函数来实现,问题就解决了。把上面每个步骤用分别的函数来实现,问题就解决了。把上面每个步骤用分别的函数来实现,问题就解决了。把上面每个步骤用分别的函数来实现,问题就解决了。1/21/20233面向对象程序设计概述w而面向对象的设计则是从另外的思路来解决问而面向对象的设计则是从另外的思路来解决问而面向对象的设计则是从另外的思路来解决问而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为:题。整个五子棋可以分为:题。整个五子棋可以分为:题。整个五子棋可以分为:w1 1、黑白双方,这两方的行为是一模一样的,、黑白双方,这两方的行为是一模一样的,、黑白双方,这两方的行为是一模一样的,、黑白双方,这两方的行为是一模一样的,w2 2、棋盘系统,负责绘制画面,、棋盘系统,负责绘制画面,、棋盘系统,负责绘制画面,、棋盘系统,负责绘制画面,w3 3、规则系统,负责判定诸如犯规、输赢等。、规则系统,负责判定诸如犯规、输赢等。、规则系统,负责判定诸如犯规、输赢等。、规则系统,负责判定诸如犯规、输赢等。w第一类对象第一类对象第一类对象第一类对象(玩家对象玩家对象玩家对象玩家对象)负责接受用户输入,负责接受用户输入,负责接受用户输入,负责接受用户输入,并告知第二类对象并告知第二类对象并告知第二类对象并告知第二类对象(棋盘对象棋盘对象棋盘对象棋盘对象)棋子布局的变化,棋子布局的变化,棋子布局的变化,棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上棋盘对象接收到了棋子的变化就要负责在屏幕上棋盘对象接收到了棋子的变化就要负责在屏幕上棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象面显示出这种变化,同时利用第三类对象面显示出这种变化,同时利用第三类对象面显示出这种变化,同时利用第三类对象(规则系规则系规则系规则系统统统统)来对棋局进行判定。来对棋局进行判定。来对棋局进行判定。来对棋局进行判定。w1/21/20234面向对象程序设计概述w 可以明显地看出,面向对象是以事务可以明显地看出,面向对象是以事务(对象)来划分问题,而不是步骤。(对象)来划分问题,而不是步骤。w 同样是绘制棋局,这样的行为在面向过同样是绘制棋局,这样的行为在面向过程的设计中分散在了众多步骤中,很可能出程的设计中分散在了众多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。虑到实际情况进行各种各样的简化。w 而面向对象的设计中,绘图只可能在棋而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。盘对象中出现,从而保证了绘图的统一。1/21/20235面向对象程序设计概述w 功能上的统一保证了面向对象设计的可扩展性。功能上的统一保证了面向对象设计的可扩展性。功能上的统一保证了面向对象设计的可扩展性。功能上的统一保证了面向对象设计的可扩展性。w 比如我要加入悔棋的功能,如果要改动面向过比如我要加入悔棋的功能,如果要改动面向过比如我要加入悔棋的功能,如果要改动面向过比如我要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的程的设计,那么从输入到判断到显示这一连串的程的设计,那么从输入到判断到显示这一连串的程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的循序都要进行大步骤都要改动,甚至步骤之间的循序都要进行大步骤都要改动,甚至步骤之间的循序都要进行大步骤都要改动,甚至步骤之间的循序都要进行大规模调整。规模调整。规模调整。规模调整。w 如果是面向对象的话,只用改动棋盘对象就行如果是面向对象的话,只用改动棋盘对象就行如果是面向对象的话,只用改动棋盘对象就行如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯了,棋盘系统保存了黑白双方的棋谱,简单回溯了,棋盘系统保存了黑白双方的棋谱,简单回溯了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时就可以了,而显示和规则判断则不用顾及,同时就可以了,而显示和规则判断则不用顾及,同时就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只整个对对象功能的调用顺序都没有变化,改动只整个对对象功能的调用顺序都没有变化,改动只整个对对象功能的调用顺序都没有变化,改动只是局部的。是局部的。是局部的。是局部的。w到这里就可以很明显的看出面向对象和面向到这里就可以很明显的看出面向对象和面向到这里就可以很明显的看出面向对象和面向到这里就可以很明显的看出面向对象和面向过程的区别所在了。过程的区别所在了。过程的区别所在了。过程的区别所在了。1/21/20236面向对象程序设计概述什么是面向对象程序设计什么是面向对象程序设计wC C语言程序设计语言程序设计语言程序设计语言程序设计n n显示半径为显示半径为显示半径为显示半径为1515的圆面积的圆面积的圆面积的圆面积n n站在计算机的角度进行的程序设计站在计算机的角度进行的程序设计站在计算机的角度进行的程序设计站在计算机的角度进行的程序设计n n面向过程的程序设计面向过程的程序设计面向过程的程序设计面向过程的程序设计l l程序程序程序程序=过程过程过程过程+调用调用调用调用l l典型语言典型语言典型语言典型语言C C、PASCALPASCALw面向对象设计方法面向对象设计方法面向对象设计方法面向对象设计方法n n站在对象的角度进行的程序设计站在对象的角度进行的程序设计站在对象的角度进行的程序设计站在对象的角度进行的程序设计n n人类习惯的解决问题的方法人类习惯的解决问题的方法人类习惯的解决问题的方法人类习惯的解决问题的方法n n程序程序程序程序=对象对象对象对象+消息,程序中的一切操作都是通过向对象发消息,程序中的一切操作都是通过向对象发消息,程序中的一切操作都是通过向对象发消息,程序中的一切操作都是通过向对象发送消息来实现送消息来实现送消息来实现送消息来实现1/21/20237面向对象程序设计概述概述概述-主要内容主要内容w面向对象技术的基本概念面向对象技术的基本概念 w面向对象技术的基本特征面向对象技术的基本特征w面向对象技术的主要优点面向对象技术的主要优点w几种典型的面向对象程序设计语言几种典型的面向对象程序设计语言1/21/20238面向对象程序设计概述对象(一)对象(一)w面向对象技术认为客观世界是由各种各面向对象技术认为客观世界是由各种各样的对象组成,每种对象都有各自的内样的对象组成,每种对象都有各自的内部状态和运动规律,不同对象间的相互部状态和运动规律,不同对象间的相互作用和联系就构成了各种不同的系统,作用和联系就构成了各种不同的系统,构成了客观世界。构成了客观世界。w对象是组成一个系统的基本逻辑单元,对象是组成一个系统的基本逻辑单元,是一个有组织形式的含有信息的实体是一个有组织形式的含有信息的实体1/21/20239面向对象程序设计概述对象(二)对象(二)w现实世界中的对象现实世界中的对象n n任何事物都是对象(具体的、抽象的;简单的、任何事物都是对象(具体的、抽象的;简单的、任何事物都是对象(具体的、抽象的;简单的、任何事物都是对象(具体的、抽象的;简单的、复杂的)复杂的)复杂的)复杂的)n n组成:(静态的)属性组成:(静态的)属性组成:(静态的)属性组成:(静态的)属性+(动态的)行为(动态的)行为(动态的)行为(动态的)行为n n特点:特点:特点:特点:l l一个对象一个名字一个对象一个名字一个对象一个名字一个对象一个名字l l用属性描述特征用属性描述特征用属性描述特征用属性描述特征l l有一组行为有一组行为有一组行为有一组行为w w自身所承受的行为;施加于其他对象的行为自身所承受的行为;施加于其他对象的行为自身所承受的行为;施加于其他对象的行为自身所承受的行为;施加于其他对象的行为1/21/202310面向对象程序设计概述对象(三)对象(三)w面向对象程序中的对象面向对象程序中的对象n n是对现实世界对象的抽象是对现实世界对象的抽象是对现实世界对象的抽象是对现实世界对象的抽象n n组成:数据组成:数据组成:数据组成:数据+操作(方法)操作(方法)操作(方法)操作(方法)w例:半径例:半径15的圆形对象,在面向对象程序中的圆形对象,在面向对象程序中的表现:的表现:n n描述属性的数据描述属性的数据描述属性的数据描述属性的数据 半径半径半径半径 :1515n n操作操作操作操作 显示面积、显示周长显示面积、显示周长显示面积、显示周长显示面积、显示周长w对象是数据和操作封装在一起构成的统一体对象是数据和操作封装在一起构成的统一体1/21/202311面向对象程序设计概述类(一)类(一)w类(类(class)是对一组具有相同属性和行为的)是对一组具有相同属性和行为的对象的抽象对象的抽象,是描述对象的是描述对象的“基本原型基本原型”,它它定义一种对象所能拥有的数据和能完成的操定义一种对象所能拥有的数据和能完成的操作作(成员变量,方法成员变量,方法)。w例:圆形是一个类例:圆形是一个类n n半径为半径为半径为半径为1515的圆,是圆形的一个实例(实际例子)的圆,是圆形的一个实例(实际例子)的圆,是圆形的一个实例(实际例子)的圆,是圆形的一个实例(实际例子),一个具体的对象,一个具体的对象,一个具体的对象,一个具体的对象w类是一个抽象的概念,在现实世界中并不真类是一个抽象的概念,在现实世界中并不真正存在正存在1/21/202312面向对象程序设计概述类(二)类(二)w在面向对象程序中,是具有相同数据结构和在面向对象程序中,是具有相同数据结构和相同操作的一类对象的描述相同操作的一类对象的描述w例:例:“圆形圆形”类类n n属性:属性:属性:属性:半径半径半径半径n n操作:显示面积、显示周长操作:显示面积、显示周长操作:显示面积、显示周长操作:显示面积、显示周长w类的使用类的使用n n声明声明声明声明CircleCircle类类类类n n定义定义定义定义CircleCircle类的若干对象类的若干对象类的若干对象类的若干对象c1,c2(c1,c2(分别为半径为分别为半径为分别为半径为分别为半径为1515,半径为,半径为,半径为,半径为2020的圆的圆的圆的圆)n nc1,c2c1,c2均称为类均称为类均称为类均称为类CircleCircle的实例的实例的实例的实例1/21/202313面向对象程序设计概述消息和方法消息和方法w消息是对象之间发出的行为请求消息是对象之间发出的行为请求n n对象之间的交互机制,叫消息传递。对象之间的交互机制,叫消息传递。对象之间的交互机制,叫消息传递。对象之间的交互机制,叫消息传递。n n对象中的联系只能通过消息传递来进行,接收对象中的联系只能通过消息传递来进行,接收对象中的联系只能通过消息传递来进行,接收对象中的联系只能通过消息传递来进行,接收对象只有在接收到消息时,才能被激活。对象只有在接收到消息时,才能被激活。对象只有在接收到消息时,才能被激活。对象只有在接收到消息时,才能被激活。n n多个消息构成一个事件。多个消息构成一个事件。多个消息构成一个事件。多个消息构成一个事件。n n消息的三个性质:消息的三个性质:消息的三个性质:消息的三个性质:l l同一对象可以接收多个消息,作出不同响应;同一对象可以接收多个消息,作出不同响应;同一对象可以接收多个消息,作出不同响应;同一对象可以接收多个消息,作出不同响应;l l相同消息可以传递给不同对象,响应可以不同相同消息可以传递给不同对象,响应可以不同相同消息可以传递给不同对象,响应可以不同相同消息可以传递给不同对象,响应可以不同l l对消息的响应不是必需的,可以不相应。对消息的响应不是必需的,可以不相应。对消息的响应不是必需的,可以不相应。对消息的响应不是必需的,可以不相应。1/21/202314面向对象程序设计概述消息和方法消息和方法w方法就是对象所能执行的操作方法就是对象所能执行的操作n n程序设计中,要求某一对象做某一操作时,就程序设计中,要求某一对象做某一操作时,就程序设计中,要求某一对象做某一操作时,就程序设计中,要求某一对象做某一操作时,就向该对象发送一个相应的消息。向该对象发送一个相应的消息。向该对象发送一个相应的消息。向该对象发送一个相应的消息。n n对象根据接收到的消息,调用相应的方法,反对象根据接收到的消息,调用相应的方法,反对象根据接收到的消息,调用相应的方法,反对象根据接收到的消息,调用相应的方法,反之,有了方法,对象才能响应相应的消息。之,有了方法,对象才能响应相应的消息。之,有了方法,对象才能响应相应的消息。之,有了方法,对象才能响应相应的消息。n njavajava中通过中通过中通过中通过成员函数成员函数成员函数成员函数实现方法。实现方法。实现方法。实现方法。1/21/202315面向对象程序设计概述面向对象技术的基本特征面向对象技术的基本特征w抽象抽象w封装封装w继承继承w多态多态1/21/202316面向对象程序设计概述抽象抽象w抽象就是忽略事物中与当前目标无关的非本抽象就是忽略事物中与当前目标无关的非本质特征,更充分地注意与当前目标有关的本质特征,更充分地注意与当前目标有关的本质特征。质特征。w组成:组成:n n数据抽象:描述某类对象的共同属性数据抽象:描述某类对象的共同属性数据抽象:描述某类对象的共同属性数据抽象:描述某类对象的共同属性n n代码抽象:描述某类对象的共同行为特征代码抽象:描述某类对象的共同行为特征代码抽象:描述某类对象的共同行为特征代码抽象:描述某类对象的共同行为特征w例:学生成绩管理例:学生成绩管理n n共同属性:共同属性:共同属性:共同属性:String name;int number;float String name;int number;float score;(score;(数据成员数据成员数据成员数据成员)n n共同行为:共同行为:共同行为:共同行为:input();modify();print()input();modify();print()(成员函数)(成员函数)(成员函数)(成员函数)1/21/202317面向对象程序设计概述封装封装w封装就是把对象的属性和行为结合成一个独封装就是把对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节立的单位,并尽可能隐蔽对象的内部细节w封装机制使对象的使用者和设计者分开,提封装机制使对象的使用者和设计者分开,提高了代码的高了代码的重用性重用性,减轻了系统开发难度,减轻了系统开发难度1/21/202318面向对象程序设计概述继承继承w继承是一种联结类与类的层次模型。是指特继承是一种联结类与类的层次模型。是指特殊类的对象拥有其一般类的属性和行为的特殊类的对象拥有其一般类的属性和行为的特性。性。w例:例:汽车汽车公交车公交车市内公交市内公交车型、颜色、轮胎、发动机车型、颜色、轮胎、发动机换档、开灯、开冷气换档、开灯、开冷气车次、乘客数、票价车次、乘客数、票价进站、出站进站、出站开始时间、结束时间、站次、路线开始时间、结束时间、站次、路线停站时间停站时间1/21/202319面向对象程序设计概述继承继承w有继承关系的类的特性:有继承关系的类的特性:有继承关系的类的特性:有继承关系的类的特性:n n类间有共享特性类间有共享特性类间有共享特性类间有共享特性n n类间有差别类间有差别类间有差别类间有差别n n类间有层次关系类间有层次关系类间有层次关系类间有层次关系w两个类两个类两个类两个类A A和和和和B B,若,若,若,若B B继承继承继承继承A(BA(B是从是从是从是从A A中中中中派生派生派生派生出来的出来的出来的出来的):):n nA A称为基类(父类、超类)称为基类(父类、超类)称为基类(父类、超类)称为基类(父类、超类)n nB B称为继承类(子类、派生类)称为继承类(子类、派生类)称为继承类(子类、派生类)称为继承类(子类、派生类)n nB B既包含既包含既包含既包含A A的特性,也具有自己的特性。的特性,也具有自己的特性。的特性,也具有自己的特性。的特性,也具有自己的特性。w继承使基类的数据结构和操作被派生类重用继承使基类的数据结构和操作被派生类重用继承使基类的数据结构和操作被派生类重用继承使基类的数据结构和操作被派生类重用n n增加了可重用性,减少了冗余。增加了可重用性,减少了冗余。增加了可重用性,减少了冗余。增加了可重用性,减少了冗余。1/21/202320面向对象程序设计概述多态多态w不同的对象收到相同的消息时产生多种不同不同的对象收到相同的消息时产生多种不同的行为方式。的行为方式。w例:计算图形面积例:计算图形面积wCircle、Rectangle都是图型都是图型Shape的子类的子类n nShape c1=new Circle(15);Shape c1=new Circle(15);Shape c2=new Rectangle(10,12);Shape c2=new Rectangle(10,12);c1.c1.Area()Area();c2.c2.Area()Area();1/21/202321面向对象程序设计概述多态多态w子类对父类方法的覆盖子类对父类方法的覆盖n n父类:汽车父类:汽车父类:汽车父类:汽车 挂五档挂五档挂五档挂五档n n子类:子类:子类:子类:w 公共汽车公共汽车 挂五档挂五档w 奔驰轿车奔驰轿车 挂五档挂五档w 1/21/202322面向对象程序设计概述多态多态w多态性增强了软件的灵活性和重用性,为软多态性增强了软件的灵活性和重用性,为软件的开发与维护提供了极大的便利。件的开发与维护提供了极大的便利。1/21/202323面向对象程序设计概述面向对象技术的优点面向对象技术的优点w可提高程序的重用性可提高程序的重用性w可控制程序的复杂性可控制程序的复杂性w可改善程序的可维护性可改善程序的可维护性w能够更好的支持大型程序设计能够更好的支持大型程序设计w增强了计算机处理信息的范围增强了计算机处理信息的范围w能很好的适应新的硬件环境能很好的适应新的硬件环境1/21/202324面向对象程序设计概述