OO思维(零) 写在前面

来源:互联网 发布:matable软件下载 编辑:程序博客网 时间:2024/06/11 18:33

我想在正题之前简单的讲几句关于这篇文章的事。最近看了不少关于OO的文章,大部分给人的感觉还是太理论,太教条,而且非常形式化。我写这篇文章的时候特别注意到这个问题, 最好尽量的不要把它讲的过于理论化。这里主要说的是我个人对OO的一些理解和看法。

 

认为学好C++学好JAVA就自然而然拥有了OO思维。

难道仅靠些语法就能设计出高质量的OO模型了?

认为面向过程已经被淘汰了,使用OO写出来软件就一定具有更高的质量。

难道OO真的一夫当关,天下无敌了吗?

考虑项目总是从界面开始出发,在纸上反复勾勒界面的样子。

难道这样也算用OO的方式来分析和设计吗?

手里画的都是一张张UML,写的都是一堆堆Class,用的都是一个个Pattern

难得这就是以OO的角度来思考了?

拿到别人C的代码, 先鄙视,而后将那些全局函数,全局变量一股脑的放入一个类中。

难道这就是我们需要的类吗?

觉得自己牛啊,不相信其它同志写的代码,更别说是那些DLL,总觉得那黑盒子不怎么地。

难道这就是OO需要的精神吗?

 

太多的难道使我迷失,不过没关系,好像周围的人都是这样子的。我怕谁啊?!

你要说你还没OO,你都不好意思跟人说话,还怎么在论坛里混啊?!

我们都在那里乐此不疲的用class, derivation, hierarchies,UML,JAVA, CASE。但我们不知道为什么要去用? 大纛越举越高的时候,即使看不清楚上面写着什么,大多数人也会跟着摇旗呐喊。很多同志写代码都还仗着当年C的老本。什么是C++,什么是OO?不就是多个class, derivation, hierarchies随便拿两本语法书,上面都会说的很清楚。不过我们也顶多只是走个形式罢了。

 

我们都在那里乐此不疲的用class, derivation, hierarchies,UML,JAVA, CASE。但我们不知道为什么要去用? 大纛越举越高的时候,即使看不清楚上面写着什么,大多数人也会跟着摇旗呐喊。很多同志写代码都还仗着当年C的老本。什么是C++,什么是OO?不就是多个class, derivation, hierarchies随便拿两本语法书,上面都会说的很清楚。不过我们也顶多只是走个形式罢了。

 

有时候觉得从CC++太理所当然了。一方面来说,++的目的当然是为了方便同志们能顺利地从C平滑过渡到C++,享用到C++以及OO所带来的便利。另一方面,++也确实害了不少人, 要知道C的面向过程思想和C++中的OO思想根本就是两种截然不同的思维模式。所以说这同时也是一种彻底的误导。至少我被骗进了。一骗就是三年。

The Object-Oriented Thought Process中作者就这个问题也表达了他的观点,大家不妨看一下http://blog.csdn.net/nonocast/archive/2005/03/27/332198.aspx

 

很多人都在那里执迷不悟的学习着OOA,OOD,OOP,UML以及各种CASE

 

the OO design process中作者说道:

First, at its core, object orientation is not at all about derivation, class hierarchies, UML, Java technology, and so forth. These are tools that the OO designer puts to use in order to structure the analysis, the design, and the implementation, but they aren't central to what makes an OO program object-oriented.

详见http://blog.csdn.net/nonocast/archive/2005/04/06/338231.aspx

 

可见我们之前执着的东西,诸如class, derivation, hierarchies, UML,CASE都是帮助设计人员完成OO设计的工具(tools)而已。器尔工具只是思想的体现和延伸,所以说在学习工具和模式之前,我们需要掌握的是OO思考的方式,OO的思维!

在数个OO与非OO之间的项目彻底失败之后我开始认真的反思这一系列的问题, 从我的角度来说,绝大多数时候都是手到心未到。幸好我还有一些时间静下来重新思考到底什么才是真正的OO

 

关于OO具体的问题我会在下一章节中和大家来探讨。说了那么多不得不说的废话,其实只想说明两个问题,最后总结一下:

1.       我为什么要写这篇文章?

开始我写这篇文章的目的还是很单纯,因为我这个人不长记性,时间一长,容易遗忘。在正儿八经学习OO的整个过程中,不断的置疑,不断的否定,不断的推倒重来,在日积月累之后的渐悟以及瞬间的顿悟之后,回过头来看一切都是那么的’理所当然’。可能说穿了只有那么简单的两句话,但谁又会在乎这之前不堪回首的过程呢?大师似乎也在刻意回避自己的彷徨,取而代之的是将自己领悟后的成果直接和同志们来探讨,同志们也就跟着大师step by step了。比起那些模式和规则,我更在乎的是思考的过程。

 

后来发觉其实很多同志都和我之前一样游离在OO与非OO之间,所以希望能与他们一起分享我一点点的心得。文章的内容不敢说完全正确,但它是我这段时间的心得,利用这个机会把它写出来,和大家一起交流。只要我敢说这文章里面,你觉得中间有三句五句非常有用,我个人就觉得非常地欣慰了。这么多大师都对OO进行了深入的研究分析,我尤其斗胆和大家在这个地方讨论这个问题,写这样的文章,是非常难得的一件事。但愿我们的目的就是给大家一些思考,一些启发。这个事情给我们带来一些反思。

 

2.       这篇文章值得你花时间来看吗?

目前市面上有大量大量的讲解OO,UML,Design Patterns的书籍,其中不乏优秀的作品,可以参考http://blog.csdn.net/nonocast/archive/2005/04/05/337536.aspx

几乎所有的书都是在告诉我们OO如何优越,如何利用OO来进行分析设计,如何使用各种Patterns,如何来画UML,并提供各种各样的 Study Case。而我这里想着重介绍如何形成正确的OO思维,如何以OO的方式来看待并解决问题。

 

大凡只有深入才能浅出,才能胸中丘壑自成。感谢jjhou深入浅出MFC,这本书不仅深入剖析了MFC内部机制,更是教会我学习的方法,这种方法远比某一技术重要的多,受用一生。
原创粉丝点击