对于面向对象的新的理解与一些思考

之所以会写这一篇文章,是因为读到《Effective Java》这本书,有一些感悟,对面向对象的一些新的理解和思考可以说是这些感悟的核心。

每一个初学java的人都见过这样一句话:java是面向对象的高级编程语言。不管是什么途径去学习,必然会了解到面向对象和面向过程的区别,大部分的阐述从三个角度去解释,思路、特点和优势,无非是面向对象注重结果,将过程抽象化,而面向过程注重过程,自顶向下进行编程,重点为这两者这间的差别,但事实上面向对象并不是区别于面向过程而存在的,而是基于面向过程在处理拥有大量相同逻辑的问题时所产生的问题而出现的一种解决问题的思想,从编程语言的发展史也可以看出,是先有的c语言(面向过程),再出现的c++(面向对象)。 我在下面会通过一些例子来尽可能清晰的说明这种观点的正确性。

首先我们看官方给出的对于面向对象的解释:a computer programming model that organizes software design around data, or objects, rather than functions and logic.—— 一种以数据或者对象为中心来设计软件,而非函数与逻辑的计算机编程模型。  我对于这句话的理解为:在某一种场景下针对某一类问题以动作执行主体出发得出的通用解决方案的思想,对问题中主体抽象的结果就是类(模板)。更加直观的描述为  避免重复来达到高效。

在面向对象中,有一句话很出名:万物皆是对象。只要是面向对象的编程语言都遵循这一基本原则,因为有一条基本规则:Object类是所有类的超类 。 这是因为面向对象思想需要使用一种方法来表示对象的通用属性,来描述这种抽象出来的问题元素,这样一来就可以具体处理某一类问题。  举例说明,我现在需要使用面向对象的思维来描述两只小猫在翻墙这样一个事件,这个问题中的元素有两只小猫,所以我们将它们的共性(使得解决方法通用的关键就是寻找共性,并且将共性进行规范形成固定的可复用的类)—— 都是猫科动物,在执行翻墙这个动作 进行抽取成为类,这样两只小猫依照这个类就成为了两个对象,可以执行翻墙的这个动作。    我们可以用面向过程的解决方式来对比,面向过程中,猫咪需要先完成蹬地起跳,在墙顶调整姿势,完成落地等一系列任务最终完成翻墙动作,这个过程中重要是执行任务(函数),对于执行主体并没有抽象的描述,如果将上述问题扩展为一只小猫为黑色,一只小猫为白色进行翻墙,这时面向对象的主要优势就体现出来了,我们在猫科动物这个类中添加一个颜色属性即可,但是对于面向过程而言,就不是这么容易了。

但是需要说明的是大多数支持面向对象的语言,同时也支持面向过程,它们都还无法完全面向对象,因为面向过程是必然的,面向过程代表着必要的程序流程,调动对象进行组合或对象内部能力的实现,都一定会存在“过程”,它最终还是需要通过拆分步骤来指导最具体的执行细节。

在此,我们也能得到一些感悟,许多事情并非完全非黑即白,特别是思想层面的东西,它们呈现出互相结合的形态,从面向过程到面向对象,这是一个思想进步的过程。

第一次了解到面向对象应该是2年前,和如今的理解有很大不同,后续也打算把之前学习时的笔记做补充后发布至博客,如果有不同见解可以在评论区讨论,相互补充与学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值