面向对象的程序设计-Java张白一第三版第4章.ppt
《面向对象的程序设计-Java张白一第三版第4章.ppt》由会员分享,可在线阅读,更多相关《面向对象的程序设计-Java张白一第三版第4章.ppt(156页珍藏版)》请在三一办公上搜索。
1、第4章 类与对象,4.1 类与对象的概念 4.2 封装机制 4.3 数据成员 4.4 成员方法,4.1 类与对象的概念程序设计所面对的问题域客观世界,是由许多事物构成的,这些事物既可以是有形的(比如一辆汽车),也可以是无形的(比如一次会议)。在面向对象的程序设计中,客观世界中的事物映射为对象。对象是面向对象程序设计中用来描述客观事物的基本单位。客观世界中的许多对象,无论其属性还是其行为常常有许多共同性,抽象出这些对象的共同性便可以构成类。所以,类是对象的抽象和归纳,对象是类的实例。,4.1.1 抽象原则所谓抽象(abstraction),就是从被研究对象中舍弃个别的、非本质的,或与研究主旨无关
2、的次要特征,而抽取与研究工作有关的实质性内容加以考察,形成对所研究问题正确的、简明扼要的认识。例如,“马”就是一个抽象的概念,实际上没有任何两匹马是完全相同的,但是我们舍弃了每匹马个体之间的差异,抽取其共同的、本质性的特征,就形成了“马”这个概念。,抽象是科学研究中经常使用的一种方法,是形成概念的必要手段。在计算机软件开发领域,所有编程语言都提供抽象机制,人们所能够解决的问题的复杂性直接取决于抽象的层次和质量。编程语言的抽象是指求解问题时是否根据运行解决方案的计算机结构来描述问题,它是以“机器语言汇编语言面向过程的语言面向对象的语言”这样的路径发展的。随着不同抽象层次的进展,目前主要强调的是过
3、程抽象和数据抽象。,1.过程抽象过程抽象(procedural abstraction)是指任何一个完成确定功能的操作序列,其使用者都可把它看做一个单一的实体,尽管这个操作可能是由一系列更低级的操作完成的。过程抽象隐藏了过程的具体实现。例如,用于求一个正整数平方的过程可以有下面的不同实现方式。方式1:int square(int k)return k*k;,方式2:int square(int k)int result=0;for(int i=0;ik;i+)result+=k;return result;以上两种实现方式代表了相同的抽象操作:当传递一个正整数调用square过程时,它们都返回
4、输入值的平方,不同的实现方式并不影响任何一个调用square过程的程序的正确性。,面向过程的语言(如Fortran、Pascal、C等)的程序设计采用的是过程抽象。过程在C语言中称为函数,在其他语言中称为子程序等。当求解一个问题时,过程抽象的程序设计是将一个复杂的问题分解为多个子问题,如果子问题仍然比较复杂,可再分解为多个子问题,形成层次结构。每一个子问题就是一个子过程,高层的过程可以将它下一层中的过程当做抽象操作来使用,而不用考虑它下层过程的实现方法。最后,从最底层的过程逐个求解,合并形成原问题的解。,过程抽象有两个主要优点:通过将过程看做抽象操作,编程人员可以在无需知道过程是如何实现的情况
5、下使用它们。只要抽象操作的功能是确定的,即使过程的实现被修改,也不会影响使用这个过程的程序。然而,过程抽象只关注操作,没有把操作和被操作的数据作为一个整体来看待,存在一定的弊端。二十世纪七十年代,学者们提出了抽象数据类型的概念,后来进一步发展成数据抽象的概念。,2.数据抽象数据抽象(Data Abstraction)把系统中需要处理的数据和施加于这些数据之上的操作结合为一个不可分的系统单位(即对象),根据功能、性质、作用等因素把它们抽象成不同的抽象数据类型。每个抽象数据类型既包含了数据,也包含了针对这些数据的授权操作,并限定数据的值只能由这些操作来观察和修改。因此,数据抽象是相对于过程抽象的更
6、为严格、更为合理的抽象方法。,在数据抽象中,一个抽象数据类型(值或对象)表示一组数据和一组公共操作,这些操作构成这些数据的接口。数据值的实现包括它的内部表示和基于这些表示的操作的实现。数据抽象仅提供给编程人员数据值的接口而屏蔽了它的实现,编程人员通过接口访问数据。使用数据抽象有很多优点。首先,用户不需要了解详细的实现细节就可使用它。其次,由于对用户屏蔽了数据类型的实现,因此,只要保持接口不变,数据实现的改变并不影响用户的使用。另外,由于接口规定了用户与数据之间所有可能的交互,因此,也就避免了用户对数据的非授权操作。,面向对象的程序设计就是采用数据抽象这一方法来构建程序中的类和对象的。它强调把数
7、据和操作结合为一个不可分的系统单位类/对象,对象的外部只需要知道这个对象能做什么,而不必知道它是如何做的。,3.面向过程程序设计和面向对象程序设计的不同下面通过编写求长方形面积的程序实例来说明面向过程的程序设计与面向对象的程序设计的不同。(1)在面向过程的程序设计中,把计算长方形的面积看成一个长方形过程,在过程中给出长和宽变量及求长方形面积的语句,将长和宽的值作为长方形过程的参数,通过调用该过程就可以得到该长方形的面积。,int area(int l,int w)int length=l;int width=w;return(length*width);t=area(30,20);/将长和宽的
8、值作为长方形过程的参数,调用长方形的过程,得到长方形的面积,(2)面向对象的程序设计。首先,把长方形看成一个长方形对象,将长方形对象的共性抽象出来设计成长方形类,定义类的属性(静态特征)和方法(动态特征)。然后,创建长方形类的对象,将长和宽的值的信息传递给对象的方法,引用对象的方法求对象的面积。,4.1.2 对象只要仔细研究程序设计所面对的问题域客观世界,就可以看到:客观世界是由一些具体的事物构成的,每个事物都具有自己的一组静态特征(属性)和一组动态特征(行为)。例如,一辆汽车有颜色、型号、马力、生产厂家等静态特征,又具有行驶、转弯、停车等动态特征。把客观世界的这一事实映射到面向对象的程序设计
9、中,则是把问题域中的事物抽象成了对象(object),把事物的静态特征(属性)抽象成了一组数据,把事物的动态特征(行为)抽象成了一组方法。因此,对象具有下述特征。,(1)对象标识:即对象的名字,是用户和系统识别它的唯一标志。例如,汽车的牌照可作为每一辆汽车对象的标识。对象标识有“外部标识”和“内部标识”之分。外部标识供对象的定义者或使用者使用,内部标识供系统内部唯一地识别每一个对象。在计算机世界中,可以把对象看成计算机存储器中一块可标识的区域,它能保存固定或可变数目的数据(或数据的集合)。(2)属性:即一组数据,用来描述对象的静态特征,例如汽车的颜色、型号、马力、生产厂家等。在Java程序中,
10、这组数据被称为数据成员。,(3)方法:也称为服务或操作,它是对对象动态特征(行为)的描述。每一个方法确定对象的一种行为或功能。例如,汽车的行驶、转弯、停车等动作可分别用move()、rotate()、stop()等方法来描述。为避免混淆,本书把方法称为成员方法。在Java程序中,类是创建对象的模板,对象是类的实例,任何一个对象都是隶属于某个类的。Java程序设计是从类的设计开始的,所以,在进一步讲述对象的知识之前,必须先掌握类的概念。,4.1.3 类对象是对事物的抽象,而类是对对象的抽象和归纳。人类在认识客观世界时经常采用的思维方法就是把众多的事物归纳成一些类。分类所依据的原则是抽象,即抽象出
11、与当前目标有关的本质特征,而忽略那些与当前目标无关的非本质特征,从而找出事物的共性,把具有共同性质的事物归结为一类,得出一个抽象的概念类。,在面向对象的编程语言中,类是一个独立的程序单位,是具有相同属性和方法的一组对象的集合。类的概念使我们能对属于该类的全部对象进行统一的描述。例如,“树具有树根、树干、树枝和树叶,它能进行光合作用”。这个描述适合于所有的树,从而不必对每棵具体的树都进行一次这样的描述。因此,在定义对象之前应先定义类。描述一个类需要指明下述三个方面的内容。(1)类标识:类的一个有别于其他类的名字。这是必不可少的。(2)属性说明:用来描述相同对象的静态特征。(3)方法说明:用来描述
12、相同对象的动态特征。,例如,下面是对Dog类进行的描述:,类的方法(动态特征),4.1.4 类与对象的关系类给出了属于该类的全部对象的抽象定义,而对象则是符合这种定义的一个实体。类与对象之间的关系就如同一个模具与用这个模具铸造出来的铸件之间的关系一样。也就是说,可以把类与对象之间的关系看成是抽象与具体的关系。在面向对象的程序设计中,对象被称做类的一个实例(instance),而类是对象的模板(template)。类是多个实例的综合抽象,而实例又是类的个体实物。图4.1所示为类与对象的关系。由于对象是类的实例,因此在定义对象之前应先定义类。在定义了类之后,才可以在类的基础上创建对象。,图4.1
13、类与对象的关系,4.1.5 定义类的一般格式进行Java程序设计,实际上就是定义类的过程。一个Java源程序文件往往是由许多个类组成的。从用户的角度看,Java源程序中的类分为两种:(1)系统定义的类,即Java类库,是系统定义好的类。类库是Java语言的重要组成部分。Java语言由语法规则和类库两部分组成。语法规则确定Java程序的书写规范;类库则提供了Java程序与运行它的系统软件(Java虚拟机)之间的接口。Java类库是一组由它的发明者Sun公司以及其他软件开发商编写好的Java程序模块,每个模块通常对应一种特定的基本功能和任务,且这些模块都是经过严格测试的,,因而也总是正确有效的。当
14、自己编写的Java程序需要完成其中某一功能的时候,就可以直接利用这些现成的类库,而不需要一切从头编写,这样不仅可以提高编程效率,也可以保证软件的质量。关于Java类库的更多内容将在节及以后的章节中讲述。(2)用户自己定义的类。系统定义的类虽然实现了许多常见的功能,但是用户程序仍然需要针对特定问题的特定逻辑来定义自己的类。用户按照Java的语法规则,把所研究的问题描述成Java程序中的类,以解决特定问题。进行Java程序设计,首先应学会怎样定义类。,在Java程序中,用户自己定义类的一般格式如下:class类名 数据成员 成员方法可以看出,类的结构是由类说明和类体两部分组成的。类的说明部分由关键
15、字class与类名组成,类名的命名遵循Java标识符的定义规则;类体是类声明中花括号所包括的全部内容,它又由数据成员(属性)和成员方法(方法)两部分组成。数据成员描述对象的属性;成员方法刻画对象的行为或动作,每一个成员方法确定一个功能或操作。图4.2为类的图形表示。,图4.2 类的图形表示,【示例程序C4_1.java】定义一个有数据成员及成员方法的类。import;/引用系统类库中的awt包的类import;/引用系统类库中的applet包的类public class C4_1 extends Applet/由Applet类派生的C4_1类 int a=5;/数据成员a double b=2
16、3.4;/数据成员b public void paint(Graphics g)/成员方法paint/以下使用g对象的drawString方法,该方法继承自Graphics类 g.drawString(a=+a,25,25);g.drawString(b=+b,25,35);该程序的运行结果如图4.3所示。,图4.3 程序C4_1的运行结果,4.1.6 Java类库要想掌握好Java的面向对象编程技术,编写出高质量的程序,必须对Java的类库有足够的了解。Java的类库是系统提供的已实现的标准类的集合,是Java编程的API(Application Program Interface),它可以
17、帮助开发者方便、快捷地开发Java程序。Java类库的主要部分是由它的发明者Sun公司提供的(这些类库称为基础类库(JFC),也有少量则是由其他软件开发商以商品形式提供的。有了类库中的系统类,编写Java程序时就不必一切从头做起,避免了代码的重复和可能的错误,也提高了编程的效率。一个用户程序中系统标准类使用得越多、越全面、越准确,这个程序的质量,就越高;相反,离开了系统标准类和类库,Java程序几乎寸步难行。所以,学习Java语言程序设计,一是要学习其语法规则,即第23章中的基本数据类型、基本运算和基本语句等,这是编写Java程序的基本功;二是要学习使用类库,这是提高编程效率和质量的必由之路,
18、甚至从一定程度上说,能否熟练自如地掌握尽可能多的Java类库,决定了一个Java程序员编程能力的高低。本书从第7章起主要讲述类库的使用。,在Java系统中,系统定义好的类根据实现功能的不同,可以划分成不同的集合。每个集合称为一个包,所有包合称为类库。根据功能的不同,Java类库的每个包中都有若干个具有特定功能和相互关系的类和接口。例如,java.lang包中包含了运行Java程序必不可少的系统类,它们包括基本数据类型、基本数学方法、字符串处理、线程、异常处理等类;java.awt包中包括了Java语言用来构建图形用户界面(GUI)的类库。,对于类库中系统定义好的类,有三种使用方式:一种是直接使
19、用系统类,例如在字符界面向系统标准输出设备输出字符串时使用的方法(),就是系统类System的动态属性out的方法;另一种方式是继承系统类,在用户程序里创建系统类的子类,例如每个Java Applet的主类都是java.applet包中的Applet类的子类;最后一种方式是创建系统类的对象,例如当图形界面的程序要接受用户的输入时,就可以创建一个系统类TextField类的对象来完成这个任务。,无论采用哪种方式,使用系统类的前提条件是这个系统类应该是用户程序可见的类。为此用户程序需要用import语句引入它所用到的系统类或系统类所在的包。例如使用图形用户界面的程序,应该用语句:import ja
20、va.awt.*;import.*;引入java.awt包和包。,类库包中的程序都是字节码形式的程序,利用import语句将一个包引入到程序里,就相当于在编译过程中将该包中所有系统类的字节码加入到用户的Java程序中,这样用户的Java程序就可以使用这些系统类及其中的各种功能了。下面列出一些在Java程序设计中经常使用的包。1java.lang包java.lang包是Java语言的核心类库,包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等。每个Java程序运行时,系统都会自动地引入java.lang包,所以这个包的加载是缺省的。,2java.
21、io包java.io包中包含了实现Java程序与操作系统、用户界面以及其他Java程序之间进行数据交换所使用的类,如基本输入/输出流、文件输入/输出流、过滤输入/输出流、管道输入/输出流、随机输入/输出流等。凡是需要完成与操作系统有关的较底层的输入/输出操作的Java程序,都要用到java.io包。,3java.awt包java.awt包是Java语言用来构建图形用户界面(GUI)的类库,它包括了许多界面元素和资源。利用java.awt包,开发人员可以很方便地编写出美观、方便、标准化的应用程序界面。java.awt包主要在三个方面提供界面设计支持:低级绘图操作,如Graphics类等;图形界面
22、组件和布局管理,如Checkbox类、Container类、LayoutManager接口等;界面用户交互控制和事件响应,如Event类。,4包包是对JDK 1.0版本中原有的Event类的一个扩充,它使得程序可以用不同的方式来处理不同类型的事件,并使每个图形界面的元素本身可以拥有处理它上面事件的能力。5包包是用来处理和操纵来自于网上的图片的Java工具类库。6java.applet包java.applet包是用来实现运行于Internet浏览器中的Java Applet的工具类库,它仅包含少量几个接口和一个非常有用的类。,包包是Java语言用来实现网络功能的类库。由于Java语言还在不停地发
23、展和扩充,因此它的功能,尤其是网络功能,也在不断地扩充。目前已经实现的Java网络功能类主要有:底层的网络通信类,如实现套接字通信的Socket类、ServerSocket类;编写用户自己的Telnet、FTP、邮件服务等实现网上通信的类;用于访问Internet上资源和进行CGI网关调用的类,如URL等。利用包中的类,开发者可以编写自己的具有网络功能的程序。,8java.rmi包、包和包这三个包用来实现RMI(Remote Method Invocation,远程方法调用)功能。利用RMI功能,用户程序可以在远程计算机(服务器)上创建对象,并在本地计算机(客户机)上使用这个对象。9java.
24、util包java.util包中包括了Java语言中一些低级的实用工具,如处理时间的Date类,处理变长数组的Vector类,实现栈的Stack类和实现哈希(散列)表的HashTable类等,开发者使用这些类可以更方便快捷地编程。,10java.sql包java.sql包是实现JDBC(Java DataBase Connection)的类库,利用这个包可以使Java程序具有访问不同种类数据库(如Oracle、Sybase、DB2、SQLServer等)的功能。只要安装了合适的驱动程序,同一个Java程序不需修改就可以存取、修改这些不同数据库中的数据。JDBC的这种功能,再加上Java程序本身
25、具有的平台无关性,大大拓宽了Java程序的应用范围,尤其是商业应用的适用领域。,11java.security包、包和包这三个包提供了更完善的Java程序安全性控制和管理,利用它们可以对Java程序加密,也可以把特定的Java Applet标记为“可信赖的”,使它能够具有与Java Application相近的安全权限。12包包是实现Java语言跨平台特性的手段之一。这个包虽然在程序中很少直接用到,但它的作用是将不同的平台包裹、隐藏起来,使这些平台在用户程序面前呈现基本相同的面貌。,13包包用来实现文件压缩功能。14包包提供了处理数据传输的工具类,包括剪贴板、字符串发送器等。15包包提供了用于
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 Java 张白一 第三
链接地址:https://www.31ppt.com/p-6066736.html