面向对象和基于对象的区别

来源:互联网 发布:react json转array 编辑:程序博客网 时间:2024/04/30 00:51

无意中从两篇博客中发现的,记录一下

第一篇博客http://yunli.blog.51cto.com/831344/184846

面向对象大家都很熟悉,可是基于对象就不一定了。两个听起来好象是同一回事,而事实上它们却千差万别。基于对象是指:我们采用对象封装技术,将数据和操作捆绑在一起,但是并没有合理地使用多态、继承等面向对象技术进行软件设计。其中的“没有合理使用”这一修饰非常重要,它道出了面向对象和基于对象的本质区别。


虽然,听起来面向对象我们很是熟悉,但就我的观察,很多以前从事C程序开发的人,当他采用面向对象的编程语言(如C++)进行开发时,写出来的程序却是基于对象的。或者说他们是采用面向对象的语言编写面向过程的程序!

要掌握面向对象技术不是一件容易的事,这要求我们对于所有的编程事务从“对象”的角度来考虑,是一种全新的思考问题的方法。我想错用最近面试过的一位工程师的话来说明什么是面向对象开发,他说“现实世界是什么,那么程序当中就应当是什么”。

从我的学习经验来看,一开始其实并不明白为什么要用对象来封装。记得1999年刚从C转向C++时,只觉得C++是另一种形式的“C”,那时并没有深刻地领悟到C++语言中所蕴涵的面向对象的强大表达能力。后来,因为工作的需要,需对来自Microsoft MSDN中的Drawcli例程进行扩展,这一工作使得自己对面向对象编程这一技术的知识有了很好的掌握,但仍没有达到随心所欲地运用的境界。这好比我们学会了一套军体拳,但却不用会用其中的各个招式去格斗。

学习面向对象编程需要一段时间通过模仿好的设计(比如前面提到的Drawcli例程),并随着模仿的深入而逐渐掌握。对面向对象编程的真正掌握,是从我们体会到其好处开始的。在我的成长经历中,曾在某一项目上对一个复杂管理问题编程很是苦恼,当时突然想到了从其中抽象出一个类来做管理,那一刻所有的复杂度似乎都消失了。之前之所以复杂是因为采用面向过程的思考方式去解决问题,而当换成面向对象的方式时无形中简化了问题。从这一经历开始,我真正领悟到了面向对象设计的好处,这也是我从模糊的理解到真正掌握的一个根本转折点。

第二篇博客http://blog.sina.com.cn/s/blog_4ca200e20100hstp.html

面向对象和基于对象的区别是多态,和继承无关。   
基于对象仅仅支持了抽象数据类型的功能,继承也不过体现了一种is-a的关系,也是抽象数据类型,只是建立了一个层次体系。但是什么是面向对象呢?就是根 据对象的实际类型不同,可以自动完成不同的行为,而仅仅通过一致的调用形式。换句话说,也就是虚函数实现的多态。以上观点,在OO设计中已经得到了公认, 多态的另一种实现方法是泛型。

“面向对象”和“基于对象”两个不同的概念。面向对象的三大特点(封装,继承,多态)却一不可,通常“基于对象”使用对象,但是无法利用现有的对象模板产生新的对象类型,继而产生新的对象,也就是说“基于对象”没有继承的特点,而“多态”是表示为父类类型的子类对象实例,没有了继承的概念也就无从谈论“多态”。现在的很多流行技术都是基于对象的,它们使用一些封装好的对象,调用对象的方法, 设置对象的属性。但是它们无法让程序员派生新对象类型。他们只能使用现有对象的方法和属性。所以当你判断一个新的技术是否是面向对象的时候,通常可以使用 后两个特性来加以判断。“面向对象”和“基于对象”都实现了“封装”的概念,但是面向对象实现了“继承和多态”,而“基于对象”没有实现这些,的确很饶 口。

从事面向对象编程的人按照分工来说,可以分为“类库的创建者”和“类库的使用者”。使用类库的人并不都是具备了面向对象思想的人,通常知道如何继承和派生新对象就可以使用类库了,然而我们的思维并没有真正的转过来,使用类库只是在形式上是面向对象,而实质上只是库函数的一种扩展。面向对象是一种思想,是我们考虑事情的方法,通常表现为我们是将问题的解决按照过程方式来解决呢,还是将问题抽象为一个对象来解决它。很多情况下,我们会不知不觉的按照过程方式来解决它,而不是考虑将要解决问题抽象为对象去解决它。

面向对象主要有几个特性,封装、继承、多态。没有封装就不能继承,没有继承就没有运行时的多态。基于对象并不是单独的理论,而是面向对象的初级阶段,就是只有封装。只能是把属性、方法放进类中,实例化对象调用。学习面向对象要从基础知识入手,学会定义类、接口的定义、继承。然后要深入细致的研究现实事物,把现实事物或是需求文档中的名词抽象出来生成类或属性,如果是主语,多半还要根据整句的描述生成方法,定义类结构。之所以叫抽象,是因为定义类成员时要忽略掉系统不需要的其它东西。慢慢你就发现原来写程序要不停的增删代码和重构。

原创粉丝点击