您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第三章 Java语言的面向对象编程
第三章面向对象的编程理论本章导读在本章中,我们将讨论Java语言的面向对象的特征。正如前面所介绍的,Java语言是一种标准的面向对象的编程语言,它具具的面向对象的特征非常强大,使用非常方便,同时,其语言本身又具有C++语言的灵活性。这也是我们推广Java语言的原因之一。接口是Java语言中非常重要的概念,由于Java不支持多继承,因此引入了接口的概念,用来完成多继承的一些功能,同时接口还是面向对象一个重要思想──设计与实现的分离──的体现。使用接口进行设计,然后通过类来实现这些接口,这是一种非常高效的编程方式。在本章介绍接口的时候,我们首先介绍抽象类和抽象方法,它们提供了一定程度的抽象,也体现了设计与实现的分离。接口比抽象类和抽象方法提供了更高层次的抽象。包是Java语言中引入的另一个重要概念。包使得类库的组织更加条理,包还可以提供一定程度的封装和访问控制。Java语言中很多访问控制都限制在包的层次上。本章的内容既多又繁杂,在介绍一种新的概念时,我们重点从两方面进行介绍,一是关于概念的理解,介绍的方式是将很多Java语言中的术语与现实生活中的一些术语对应起来;二是关于概念的应用,介绍的方法是通过规则描述和举例的方式进行。我们希望这样做,既能使您在语法上有清晰的认识,又能使您准确地把握概念的内涵,并且能够在编程中熟练的使用,使您真正掌握面向对象的编程理论。本章内容面向对象的理论、概念。Java语言中的类和对象的定义。类定义、属性定义、方法定义。继承的概念,以及由此引出的方法和属性的继承、隐藏、覆盖。接口定义/包定义。如何创建接口与包,如何访问包中的类和接口。关于类、抽象类、接口的使用原则。学习目标掌握面向对象的理论知识。学会类的定义,类实例化的方法。学会接口、包的定义。学会用面向对象的理论编程。3.1面向对象的编程理论“面向对象”是近年来IT行业非常流行的概念。在现实世界中,可能用的更多的是“对象”这个名词,对象的概念很难定义,但我们都理解其所具有的含义。按照正规的定义,对象是指行动或思考时作为目标的人或事物,强调的是把对象作为一个独立、完整的目标来对待,这也是IT行业引用对象这个概念的初衷。在介绍面向对象的编程理论之前,首先介绍一个已经使用几十年的结构化编程理论。结构化编程的思想强调的是一个系统由一个个独立的、较小的功能组成。随着软件系统的规模越来越大,这种编程理论遇到了较大的挑战,一个系统可能由成千上万个功能组成,而且它们之间相互调用,设计起来很难理顺它们的关系,在维护时,更会造成一动而引发全身的系列行为,大大增加了维护的难度。为了克服结构化编程的缺点,人们在设计和实现一个系统时,开始把分析一个系统的视角由一个个功能转移到系统所包含的对象上来。如对一个人事管理信息系统,它所处理的对象包括一个单位不同部门的人员,每个部门的人员可能具有不同的特点和分工,如行政人员强调的是行政级别,开展的是一些管理工作;技术级别强调的是技术职称,开展的是一个技术研究工作等等。他们的有些工作是共性的,如完成年度总结,但大部分工作是与他们的分工相关的,如果我们在设计一个系统时,能够将一些功能与完成这些功能的人对应起来,并把人与事放在一起管理,在出现一些功能变化时,我们只须针对与之相关的方面进行调整即可,这就是面向对象的设计思想。在现代软件工程设计中,面向对象的思想在软件设计和软件编程方面得到了深入的应用。面向对象的内容很丰富,要想全面的了解面向的对象的程序设计方法,您可能需要花上几年的时间。在本书中,我们只介绍一些与编程有关的、基础性的一些概念。面向对象的分析方法可以说是方法论中的一个新理论,在社会学理论中也有非常重要的意义,尤其是在管理理论方面,应用的非常广泛,如目标管理关注的就是结果,而对实现的过程关不关心,这和面向对象的理论是一致的。面向对象的理论来源我我们对现实世界的认识过程。现实世界就是由各种各样的有形或无形的事与物构成的,人们通过判断这事物的基本特征,识别出不同的事物,例如,我们通过花纹和大小,能够分辩出足球与篮球;我们通过社会不同的不同,将所有人分成工人、农民、军人等,他们从事的工作有很大差别。有的事物在宇宙中只有一个,有的可能有千千万万,这种数量上的差别也会随着我们分析事物的视角不同而不同,例如,太阳只有一个,但但它只是无数恒星中的一员。我们常常把这种具有相同特征的事与物划分成“类”来表示,典型的例子就是我们人类,每一个人都具有人类一些共性,如一个鼻子,两只眼睛等等,但世界上不同的民族又具有各自的特征,如黄种人的头发是黑的,欧洲人的头发是黄的等等。从性别上又可分为男人和女人,从年龄上可分为幼儿、少年、青年、中年、老年,从性格上分可分为内向型的和外向型的等等。正是这些丰富的特征构成了丰富的人类社会。面向对象的分析(OOD,ObjectOrientedDesign)和面向对象编程(OOP,ObjectOrientedProgramming)就是从我们认识世界的方法中提炼出来,并应用到软件工程中的一项革命性的软件开发理论,成为二十世纪八十年代以来的最主流的软件工程方法之一。我们对事物的分析一般有两个视角,一个是个体特征,另一个是群体特征,所谓个体,就是指一个具体的物或事,例如我们班上的张三,是全班学生中的一员。所谓群体,就是指具有共同特征的个体的总称,例如我们现在所在的班级全体学生。通过描述群体成员中的具体特征,我们可以定位到每一个个体,如我们可以通过姓名从全班学生中找到叫张三的人。我们在分析群体时,往往是强调的是群体中所有个体均具有的共同特征,如通过篮球的生产厂家确定某某品牌的篮球质量好,这就将某某品牌的篮球确定为一类。在JAVA语言中,我们首先定义一个群体,也就是类,再由它确定一个个个体,也就是对象或称为实例。类和对象的概念是面向对象程序设计的核心,这两个概念既基础又重要。这里还需要强调的是类的共同特征问题,在我们分析一个事物时,如果一个群体与另一个群体具有明显的差异,而且我们就是在强调这种差异,那么这两个群体则不能划分为一个群体,但如果我们强调的是这两个群体的共性,那么这两个群体则有可以划分为一个大的群体,如人类有别于其它动物,如果我们分析人类的一些商业行为时,一般不会过多地分析其它动物是否也具有这样的行为,但如果我们分析人类和其它动物饮食区别时,我们又常常将人类和其它动物类统统放在动物类加以研究。我们在分析一个事物时,往往将这些事物的特征分为两类,一类在相对静止不变的特征,如太阳是圆的;一个人有姓名、出生时间、性别等特征,我们称这些特征为属性;另一类是动态的特征,如太阳发光;人会走路等特征,我们称这些特征为行为,在JAVA语言中,将这些行为称为方法。同时,我们在分析一个事物时,往往采用由表及里、由外到内的认识过程,如一个人有两条腿,每条腿是由大腿、小腿和脚组成的……,这样一直可以分解到细胞或分子的深度。同时在我们走路时,只有我们的大腿、小腿、脚进行有机的配合,甚至还需要我们上肢的合作,我们才能运动自由。上述分析对应在面向对象的编程过程中,只不过是将软件开发中所需要面对的对象进行归纳,形成了一个个对象的模型。现实世界中的对象不是孤立的,任何对象都要和其它的对象发生关系。比如人可以启动汽车并驾驶汽车,足球运动员可以让足球以很快的速度射向球门,等等。在面向对象的编程中,对象之间也是可以相互作用的,它们通过收发消息相互联系,相互作用。一个对象如果想要求另外一个对象执行某种行为,就可以向它发送消息,接收消息的对象对消息做出响应,执行自己的某些行为。例如,有两个对象:人和汽车,如果人要启动汽车,就需要发送消息给汽车(在现实中,这种消息可能是插入钥匙并踩住油门),汽车对这个消息做出响应,执行自己的启动程序来启动汽车。收发消息是对象之间通信的一种方式,我们往往将注意力集中在这一层面上,但对发动机是如何启动的,汽车是如何被燃烧的等等细节并不关心,只要汽车能够正常启动和行驶就足够了。这也是程序设计中封装这个概念的由来。通过归纳和分析,我们可以将对象定义为由属性和行为组成的封装体。并且具有如下的特点:针对性。对象的针对性是指我们在认识一个对象时,总是对应一个具体的物体或事件,它是具体的一个,而不是抽象的、无法确定的一批。对于这一点,必须有一个清楚的认识,否则会与类的概念相混淆。自治性。对象的自治性是指对象具有一定的行为能力。对于一定的消息输入,对象能够做出反应,执行一定的行为,从而改变自身的属性或者产生某种输出。封闭性。对象的封闭性是指对象包括了属性和行为,这些属性和行为的实现细节对于其它对象来说关系不太,而且在处理其它对象时,我们不必关心本对象的实现细节。关联性。对象的通信性是指对象具有和其它对象通信的能力,即对象能够接收其它对象发来的消息,也能向其它对象发送消息。通信性反映了对象之间的某种联系,通过这种联系,许多对象可以协同完成某项任务。类的概念是对对象的分析总结后得出的一个重要概念,它是为描述具有相同特征的对象而引入的,在面向对象的编程中,实际的操作是首先创建类,然后再通过类创建对象即实例,再通过些实例完成业务功能。练习3-1请列出一些具有类和对象的一些例子。练习3-2对比一个类与对象这两个概念的相同点和不同点。3.2创建类前面,您已经了解了面向对象编程的一些基本的理论。在本节中,我们将向您介绍如何创建自己的类,包括类的声明、属性的声明、和方法的声明。在Java语言中,没有独立于类之外的变量、属性、函数及方法。在Java语言中,类也是一种数据类型,它属于引用类型。创建一个类,就是声明了一种新的数据类型,并且定义了它是如何实现的。3.2.1类的定义在Java语言中,类的定义形式如下:[修饰符]class类名[extends超类名][implements接口名]类体注意:用方括号“[]”括起来的部分表示是可选的,即可有可无的。class是类定义关键字。类名是所创建的类的名字,在程序中是通过类名来引用一个类的,因而类名是必需的。类名可以是任意合法的Java标识符,根据命名的约定,类名的每个有意义的单词的首字母要大写,其余字母小写。extends是引用超类的关键字。超类名用来表明新创建的类是从哪个类继承而来的,被继承的类称为此类的超类,也称为父类,extends后面只能跟一个超类名称。implements是引用接口的关键字。接口名用来声明这个类实现了哪些接口,接口名可以有多个。关于超类和接口的区别,我们将在后面进行详细讨论。类体定义了类的具体的实现,它是用大括号括起来的一个块,如下所示:{[属性的声明][方法的声明]}类体中可以有属性的声明(用来定义对象的属性),方法的声明(用来定义对象的行为)。它们都是可选的。其中属性的声明和方法的声明属于类的成员声明。类体中的这些声明没有先后顺序之分,您可以以任意的顺序声明它们。但为了类的可读性,我们建议您按照上面出现的顺序声明它们。修饰符有三个,它们分别是public、abstract、final。public修饰符表示定义的这个类可以在它所在的包以外声明及使用;abstract表示定义的类是一个抽象类;final表示定义的类是一个最终类,即它不能作为其它类的超类。一个类可以有多个修饰符,但是不能有几个相同的修饰符,比如两个public是错误的。当一个类有多个修饰符时,这些修饰符无先后顺序之分,您可以任意的排列它们,但是我们建议您按照publicabstractfinal的顺序写。例如:publicabstractClassBextendsClassA{…}注意:abstract和final不能同时作为一个类的修饰符。因为抽象类只是一个没有实现的虚类,必须再为实定义一个实类,才能被使用,其原因我们将在以后讲述。下面这一个“人”的类的例子,在生成这个类文件时,应在JAVA开发工具中,新建一个Java源文件People.java,在其中加入如下的代码:packagecom.mysite;publicclassPeople{privateNamename;//姓名privateStringgender;/
本文标题:第三章 Java语言的面向对象编程
链接地址:https://www.777doc.com/doc-4277101 .html