OOP?我会!
OOAD?我懂!
UML?知道!
RUP?XP?接触过!
如果问任何一个开发人员,尤其是java开发人员,大抵会得到这样的答复。但是,面向对象,我们真的懂了吗?本文试图阐述面向对象最基本的原理,方法,观点;以及面向对象的软件过程中应该具有的环节和注意事项。
- 写作动机及意见征集
其实我们在学习分析和设计的时候,都经历过思想转变的过程。这种过程是潜移默化的,没有听说过有人能够“顿悟”。但是当我们想清楚了之后,又觉得这一切是那么“理所当然”。所以当我们想把经验传承给别人的时候,感觉很难说清楚。本文试图能够从面向对象最基本的原理入手,用尽量平白的方式,把软件分析和设计中的一些经验表达出来。
比如,我遇到的典型对话,我感觉回答得很不好,没有把问题说清楚:
————————————————————————————————————————————————
【问】:对于面向对象来说,封装继承多态很重要吗?
【答】:这些都是手段和方法,在需要时就有用。需要学习的是思想。
【问】:思想?
【答】:思想,呵呵,就是想问题的方式。
【问】:怎么学习到面向对象的思想?
【答】:思想,不是用来学地,是用来领悟地。你能学到的是方法,很多种方法;但是遇到一个特定的问题,你采用哪种方法,为什么采用这种方法,这就是你的想法,你的思想。比如,java编程思想中介绍的无非是一些方法,但是你把他们掌握了并能灵活运用,就成了你的思想。
————————————————————————————————————————————————
【问】:接口的确应该是在实现前定下的,没这种习惯。我以前只是把接口当作一种连接的标准。
【答】:说白了,就是要用对象的眼光看系统。其实说你做东西前没有设计是冤枉你,你肯定想过了才开始做,但你是按照什么思路想的呢?面向对象不一定是最好的,但是既然你的代码要按照“类”来写,那么你设计的时候就要遵从这个思路和方法。
【问】:你别说我也觉得跟没设计一样。
【答】:呵呵,这是习惯了边做边想,其实我也有这个阶段,那时候让我一开始就想也想不明白;多积累经验,慢慢就好了。
【问】:慢慢来吧,这事还真急不了。现在对这个设计有点兴奋得感觉,呵呵。就是有浓厚的兴趣。
【答】:兴趣是最好的老师。关键是要多想。
————————————————————————————————————————————————
【问】:我现在研究一下设计模式早吗?
【答】:早了点,应该先把面向对象理解得再透彻点。其实模式的本质是对象之间的关系。首先把对象想清楚,才能学习模式。
————————————————————————————————————————————————
开这个题目的时候,自己感觉非常困难。这个题目涉及到的东西相当多,而且个人的水平实在有限,所以希望大家能够多提出意见和建议,我们一起把这件事情做好。这里先列出一个提纲:
- 面向对象 vs 面向过程。
由于我们在学校中学习的教材多数是面向过程的(不知道现在还是不是这样?),所以想首先说明面向对象和面向过程的区别与联系,是读者在面向过程的基础上对面向对象有一个总体上的认识。
- 需求过程与OOA。
其实需求过程本身就是一个很负责的问题,这里想讲的是如何以面向对象的方式来看待需求。以及,分析的套路——分析模式。
- 设计模式OOD。
现在很多人谈设计必提模式,其实大可不必。23种设计模式只是很小的一部分,模式有很多。但是设计的原则只有很少的几条,所有的设计模式都能用设计原则来解释。这部分想讲讲最基本的原则,及其相关的典型设计模式。
- OOP基础。
其实对大多数人,编程并不是问题,而且如果设计真的到位了,这里就只剩下实现了。所以是不是要写这部分,还有待考虑。