面向对象的一点感悟

我的理解,面向对象首先是一种思想,其次是一种行为,或者一种编程范式。

与面向对象相对的编程思想还有面向过程,面向过程注重解决的问题本身。拿煮饭为例,面向过程的做法是,将煮饭这件事分解为:取米、淘米、打开电饭煲、放米、添水、设置煮饭时间… 而面向对象的做法,会首先抽象出这件事情中的参与者,也即对象。参与煮饭的对象有做饭人与电饭煲,当然还有米,但是米的职能除了被煮熟,也没别的了,所以忽略。那么做饭人的职责,在当下(在自动淘米的电饭煲还没有被发明出来之前),至少是:取米,淘米,放米入锅,设置时长(后两步都需要电饭煲对象的参与)。那么电饭煲的职能在于:煮饭、时间到了自动提醒等。
可以看到,面向过程的做法,从执行过程入手,执着于这件事情的完成,显然更加高效。面向对象的做法,首先不去关注事件本身,而是去做一个抽象,把事件中的对象抽离出来,分析相应职能,虽然对于当下的事情并不高效,但是这种结构化的做法,更易于分析问题本质,易于代码的重构。

作为一种思想,不得不提的三个特性:封装、继承、多态。

封装:我的理解是,对象自己的东西,对象自己去处理,其他对象若要得到该对象的东西,必须以对象自己的定义的方式给出去,主动权在对象这里,且对象在给出这个东西的时候做了什么操作,其他对象无权知道,也不需要知道。其他对象把所有精力用来处理这个得到的结果以及表达对这个对象的感激之情就好。好比你的朋友精心为你制作了蛋糕,你上来第一句不是感谢,而是问他,蛋糕里的奶油与糖的比重是多少,多少温度下烘烤的…
那太疯狂了。

封装的做法,让我的name字段以我想给你的方式给你,而不是让你自己拿到这个值,你可以用getName()方法得到,而不是对象名.name的方式。

	private String name = “我”;
	
	public String getName(){
		return "我想让你得到这样的" + this.name;
	} 

继承:年幼的对象应该去继承成熟的对象,每个对象在骨子里的,被抽象到不能在抽象的时候,就是所有这类对象的共有特性的集合,也被叫做类(class)。那么两个类,能不能继续向上抽象,抽离出他们的公共特性呢?若不能,罢了。若能,那么他们被他们抽象出的这个共有类,则是更高级的抽象。他们的行为,能不能部分的效仿他呢?我想这就是继承吧。继承高级抽象的行为,效仿它、改良它、超越它。程序如是,做人如是呀。

多态:即多种状态,一个高级抽象可以被多个低级抽象所继承,这本身就是多态的。低级抽象可以使用高级的方法,并且重新提出这个方法的其他办法,不论后人提出的方法是好是坏,前人不去计较,尽情去创造吧!这也是多态。
体现在程序中,可以这么创建一个对象。高级抽象包括了更高的继承类,以及接口,我认为接口可以理解为最高的抽象,它仿佛是上帝一样,只告诉你解决问题之路,而从不会告诉你这条路怎么去走。
那么在这种方式里,你可以重写高级抽象的方法,然后用最熟悉的方式使用这个方法。

	高级抽象 抽象名 = new 低级对象();

在面向对象的世界里,一切皆对象
乍一看,这不是一句废话吗,就像在男厕所里,一切皆男士…但我认为。一切皆对象,是程序世界中最美的概念(至少目前是吧),这种思想指导着程序框架的设计,指导着计算机底层的运作方式,就java来说,一切都是对象,加载类对象的classLoader是对象、class类本身也要被对象化,才能使用,反射机制让类中的方法(Method)和属性(Field)也成为了对象,它们各自有着自己的职责范围,在自己负责的工作内默默运转着。重构的意义,我认为,就在于创建新的对象或是调整对象的职责。

以上,是我作为一个半路转行,学习java一年的小白的一些感悟,欢迎指正!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值