面向过程与面向对象的本质区别-对面向过程与面向对象的一点感悟

面向过程与面向对象的本质区别

一位计算机界的大师曾说过,“我认为,面向对象的目标从来都不是复用和扩展,而是提供一种处理复杂问题的方法”。

面向过程讲究自顶向下逐步求精。找到一个系统的入口然后顺藤摸瓜,分析出每一步以及影响这一步的其他因素,我们就能够定义这个系统。

面向对象认为世界是有很多对象组成的,各个对象之间相互独立,平时并没有什么关系。在某些外力的作用之下对象之间相互协作,表现出一定的行为,最终塑造了这个复杂的世界。面向过程和面向对象都是人们认识和了解这个世界的手段和方法,并无优劣之分,只有是否适用之差别。

面向对象和面向过程的最根本区别就是提供了一种新的认识和了解复杂系统的方法。面向对象有一个术语:抽象层次。比如对一辆汽车来说,从整体上来看,它是由底盘、悬挂、发动机、变速箱、外壳等部件组成的。而从发动机这个抽象层次来看,它是由活塞、曲轴、连杆、火花塞、油底壳、缸壁等组成。不同的抽象层次上会有不同的认识。通过不断变换抽象层次,我们能对系统有个更好的认识。在每个层次上我们只需要关心当前层次上的对象和它们之间的交互。其他层次上的东西,与本层次无关。这样带来的好处是:无论出于哪个层次上,我们都面临有限的对象和复杂度,从而可以更专心的了解这个层次上的对象是如何工作的。通过不断分离关注点,达到降低复杂度的目的。

抽象层次的另一个好处就是更换低层次的零件不会对高层次进行影响。比如,更换全新的发动机之后不会导致汽车无法行驶,更换火花塞之后不会导致发动机无法运转。低层次的信息对高层次隐藏,高层次不知道也不想知道低层次的零件如何工作。

回到大师的话,面向过程需要分析出整个系统的所有细节,当系统规模足够复杂,复杂到了超越其处理能力,使用结构化程序设计常常有无处下手的无力感。采用面向对象方法,引入了有个抽象层次的概念,我们就能通过不断提升抽象级别来构建更大更复杂的系统。

抽象层次越高,具体信息越少,细节也就越少,也就越容易理解。而抽象层次越低,具体信息越多,细节也越多。细节越多越容易陷入枝枝叶叶的泥潭而无法自拔。一旦超越人脑的处理极限,就很难去理解了。人们认识事物总是习惯从表面到本质,由表及里的一步步去分析。刚认识一件事物时我们可以从外观、整体较高的抽象层次去认识,然后逐步深入。比如对一个不了解汽车的人讲汽车,我们可以从整体介绍汽车包括底盘、发送机、变速箱、悬挂等。这时我们的抽象层次是很高的。当介绍清楚之后,我们可以深入到下一个层次,比如讲发动机结构。在发动机结构讲清楚以后,我们在从力学、热学的角度讲述发动机的工作原理。这样逐步深入,结构清晰,听的人也容易理解。逐步的深入中我们的抽象层次是逐渐降低的。反过来如果上来就讲发动机工作原理,听的人必定一头雾水。上面这个由表面到机理的过程其实就是自顶向下方法。另一种方法是自底向上。先从内部、底层讲起,逐步提高抽象层次。

这两种方法都是分析、研究问题的方法。在软件开发过程中,主体上应该采用自顶向下的方法,用少量的概念抽象、概括系统,再逐步降低抽象层次,直到代码编写。同时辅以自底向上的方法,通过总结在较低抽象层次的实践经验,来改进较高层次的概念以提升软件质量。

抽象层次高了,具体信息越少,分析问题简单了,但是随之而来也会带来另一个问题:抽象层次太高。抽象层次太高具体信息太少,又会导致信息量不足。所以在面向对象的分析过程中,在适当的时候选择适当的抽象层次是十分重要的。

层次确定好了,接下来就是在该层次上进行面向对象的分析工作了。无论任何时候在同一个抽象层次上,都应当将对象看成一个不可分割的整体。无论对象的规模多么大,大到一个国家、一座工厂,只要我们认为它是对象,它与其他对象交互时就是一个整体,不能分割。这就是说的对象的原子性,一旦破坏了原子性,就表示在同一抽象层次上 的对象不具备同一粒度,就将使得分析工作陷入混乱 。

