《2019年第第四章面向对象编程ppt课件》由会员分享,可在线阅读,更多相关《2019年第第四章面向对象编程ppt课件(101页珍藏版)》请在金锄头文库上搜索。
1、第4章 面向对象编程,主要任务: 理解面向对象编程的基本概念 了解类的封装方法 如何创建类和对象 了解成员变量和成员方法的特性 学习使用OOP方法进行程序设计,本章主要内容,1.面向对象基本概念 2.类与对象 3.成员变量与访问限制 4.成员方法,4.1 面向对象基本概念,面向对象编程(Object Oriented Programming, OOP)是一种全新的编程理念,而 Java是一种完全的面向对象编程语言,它的所有程序都是面向对象的,所以讲Java就是讲面向对象。 什么是OOP?什么是对象?类又是什么?它们之间有什么关系?对象是如何通过消息和外部通讯的? 下面的内容就讨论这些问题。,O
2、OP介绍,程序设计方法是逐步发展的,以前采用面向过程的设计方法,是因为计算机产生的初期主要是用于科学计算,如飞机设计、计算导弹的飞行轨迹等,这些问题的求解主要是过程计算,因此,程序设计的目标与主要工作就是设计求解问题的过程。而现在随着以Windows为代表的操作系统的广泛使用,图形用户界面的普及,比如word、excel等软件,可根据用户操作随时响应,若用面向过程则恐怕这些软件依然只能按照规定的操作步骤进行操作了。,一、结构化(面向过程的)程序设计 这种程序设计是围绕解题过程进行,必须向计算机详细说明怎样完成预定的功能:第一步做什么,第二步做什么,第三步做什么,哪些操作只做一遍,哪些重复多遍,
3、哪些某条件成立时做等等。 程序算法数据结构 面向过程的程序设计是一种数学思维或计算机思维方法,与人们认识世界的方法不同。,二、面向对象的程序设计 面向对象程序设计采纳了结构化程序设计的思想精华,并且用一些新的概念与其结合,产生了一种新的组织程序的方法。 从广义上讲,组织程序代码的方法有两种,一种是围绕代码即围绕过程或者功能进行,是一种模拟计算机思维的程序设计方法; 另一种是围绕数据,即以“数据控制代码访问”为原则,是一种对现实世界的直接模拟,按照人类习惯的思维活动进行程序设计(分类研究)。,人类习惯的思维活动是什么样的? 举例:一位厨师的头发长了需要理发,他会走进理发馆,告诉理发师要理什么发式
4、。也就是说,为了解决头发过长的问题,厨师只需要向理发师提出要求,告诉他“做什么”(即,理什么发式),并不需要告诉理发师“怎样做”,理发师自己知道第一步做什么,第二步做什么.,同样理发师肚子饿了,只需要走进餐馆点好自己要吃的饭菜,厨师自己知道该怎样做,并不需要顾客告诉他做菜的步骤,事实上,顾客无需知道做菜的具体步骤。所以可看出人类习惯的解决问题的方法是采用“顾客-服务员”的工作模式。 面向对象的程序设计方法就是模拟人类习惯的思维方法,用对象分解取代功能分解,把程序分解成许多对象,不同对象之间通过发送消息向对方提出服务要求,接受消息的对象主动完成指定功能,程序中的所有对象分工协作,共同完成整个程序
5、的功能 。 程序=对象+消息,如:理发师1.理发(板寸) 要求理发师1为其理板寸发型 这是一个消息,消息由三部分组成:接收消息的对象名、请求的方法、参数。,属性:肚子饿与不饿 方法:会理发,属性:头发长与短 方法:会做饭,厨师,理发师,理发,做饭,面向对象的程序设计就是在结构化的程序设计的基础上用另外一种方式方法进行程序设计的思路,把现实世界中的对象定义为一个类,用定义类和定义对象这种方法来编程,再往后就是用可视化的程序设计,软件里预先做好很多类,比如要在屏幕上显示一个窗口,那么用鼠标在控件上点窗口类,并拖到屏幕上放开即可,像VB。,面向对象程序设计的基本思想是在程序空间内,利用数据抽象的方法
6、对客观世界中的实体进行描述,即将一种数据结构和操作数据结构的方法捆在一起,封装在一个程序实体内,从而实现数据封装和信息隐蔽。把数据结构隐藏在操作的后面,通过“操作”作为接口界面实现与外部的交流,即消息传递。对外部来讲,只知道“它是做什么的”,而不知道“它是如何做的”。 它的本质是把数据和处理数据的过程当成一个整体-对象,采用数据抽象和信息隐蔽技术,将这个整体抽象成一种新的数据类型类。,面向对象语言有三个特性:(随后讲) 封装 继承 多态,4.1.1 对象,对象是构成世界的一个独立单位,是我们认识世界的基本单元,它具有自己的静态特征(状态/属性)和动态特征(操作/行为)。 现实生活中对象,可以是
7、有生命的个体,比如一个人或一只老虎。也可以是无生命的个体,比如一辆汽车或一台计算机。也可以是一个抽象的概念,如天气的变化或鼠标所产生的事件。属性+行为 在开发软件的信息世界中,对象与现实生活中的对象极为相似,是由属性和行为的组成的,Java程序中一般通过变量描述其属性,通过方法实现其行为。对象定义相关数据和方法的集合,通过方法来操作或改变属性,对象和对象之间通过调用方法实现相互通信。 对象=数据+方法,变量是一种有名称的数据实体,而方法则是和对象相关的函数或过程。,对象的两个特征:属性(Property)和行为(Behavior) 如:一个人的属性有:姓名、性别、年龄、身高、体重等 行为有:唱
8、歌、打球、骑车、学习等。,4.1.2 类,在Java程序中,类是创建对象的模板,对象是类的实例,任何一个对象都是隶属于某个类的。Java程序设计是从类的设计开始的,所以,在进一步讲述对象的知识之前,必须先掌握类的概念。 类是对具有相似属性和行为的一组对象的抽象。类就是对象的软件图纸、模板或原型,它定义了同类对象共有的变量和方法。 类与对象的关系如同汽车与具体的一辆车的关系,是抽象和具体的关系。类是对多个对象进行综合抽象的结果,对象又是类的个体实物,一个对象是类的一个实例,和一个对象相关的变量称为实例变量,相关的方法称为实例方法。,从众多对象中归纳出“类”,电视机A 品牌:飞利浦 型号:34寸高
9、清 行为:开 关 选频道 调声音 颜色,抽象,电视机类 品牌: 型号: 行为:,电视机B 品牌:LG 型号:21寸纯平 行为:开 关 选频道 调声音 颜色,电视机C 品牌:东芝 型号:44寸液晶 行为:开 关 选频道 调声音 颜色,从类实例化一个对象,对象是对客观事物的抽象。,抽象的定义,抽象(abstraction)是从被研究对象中舍弃个别的、非本质的、或与研究主旨无关的次要特征,而抽取与研究有关的共性内容加以考察, 形成对研究问题正确的简明扼要的认识。,例如:“原有三头牛,又买了两头,现共有几头?”这样的问题,可以抽象为3+2(这是一个忽略了具体事物本身,只研究其数量关系的模型) publ
10、ic class Cx public static void main(String args) int x=3; x=x+2;/或者x+=2; System.out.println(现有+x+头牛); ,对象与实例的区别: 实例必然是指一个具体的对象; 对象既可以指一个具体的对象,也可以泛指一般的对象。 描述一个类需要指明下述三个方面内容: (1) 类标识:类的一个有别于其他类的名字。这是必不可少的。 (2) 属性说明:用来描述相同对象的静态特征。 (3) 方法说明:用来描述相同对象的动态特征。 在Java程序中,用户自己定义类的一般格式如下: class 类名 数据成员 成员方法 ,4.1
11、.3 封装,封装是面向对象方法的一个重要原则,是将相关数据和方法封装到一个包里 。用户只能看见类中定义的公共方法,而看不到方法实现的细节,也不能直接对类的数据进行操作,迫使用户通过接口去访问数据。 它有两个含义:一是指把对象的属性和行为看成为一个密不可分的整体,将这两者“封装”在一个不可分割的独立单位(即对象)中。这样对该模块的改动,不会影响到其他模块;另一层含义指“信息隐蔽”,把不需要让外界知道的信息隐藏起来,对外形成一个边界,尽可能隐蔽对象的功能和实现细节,只保留有限的对外接口使之与外部发生联系。,4.1.4 消息,对象的行为由方法来实现,消息传递是对象之间进行交互的主要方式。 构成消息的
12、三个要素是: 接收消息的对象 接收消息后进行处理的方法 方法所需要的参数 如例题4.3中的b1.setPosition(20,20);,4.1.5 继承与多态,继承是面向对象方法中的重要概念,继承使父类的代码得到重用,在继承父类提供的共同特性基础上添加新的代码,有效提高了编程效率。 多态是面向对象程序设计的又一个重要特性。多态是允许程序中出现重名现象。Java 语言中具有方法重载与成员覆盖(重写)两种形式的多态。,4.1.6 接口,接口(interface)可以看成是为两个不相关的实体提供交流途径的设备。在Java中,接口就是为两个不相关的类提供交流的设备。接口非常类似于协议(protocol
13、一种共同行为的约定),是一个包含方法定义和常量值的集合。 接口不需要建立继承关系,就可以使两个不相关的类进行交互。接口提取了类的某些共同点,声明一些能被多个类实现的方法,但不给出方法体。,例4.1 设计一个Applet小程序,使其可以进行简单的加法运算。,首先在记事本中编写如下源程序 / 源程序名:Addition.java import java.awt.*; /引用系统类库中的awt包 import java.awt.event.*; /引用系统类库中awt.event包 import java.applet.Applet; /引用系统类库中的applet包中的Applet 类。,publ
14、ic class Addition extends Applet implements ActionListener Label label1=new Label(+); Label label2=new Label(=); TextField field1=new TextField(6); TextField field2=new TextField(6); TextField field3=new TextField(6); Button button1=new Button(相加);,public void init() / 初始化 add(field1); add(label1);
15、add(field2); add(label2); add(field3); add(button1); button1.addActionListener(this); ,public void actionPerformed(ActionEvent e) / 处理按钮事件 int x=Integer.parseInt(field1.getText()+Integer.parseInt(field2.getText(); field3.setText(Integer.toString(x); / 数值转换为字符串 ,然后新建文本文件,输入如下代码 将其保存为Addition.htm文件。/或
16、在记事本中编写保存为htm文件类型。 最后在提示符窗口中,使用javac Addition.java编译生成Addition.class字节码文件,使用appletviewer运行Addition.htm,使用命令appletviewer Addition.htm,即可看到运行结果。,4.2 类与对象,类是Java的核心,Java程序都由类组成,一个程序至少要包含一个类,也可以包含多个类。对象是类的实例,Java程序中使用标识符表示对象,并通过对象引用类中的变量和方法。,4.2 类与对象,类是Java的核心,Java程序都由类组成,一个程序至少要包含一个类,也可以包含多个类。对象是类的实例,Java程序中使用标识符表示对象,并通过对象引用类中的变量和方法。 类也是一种类型,它属于引用类型。创建 一个类就是声明了一种新的引用类型。,4.2.1 类的创建,类通过关键字class来创建,下面的声明语句格式给出了可能出现的符号和顺序: 修饰符 extends 父类 implements 接口