黑马程序员技术交流社区

标题: 关于面相对象编程的梳理总结 [打印本页]

作者: 朝阳起有落    时间: 2018-4-28 23:03
标题: 关于面相对象编程的梳理总结
一、概述
面相对象编程是java区别于其他语言的特点之一,同时也是java语言的一大亮点。面相对象这一思想也贯穿了java的程序始终。下面就来对java面相对象编程进行一些梳理和总结。
二、特点
要知道面向对象编程的特点,首先要了解一下什么是面向对象编程,以及跟它相对应的什么是面向过程编程。
1.编程思想的转变
相信大家都已经知道,在计算机最开始被发明的时候,它就只是一个超大型的计算器而已,如果说跟普通计算器有什么本质的区别,那大概就是算的快点(毕竟体型放在那里),从那时候开始,当程序员要让计算机帮忙计算的时候,都要手把手的指导它,先怎么样再怎么样,这样的编程方法,持续了很长一段时间,计算机也一直在人们手把手的指导下帮助解决着问题。
然而,当程序体型越来越庞大,现实需求越来越多样化的时候,程序员们发现,这样手把手的指导计算机去做解决问题,与现实世界的情况存在脱节的情况,或者说,在模拟现实世界的时候,要达到较高的相似度需要付出很大的代价。
举个简单的例子,一个下围棋的游戏,如果要我们手把手教计算机怎么实现这个游戏的时候,那情况可太复杂了,我们需要考虑的问题有点多,想想都头疼。
这个时候,如果换我们在现实世界实现一个下围棋的游戏,该怎么想呢?首先,有块木板——棋盘,然后,黑色的棋子,最后,白色的棋子,有这三样东西,我们不就可以下棋了吗?这不就是现实世界的情况吗?
所以,这时候我们发现,现实世界中,我们的问题其实都可以归纳为一个东西,即这个问题涉及的事物的属性与他们的行为。
只要我们把事物的这两个方面把握住了,那我们解决问题不就更好的模拟现实世界了吗?所以,我们把现实世界的一个个事物叫做对象,在计算机中模拟出来他们并进行编程的思想叫做面相对象编程
2.面相对象编程的性能优越性
在面向过程编程时,由于把解决问题的步骤写为了一个个函数,当我们对函数进行了一一调用后,如果我们的需求发生了变化(这是非常有可能的),那么我们将会对程序进行大规模的更改,并且由于函数会进行嵌套互相调用,修改起来会非常麻烦,系统的可维护性很差。
而如果我们把构成问题的事物分解成各个对象,并一一的建立对象,那我们如果需要进行更新或者是维护,那将非常方便与快捷,只要将涉及到的对象进行修改进行了。并且因为我们不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为而进行的建立对象,所以,这样就保证了功能的统一性。
3.面向对象编程的三大法宝——封装、继承、多态
所谓封装,就是将属性与行为放在对象内部,使这些代码的细节不被外界知道,外界只能通过接口使用该对象的属性和行为,而不能通过任何形式修改对象内部实现,提高了程序的可维护性、安全性。
继承,来源于现实世界,当然现实里存在着复杂的继承关系,java中主要考虑这样的继承关系:你老爸的劳斯拉斯,你继承之后,是不是就可以直接开了,甚至你还可以在车上搞出自己特有的个性,在车身上画个画什么的。类推过来就是,将父类的公用代码,继承过来直接使用,也可以搞出自己特有的功能,这样的好处是能实现公用代码的复用性,那些重复性高的代码,我们只要写一次就够了,后面要用,直接继承就行了,是不是听上去就很方便了。
4.多态,主要是为了让所有派生类都从基类继承接口,当然,这样的接口是子父类共有的行为,并且使得子类在接收同一消息的时候生成不同的相应,这样的好处是,同样的一种行为,能产生产生多种效果,这样就达到了让子类在实现继承的方法时有不同的实现的实现效果。
三、面相对象编程的类与接口的关系
在面向对象编程的过程中,我们主要通过类、接口来创建对象,那么,它们之间有什么样的关系呢?
答案就是,在类与类之间是继承关系,不过不能多继承,却可以多层次继承,在类与接口中,可以多实现,而接口与接口之间,可以多继承!这是我们要掌握面相对象编程必须要知道的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2