在分析工作中,应该牢记对象有一个边界,不应该打破边界去窥探对象内部。形象一点来说,对象看上去就像是一个鸡蛋,蛋壳就是鸡蛋的边界。在分析对象的过程中。对鸡蛋的所有关系都是通过蛋壳发生。如果我们试图了解对象内部的细节,就像打破蛋壳去窥探鸡蛋内部,内部一团黏黏糊糊,无从下手。

在分析过程中得到的所有对于对象的认识都是依赖于对象的边界,在实现这个对象之前不要去理会其内部细节。这被称为面向接口编程。

http://blog.csdn.net/lan_liang/article/details/6619430

时间: 2024-10-13 00:52:06

面向过程与面向对象的本质区别-对面向过程与面向对象的一点感悟的相关文章

面向过程和面向对象的本质理解

http://kiritor.blog.51cto.com/7400479/1226762/ 面向过程和面向对象的本质理解 面向过程就是分析出解决问题所需的步骤,面向对象则是把构成问题的事物分解成对象,抽象 出对象的目的并不在于完成某个步骤,而是描述其再整个解决问题的步骤中的行为. 面向过程的思维方式是分析综合,面向对象的思维方式是构造. 例如c语言解决问题时,一般是先定义数据结构,然后在构造算法.而是用Java面向对象求解时 则是先抽象出对象,构造一个"封闭"的环境,这个环境中有定义

面向对象的编程和面向过程的编程有什么区别

C语言是面向过程的编程,它的最重要特点是函数,通过主函数来调用一个个子函数.程序运行的顺序都是程序员决定好了的.它是我学的第一种程序语言. C++是面向对象的编程,类是它的主要特点,程序执行过程中,先由主函数进入,定义一些类,根据需要,执行类的成员函数,过程的概念被淡化了(实际上过程还是有的,就是主函数的那些语句),类就是对象,所以我们称之为面向对象程序设计. 不同点:1.编程模型 所有计算机均由两种元素组成:代码和数据.精确的说,有些程序是围绕着"什么正在发生"而编写,有些则是围绕&

面向过程与面向对象编程的区别和优缺点

面向过程与面向对象编程的区别 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了: 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为. 可以拿生活中的实例来理解面向过程与面向对象,例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1.开始游戏,2.黑子先走,3.绘制画面,4.判断输赢,5.轮到白子,6.绘制画面,7.判断输赢,8.返回步骤2,9.输出最后结果.

面向对象方法论与结构化方法论的本质区别【转】

http://blog.csdn.net/wojiushiwo987/article/details/7251740面向对象方法论与结构化方法论的本质区别[转] 一.系统的构造内容不同. 面向对象的方法是以对象为核心来构造软件框架的. 结构化方法是按功能分解的规律组织软件系统结构的. 二. 应对需求变更能力的不同. 面向对象的方法与生俱来很强的应对需求变更能力.能从容应对客户的需求变更. 对结构化方法来说,它的先天缺陷是需求变更很难,一旦要需求变更,意味着以前一切的工作都是徒劳的. 三.管理维护

面向过程编程和面向对象编程的区别

面向过程编程 面向过程编程是一种以过程为中心的编程思想,分析出解决问题的步骤,然后用函数把这些步骤一步一步实现.面向过程编程,数据和对数据的操作是分离的. 面向对象编程 面向对象编程是将事物对象化,通过对象通信来解决问题.面向对象编程,数据和对数据的操作是绑定在一起的. 面向对象的三大基本特征: 封装:把客观事物封装成抽象的类,隐藏属性和方法的实现细节,仅对外公开接口. 继承:子类可以使用父类的所有功能,并且对这些功能进行扩展.继承的过程,就是从一般到特殊的过程. 多态:接口的多种不同的实现方式

Debug和Release之本质区别

Debug 和 Release 编译方式的本质区别    Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用.    Debug 和 Release 的真正秘密,在于一组编译选项.下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 Release 版错误,在此不讨论)Debug 版本  参数 

VS中的Debug 和 Release 编译方式的本质区别

VS中的Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用. Debug 和 Release 的真正秘密,在于一组编译选项.下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 Release 版错误,在此不讨论) 以下参数均是在project

HTTP POST GET 本质区别详解

一 原理区别 一般在浏览器中输入网址访问资源都是通过GET方式:在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交 Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE URL全称是资源描述符,我们可以这样认 为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查 ,改 ,增 ,删 4个操作.到这里,大家应该有个大概的了解了,GET一般用于获

HTTPHTTP POST GET 本质区别详解

转载自:http://blog.csdn.net/gideal_wang/article/details/4316691 一 原理区别 一般在浏览器中输入网址访问资源都是通过GET方式:在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交 Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE URL全称是资源描述符,我们可以这样认 为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,