从写JAVA开始一直到今天也有一年多了,学习的时候网络上总是说JAVA是纯面向对象的语言。其实也不懂什么是面向对象,只是仿照着前人写代码,当然也百度过面向对象,只不过百度上的回答总是那么不够通俗易懂,只说什么封装,继承,多态之类的抽象概念,并不知道怎么写面向对象的代码,从C语言学到的面向过程化方法也在JAVA里面写,这样的代码写出来当然不够简洁优雅,没有拓展性,谈不上好代码。不过学习总是有一个循序渐进的过程,我在模仿的过程中逐渐的领悟了一些面向对象的概念,同时也明白了百度上的面向对象概念为什么这么抽象,因为实在是不好描述,这种概念只能够靠自己领悟,我在此也将自己的一些感悟记录下来。
首先需要阐述的是面向对象是一种思想,而不是一种技术,这一点非常重要。面向对象,专业术语OOP,乍一看还以为让你找个对象看着它写代码,其实没任何关系。我认为与其叫面向对象编程还不如叫面向现实编程,面向对象的代码总是与现实业务有很好的对照性,如何写出与现实复杂业务对应的代码则是面向对象思想想要描述的。
我们首先需要了解的就应该是抽象。这也是面向对象中非常重要的一步,好的抽象会让整个系统的拓展性更强,程序更加的健壮。那么什么是抽象呢?专业术语就是把众多事务的本质特征提出出来,映射成一个笼统的集合。例如“人”,我们可以从人抽象出一些特征,比如身高,性别,年龄等等,我们就说人是一个抽象集合,为什么要这么抽象呢,是为了可以复用代码,让我们不必写重复的代码,如果在程序的某一个地方用到了人,那么我们需要写出人这个类,倘若程序的另外一个地方用到了人怎么办呢,难道又重新写一次吗?这样显然不是优雅的设计,所以千呼万唤始出来的抽象就出现了,通过抽象,我们只需要粗略的描述某个事物,而不必关心内部的具体实现,我们抽象一次过后,在需要使用的地方直接使用就行了,直接new一个实例对象就可以使用了,这个人的身高性别等等属性都可以由你自己支配,只需要给相应的属性赋值就可以。我们在抽象类的时候不必关心具体的实现,我们只需要弄清我们需要什么东西即可,至于怎么实现,就不是抽象应该处理的事情了。
其次就是继承,同样的,我们会阐述什么是继承和为什么需要继承,以及继承能做什么。继承也是为了提高代码的复用性,当然它还有解耦合等功能。上一段我们说到人这个抽象概念,同样的我们也可以抽象出男人和女人这两个抽象概念,让男人和女人去继承人这个类,为什么要这么做?这当中当然有内在逻辑,男人可以说是人,但人不能说成是男人,因为还有女人,所以我们的继承逻辑就非常明显了,男人和女人都应该继承人,因为他们都是人,而不能反过来,因为逻辑说不通。我们在此约定:将继承的类叫做子类,而被继承的类叫做父类。子类继承父类之后也拥有父类的一些方法和属性(具体看类的实现),例如人会走,男人和女人都会走,所以我们不必在子类中写重复的代码去描述男人和女人会跑这件事(当然也可以重写父类方法),所以我们提高了代码的复用性,上层代码比下层代码更加的通用,下层代码继承了上层代码的某些特性但是比上层代码特殊一些。不然则需要在父类和子类中都描述人会走这件事,很显然这是吃饱了没事做!也正是继承这个特性,让面向对象的语言非常的灵活,由此在前人的总结下出现了很多种设计模式(这是比较高级的技巧了,我暂时也没全部弄懂),设计模式让整个系统的拓展性更好了,让代码更加健壮,由于本人水平有限,在此就不多阐述了,有能力和兴趣的朋友可以在网络上找到很多资料。
接着需要了解的是封装,封装,从字面意思就可以知道,封着装起来,把数据和代码捆绑在一起,将你不想暴露的属性封起来,不给别人访问,将你可以给别人的访问的属性开放,以此实现不同属性的访问权限,总的来说,封装的目的就是对数据信息的控制。
以上就是我总结的对面向对象的一些粗略的想法,可能不够成熟,也不够完善,但鉴于本人的水平以及时间关系也只能够啰嗦这么多了,如果想更进一步的了解不如去系统的学习,但面向对象是一种非常高深的思想,也是一种非常成熟的思想,想要参透还是很有难度的。在学习的过程中动手写代码是必不可少的,如果不会写就去模仿,抄代码也未尝不可,见得多了之后也就会写一些简单的代码了,而想要有更多的进步则必须动手写一些复杂的项目,在动手的过程中我相信进步会很快。最后我想说我非常不赞成学习完JavaSE之后直接学习springboot之类的框架,虽然学完了框架很快就可以动手写一些企业级项目,但是对学习并没有很大的帮助,你只是学会了使用,而真正的精髓则是框架的设计理念,我想,这才是我们需要学习的,毕竟每个人都不想只当一个螺丝钉,学习是没有尽头的,技术迭代的很快,要不断的学习才不会被淘汰。希望在大四实习的时候可以找到一份满意的实习工作,望诸位共勉!
2021.3.24
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。