写给谁?
如果你觉得对面向对象就像一个“没有柄的倚天剑”,听说它很厉害,却无从下手,希望此贴能帮助你更加清晰的认识面向对象。
如果你对“面向对象”、“解耦”非常擅长,希望您一定看看此贴,并留下宝贵意见,如果不对之处,让我及时改正。
为什么写?
我想些篇文章好久了,主要就是写与“解耦”相关的技术(面向对象是“业务逻辑解耦”的其中一种重要方式)。但我很清楚,现在,有关面向对象的文章多如牛毛,但仍然只有少数人能够真正的运用面向对象技术。
有些朋友阅读了很多面向对象相关的文章,但理解仍然仅仅停留在“封装、继承、多态”或者是“五大设计原则”的概念上。
有些朋友让我解释一下“单一职责原则”,或者跟我说,已经学会面向对象三大技术中的“封装和继承”了,但“多态还是不会用”。
在我看来,他们都没有真正理解面向对象。甚至可以这样说,在学习面向对象的过程中,学习的方式是不太正确的……
在我进入IT行业的XX年,对面向对象也有了一定的见解,希望能够通过博客,帮助这些朋友转变一下思路,度过"面向对象"这个坎。这也是对”博客精神“的一种传递。
写什么?
如果上来就写一堆堆理论,就和其他关于面向对象的文章相似了。也不会在最开始举一些例子,例如创建一个“僵尸类”类,再用一个“读报僵尸”类继承他,中了五枪就把报纸扔掉等等。因为这种例子虽然比较典型,但是离我们绝大多数程序员实际应用距离还比较远。写什么呢?先举个例子。
假如你老板让你设计一个苍蝇拍,但是你不知道苍蝇长什么样子,不知道苍蝇大小、会不会飞,你怎么来设计?
换句话说
假如老板想让你解决一个问题,但是你不知道问题是什么?你怎么解决?
再换句话说
你不知道代码的问题在哪里,甚至不知道代码有没有问题,你如何用面向对象解决它(实现它)?
整理以下问题:
1、面向对象是干嘛的?
解决项目中存在的(或者潜在的)问题的。代码中出现了问题,才需要用到面向对象。如果代码没有问题,仍要使用面向对象,则存在过度设计之嫌。如果代码中存在问题,但你并没有察觉,也没有必要应用面向对象,否则,就好比“有病乱用药”。
2、面向对象能够解决什么问题?
高耦合问题。有一部老视频,是我学习面向对象的入门教材《C#面向对象设计模式纵横谈》。里面讲到,“面向对象设计模式”就是用来“解耦”的,我对此十分赞同。现在我们已经把“面向对象”应用范围缩小到了一个“很小”的范围:“解耦”。
3、如何学习面向对象。
学医先学病,学习面向对象,应该先学习如何找到代码中的“耦合”问题。
4、怎么理解“面向对象设计模式”、“面向对象五大原则”、“面向对象”,“封装、继承、多态”这些概念之间的关系?
“面向对象”好比“太极剑”,
“设计模式”好比“太极剑”中的“剑招”,
“五大原则”好比“太极剑”中“以静制动圆转如意”的“心法”或“剑意”,
“封装、继承、多态”好比剑术中的“刺、抹、挑、压”这些基本动作。
基本动作组合成剑招,剑招中蕴含“剑意”,不离“心法”。
因此,设计模式和五大原则是相铺相成的不能隔离开来。
封装、继承、多态仅仅是“基本动作”,完全代表不了“面向对象”。
5、怎么判断程序中是否存在“高耦合”?太抽象!
待续……
6、不会“刺、抹、挑、压”怎么办?
到幼儿园复读一年再来。
7、我想学太极剑!
本周必有教程
8、什么时候能学成?
最终忘掉一切设计模式,用意不用力,以无招胜有招!
待续……