如有转载,请申明:
转载至http://blog.csdn.net/qq_35064774/article/details/51886125
个人接触编程的时间也5年了,全职写代码的时间差不多也有近3年了,但这段时间走了很多弯路,一是因为身边没有经验丰富的开发者,二是很少接触程序设计方法论方面的知识。导致我看文档写代码能力是提高了,但设计能力一直不强,对工程的管理也不擅长,对面向对象的理解也不深入。最近在补设计方法方面的知识,写下这篇笔记,既方便以后复习,也是为新手答疑解惑。
1.面向对象和面向过程的区别
先说一下我对面向对象和面向过程的理解。同样一个问题的解决过程,面向对象,是把这个过程看作是对象之间的相互作用关系;而面向过程,是把问题分成n个过程,然后按一定顺序执行。为了方便理解举个栗子(已经理解的,可以跳过)。
问题描述:小明用钥匙开门,然后打开灯,
面向过程的方法是,分解成2个过程,开门、开灯。这也是最容易想到的一种方法。
面向对象的方法是。封装成4个对象,人、钥匙、门、灯。
具体实现,这里暂且不谈,毕竟只是谈一谈面向对象的思想。
2.面向对象封装应遵循的原则
高内聚:
内聚是指事物内部的联系紧密程度。在面向对象编程中,就是对象内各元素之间关系紧密程度。高内聚追求的是事物尽量只完成单一功能,以降低事物本身的复杂程度。事物复杂度降低后,和其他事物的关系就会变得简单。最终目的是避免牵一发而动全身的情况。
低耦合:
耦合是指事物之间的联系紧密程度。在面向对象编程中,就是对象与对象之间的关系紧密程度。低耦合追求的是事物尽量保持自身独立,以达到避免牵一发而动全身的情况。
比如:当积木搭到很高的时候,我们希望把积木某一处挖出来。如果积木与积木之间耦合度过高,很可能出现,挖出一块,整个积木就崩塌了;但如果耦合度低,我们可以很方便的把那块地方的积木挖出来,而不影响其他地方。
这样的思想在程序设计中也同样适用。具体体现到面向对象设计中就是尽量降低对象与对象之间的干涉。用干涉是找不到更合适的词了,因为对象之间的关系有时候很复杂。
那怎么样才能降低耦合,我常用的做法是,能在自己对象内完成的事,尽量不要在通过其他对象来完成。
举个具体例子,小明用钥匙开锁,
开锁的时候,小明要先把钥匙插到锁孔中,然后转动钥匙。如果把这两个过程放到人的开门的方法中,就会造成人、钥匙和门之间耦合度提高,而如果把这两个过程放到钥匙的开锁方法中,人开门的时,只调用钥匙的开锁方法,而不必关注开锁的具体过程。
为什么这么设计?如果我们换了一把锁,这把锁匙用声控的,这时候主人的声音成了钥匙,这时,开锁的过程又变了,如果是前者设计方式,我们就要更改人的开锁方法才能适用新变化;而后者,我们无需改变人的开锁方法,只需要调用对应的钥匙来开锁即可。
3.面向对象设计的个人经验总结
更改:
与其修改,不如添加。即当有一个方法不能满足需要时,与其修改这个方法的参数/返回值,不如新增加一个能满足需求的方法。这样可以提高向前兼容性。
扩展性:
对象之间有传递对象关系的时候,尽量把传递的对象设计成多态。这样就可以提高扩展性。
抽象类和接口:
某个抽象的事物,一般封装为抽象类;某些对象的共同的方法,一般封装为接口。
4.结束语
虽然设计在面向对象中非常重要,但对于初学者来说,考虑太多而畏首畏尾不敢动手,会影响进一步学习。当你觉得自己写代码已经够多的时候,再去看设计方法论和设计模式吧。