面向对象大家都很熟悉,可是基于对象就不一定了。两个听起来好象是同一回事,而事实上它们却千差万别。基于对象是指:我们采用对象封装技术,将数据和操作捆绑在一起,但是并没有合理地使用多态、继承等面向对象技术进行软件设计。其中的“没有合理使用”这一修饰非常重要,它道出了面向对象和基于对象的本质区别。
虽然,听起来面向对象我们很是熟悉,但就我的观察,很多以前从事C程序开发的人,当他采用面向对象的编程语言(如C++)进行开发时,写出来的程序却是基于对象的。或者说他们是采用面向对象的语言编写面向过程的程序!
要掌握面向对象技术不是一件容易的事,这要求我们对于所有的编程事务从“对象”的角度来考虑,是一种全新的思考问题的方法。我想错用最近面试过的一位工程师的话来说明什么是面向对象开发,他说“现实世界是什么,那么程序当中就应当是什么”。
从我的学习经验来看,一开始其实并不明白为什么要用对象来封装。记得1999年刚从C转向C++时,只觉得C++是另一种形式的“C”,那时并没有深刻地领悟到C++语言中所蕴涵的面向对象的强大表达能力。后来,因为工作的需要,需对来自Microsoft MSDN中的Drawcli例程进行扩展,这一工作使得自己对面向对象编程这一技术的知识有了很好的掌握,但仍没有达到随心所欲地运用的境界。这好比我们学会了一套军体拳,但却不用会用其中的各个招式去格斗。
学习面向对象编程需要一段时间通过模仿好的设计(比如前面提到的Drawcli例程),并随着模仿的深入而逐渐掌握。对面向对象编程的真正掌握,是从我们体会到其好处开始的。在我的成长经历中,曾在某一项目上对一个复杂管理问题编程很是苦恼,当时突然想到了从其中抽象出一个类来做管理,那一刻所有的复杂度似乎都消失了。之前之所以复杂是因为采用面向过程的思考方式去解决问题,而当换成面向对象的方式时无形中简化了问题。从这一经历开始,我真正领悟到了面向对象设计的好处,这也是我从模糊的理解到真正掌握的一个根本转折点。\nTAG: \n基于对象\n面向对象\n\n