您好,欢迎访问三七文档
第六章面向对象编程(OOP)本章要点面向过程的设计思想抽象封装属性、局部变量/成员属性、变量的作用域Java程序执行过程分析方法方法调用方法参数及其传递问题this关键字简单的JavaBean类包面向对象的编程思想是目前应用最广泛的编程思想。程序设计者考虑的是:对象的描述、对象间的关系、类的管理、何时何地调用对象的哪一种方法等。使用面向对象的编程思想适用于规模较大的应用程序。Java面向对象的编程思想引入了许多概念和机制,归纳总结为四大点:抽象、封装、继承和多态。6.1面向过程的设计思想面向过程的设计思想在考虑问题时,是以一个具体的流程为单位,考虑它的实现办法,关心的是功能的实现。在程序设计过程中一般由各个相关联的函数实现,耦合性比较强。在程序设计过程中,程序有一个明显的开始、明显的中间过程、明显的结束,程序的编制以这个预定好的过程为中心,设计好了开始子程序、中间子程序、结尾子程序,然后按顺序把这些子程序连接起来,一旦程序编制好这个过程就确定了,程序按顺序执行。如果在执行过程中,用户需要输入什么参数或用户做出选择,程序将等待用户的输入。只有用户提供了足够的数据,程序才能继续执行下去。下面来看一个简单的面向过程的例子。在洗衣机的工作过程中,一般要经过以下几个过程。(1)接通电源,按下洗衣机的“启动”按钮后开始供水。(2)当水满到“水满传感器”时就停止供水。(3)水满之后,洗衣机开始执行漂洗过程,正转5秒,然后倒转5秒,执行此循环动作10分钟。(4)漂洗结束之后,出水阀开始放水。(5)放水30秒后结束放水。(6)开始脱水操作,脱水持续5分钟。(7)脱水结束后,“声光报警器”报警,叫工作人员来取衣服。(8)按下“停止”按钮(或10秒报警超时到),声光报警器停止,并结束整个工作过程。按照该洗衣机的工作流程可以画出它的状态图来描述其状态转化过程,了解了该洗衣机的状态转化过程后,根据其状态图就可以很容易地为其进行软件设计,并写出相应的程序实现代码。但是这样的设计,每一个环节只关注行为动作和功能实现,没有考虑数据的状态,而且各个行为之间的耦合性比较强,不利于程序的扩展和模块化。6.2面向对象的设计思想面向对象的设计思想在考虑问题时,以具体的事物(对象)为单位,考虑它的属性(特征)及动作(行为),关注整体,就好比观察一个人一样,不仅要关注他怎么说话,怎么走路,还要关注他的身高、体重、长相等属性特征。又比如,用程序来模拟对窗口的操作。使用面向过程的设计思想时,主要就是定义针对窗口的各种操作:隐藏窗口、移动窗口、关闭窗口等功能。而使用面向对象的设计思想时,却是把窗口当作主体来看待,定义它的大小、位置、颜色等属性,同时定义好对应的动作,如隐藏、移动、关闭等。面向对象的编程思想更加接近于现实的事物,它有以下几点好处。(1)使编程更加容易。因为面向对象更接近于现实,所以可以从现实的东西出发,进行适当的抽象。(2)在软件工程上,面向对象可以使工程更加模块化,实现更低的耦合和更高的内聚。(3)在设计模式上(似乎只有面向对象才涉及设计模式),面向对象可以更好地实现开-闭原则,也使代码更易阅读。相对而言,面向过程的程序设计是面向对象程序设计的基础。面向对象的程序里面一定会有面向过程的程序片段的。在程序中,面向过程的程序设计,通过函数来实现。面向对象的程序设计,通过对象来封装函数和数据等。总的来说,面向对象编程(ObjectOrientedProgramming,OOP)是一种计算机编程架构。OOP具有的优点是:使人们的编程与实际的世界更加接近,所有的对象被赋予属性和方法,这样编程就更加富有人性化;它的宗旨在于模拟现实世界中的概念;在现实生活中所有事物全被视为对象;能够在计算机程序中用类似的实体模拟现实世界的实体(实体即实实在在的物体);它是一种设计和实现软件系统的方法。OOP主要有抽象(Abstract)、封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)四大特征。6.3抽象首先来了解面向对象编程思想的第一个特征:抽象。抽象主要用来把客观世界中真实存在的事物用编程语言描述出来。这也是理解面向对象编程思想的第一步。在了解抽象这个概念之前,需要先来了解一下对象和类的概念。6.3.1了解对象在了解对象之前,先要了解世界是由什么组成的。客观世界是由事物组成的,现实生活中各个实实在在的事物也叫实体,如图6.1所示。图6.1现实生活中的实体如果以面向对象的编程思想来看客观世界的话,万事万物皆对象。对象就是某一个具体的事物,比如一个苹果、一台计算机都是一个对象。每个对象都是唯一的,两个苹果,无论它们的外观有多么相像,内部成分有多么相似,两个苹果毕竟是两个苹果,它们是两个不同的对象。对象可以是一个实物,也可以是一个概念,比如某个苹果对象是实物,而一项政策可能就是一个概念性的对象了。在现实生活中,万事万物皆对象,OOP是模拟现实生活中的一个个对象来编程的。下面来看一个例子,如图6.2所示。图6.2生活中的对象日常生活中,大家谈论别人的媳妇(也就是对象)时,不仅会谈论她的姓名、年龄、体重等,还会关注她的行为,如:她能摔跤、会柔道等。通过上面的介绍可以看出:万事万物皆对象,每一个对象都是唯一的,对象具有属性和行为。6.3.2Java抽象思想的实现现实生活中的这么多对象需要进行分类。比如分为:人类、老虎类、猫类、汽车类等。分类的作用主要是为了便于管理和维护。由于面向对象的设计思想主要是通过模拟现实世界的各个对象来编程的。那么这些现实生活中的对象是怎样模拟或映射到计算机中的呢?这要归功于面向对象的一大思想——抽象。其实抽象不是Java语言中面向对象的设计思想所特有的,在其他面向对象的语言中,如C++等,在构建对象时也需要抽象建模。但抽象思想之所以归纳进来,是因为它的确对于理解面向对象的编程起到了非常重要的作用。在人类长期的进化过程中,人们之所以叫人类,是因为通过抽象的思想,将具有各个人的共同特征(如人有手、脚,会说话,会直立行走等)和行为的高级动物分为一类叫人类。人类主要是为了区别于其他的动物而抽取出来的。从上面的理解可以看出,所谓的抽象,即抽取,也叫提炼或归纳总结等。每一个人可以把他当成一个个具体的实体对象,通过抽象,可以很容易地归纳总结出人的共同特征和行为,以便于和其他对象区别开来。这样抽取出来的属性和行为在面向对象的编程中叫属性和方法。属性是指对象具有的各种特征;行为用来描述对象的各种操作,一般用动词来描述。每个对象的每个属性都拥有特定值,如根据图6.2可知布兰尼和朱丽叶的姓名、体重、年龄都不一样,如图6.3所示。她们执行的各种操作也不一样,如图6.4所示。通过抽象将下列对象中的属性和方法抽取出来,如图6.5所示。图6.3布兰尼和朱丽叶的属性图6.4对象的操作与方法图6.5对象的抽象6.4封装在面向对象的编程过程中为什么需要封装(Encapsulation)呢?因为对象也有隐私,对象的隐私就是对象内部的实现细节。要想对象保持良好的形象就要保护好对象隐私,所谓的封装其实就是保护对象隐私。当然,没有人能完全隐藏自己的隐私,比如现实生活中去转户口时,不得不透露自己的家庭信息和健康状况。另外,在不同的场合所透露隐私的数量也不一样,朋友和家人可能会知道你更多的隐私,同事次之,其他人则知道得更少。面向对象的编程也考虑了这些实际的情况,所以像Java之类的编程语言有public、private、protected、friend等关键字,以适应于不同的情况。封装可以隔离变化。对象内部是非常容易变化的,比如:电脑在不断升级,机箱还是方的,但里面装的CPU和内存已是今非昔比了。变化是不可避免的,但变化所影响的范围是可以控制的,不管CPU怎么变,它不应该影响用户使用的方式。封装是隔离变化的好办法,用机箱把CPU和内存等封装起来,对外只提供一些标准的接口,如USB接口、网线接口和显示器接口等,只要这些接口不变,不管内部怎么变化,也不会影响用户的使用方式。封装还可以提高易用性。封装后只暴露最少的信息给用户,对外接口清晰,使用更方便,更具用户友好性。试想,如果普通用户都要知道机箱内部各种芯片和跳线是如何布局的,那是多么恐怖的事情,到现在为止编者甚至还搞不清楚硬盘的跳线设置,幸好也没有必要知道。封装有两层含义,其一是隐藏内部行为,即隐藏内部函数,调用者只能看到对外提供的公共函数。其二是隐藏内部信息,即隐藏内部数据成员。为了实现数据的封装,提高数据的安全性,一般建议把类的属性声明为私有的,把类的方法声明为公共的。这样,对象能够直接调用类中定义的所有方法,当对象想要修改或得到自己的属性的时候就必须要调用以定义好的专用的方法才能够实现。在考虑封装的时候,建议读者遵守“对象调方法,方法改属性”的要求即可。对于面向对象编程而言,读者需要掌握如下几点。(1)抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的重要的一部分。(2)封装就是将属性和方法一起包装到一个程序单元中,并隐藏方法的实现过程。这个程序单元以类的形式实现。(3)只关注类的属性和方法就称为数据抽象。封装一个类,就是根据具体的应用从同一类型对象中抽象出相关的属性(成员变量)和方法(函数)。如:封装人这个类,将张三、李四、王五、布兰尼、朱丽叶等具体对象的重要信息抽出来,如:姓名、体重、身高、说话、行走等,只要有这些特征的高级动物归为一类就称为人类。6.4.1对象封装的概念对象同时具有属性和方法两项特性,对象的属性和方法通常被封装在一起,共同体现事物的特性,二者相辅相成,不能分割。图6.6很形象地说明了,狗除了有颜色它还能跑动,这就是说对象除了有属性外还要有方法。图6.6跑动中的小狗6.4.2理解类现实生活中任何实实在在的具体物体都叫对象,通过面向对象的抽象思想,根据很多实体的行为特征可以抽取出很多很多的对象,如张三、李四、法拉利汽车、投影仪等,然后再通过归纳总结,将这些对象分门别类,如图6.7所示。图6.7法拉利汽车法拉利汽车是一个实体,可以抽象出它们共同的特征:有四个轮子、有颜色、能开、能坐等,具有这些特征的对象可以归为一类叫做汽车类。此外还有很多很多的归类对象,如:人类、狗类、老虎类等。总的来说,类可以理解为对事物的分类。6.4.3Java类模板创建人民币分类就有100元、50元、20元、10元等,这些钱都是通过印钞机的模板印刷出来的。那么相应的就会有100元的模板、50元的模板、20元的模板等,这些模板都是根据现实生活中的一张张钱的共同特征制作出来的,它们都有尺寸、颜色、大小、功能等,如图6.8所示。类可以理解为对数据的分类类型,是各种数据的模板。在面向对象的编程过程中,类是对象的类型,不同于原始数据类型int等,它有具体的方法。类决定对象将会拥有的特征(属性)和行为(方法)。比如:人类是一个共性的概念,对象是一个个性的概念。人类肯定包含每一个人也就是对象的共同特征:姓名、身高、会说话、能行走等,这些特征都是由人类共同决定的。再比如:人民币的模板决定着印出来的人民币的颜色、大小和功能等。一个类可以决定多个对象,就好比100元人民币的模板决定印出来的人民币的样式是一样的。编程人员可以定义自己想要的类。类就是现在提到的对对象的分类,如上面提到的对人民币的分类,印刷人民币时要先造印钞的模板,模板决定造出来的钱的样式。在Java中模板即类,100元的人民币在Java中叫做对象。所以,要创建出对象,首先要创建出它的数据类型,即类。图6.8印钞机和钞票的关系在Java中是通过类来封装现实生活中对象的各个信息的,如图6.9所示。图6.9类封装图通过多个具体的人(即对象)的共性特征归纳出(也即抽象出)他们共同的特征和行为:姓名name、性别sex、年龄age、说话speak()、行走tread()等。再将这些对象归为一类叫做Person类。在Java中如何创建类呢?类是将现实世界中的概念模拟到计算机程序中,这需要由Java程序确
本文标题:第6章面向对象编程
链接地址:https://www.777doc.com/doc-2197772 .html