1、引言
机算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只 是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的事情,一个高中生经过特定的训练就可以做得到。但是,会编程和编好程绝对是 两码事,同样的程序员,有的人几年之后成为了架构师,有的人却还在不停地coding,只不过ctrl-c、ctrl-v用得更加纯熟了。在中国,编程人 员最终的归途无外乎两条:一是转向技术管理,它的终点是CTO;二是继续深入,它的终点是首席架构师,成为CEO的人毕竟是少数。如果你现在还是个普通的 程序员,希望继续在技术这条路上前进的话,我想你还是应该先补充一点软件工程的思想,学习一点有关设计模式的知识,只有具备这些能力,你才能从整体和宏观 层面来考虑问题、分析问题和解决问题。本人Coding了很多年,中间走了不少弯路,虽然最终没什么大成就,但总算有一些心得,很愿意把自己的一些经验拿 出来跟大家分享,这或许对你的发展有所帮助。
由程序员转为架构师,最绕不开的概念就算是面向对象(OO)了。记得在大学的时候,我们专业开了一门课叫《面向对象的编程》。那个时候,我们刚刚学 了一门C语言,开发环境用的还是DOS下的Turbo C,半点项目开发的经验都没有,纯粹的空对空。所以,一学期下来,我始终处于一种懵懂状态,既没领会面向过程和面向对象到底有什么区别,也没搞懂面向对象 能带来什么好处。
2、面向过程(OP)和面向对象(OO)
2.1 蛋炒饭和盖浇饭
有人这么形容OP和OO的不同:用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。所谓盖浇饭,北京叫盖饭,东北叫烩 饭,广东叫碟头饭,就是在一碗白米饭上面浇上一份盖菜,你喜欢什么菜,你就浇上什么菜。我觉得这个比喻还是比较贴切的。
蛋炒饭制作的细节,我不太清楚,因为我没当过厨师,也不会做饭,但最后的一道工序肯定是把米饭和鸡蛋混在一起炒匀。盖浇饭呢,则是把米饭和盖菜分别做好,你如果要一份红烧肉盖饭呢,就给你浇一份红烧肉;如果要一份青椒土豆盖浇饭,就给浇一份青椒土豆丝。
蛋炒饭的好处就是入味均匀,吃起来香。如果恰巧你不爱吃鸡蛋,只爱吃青菜的话,那么唯一的办法就是全部倒掉,重新做一份青菜炒饭了。盖浇饭就没这么多麻烦,你只需要把上面的盖菜拨掉,更换一份盖菜就可以了。盖浇饭的缺点是入味不均,可能没有蛋炒饭那么香。
到底是蛋炒饭好还是盖浇饭好呢?其实这类问题都很难回答,非要比个上下高低的话,就必须设定一个场景,否则只能说是各有所长。如果大家都不是美食家,没那么多讲究,那么从饭馆角度来讲的话,做盖浇饭显然比蛋炒饭更有优势,他可以组合出来任意多的组合,而且不会浪费。
2.2 软件工程
盖浇饭的好处就是“菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是“可维护性”比较好,“饭” 和“菜”的耦合度比较低。蛋炒饭将“蛋”“饭”搅和在一起,想换“蛋”“饭”中任何一种都很困难,耦合度很高,以至于“可维护性”比较差。软件工程追求的 目标之一就是可维护性,可维护性主要表现在3个方面:可理解性、可测试性和可修改性。面向对象的主要好处就是显著的改善了软件的可维护性。
面向过程(OP)和面向对象(OO)是不是就是指编码的两种方式呢?不是!你拿到了一个用户需求,比如有人要找你编个软件,你是不是需要经过需求分析,然 后进行总体/详细设计,最后编码,才能最终写出软件,交付给用户。这个过程是符合人类基本行为方式的:先想做什么,再想如何去做,最后才是做事情。有的同 学说:“我没按照你说的步骤做啊,我是直接编码的”。其实,你一定会经历了这三个阶段,只不过你潜意识里没有分得那么清楚。对于拿到需求就编码的人,可能 编着编着,又得倒回去重新琢磨,还是免不了这些过程,
以OO为例,对应于软件开发的过程,OO衍生出3个概念:OOA、OOD和OOP。采用面向对象进行分析的方式称为OOA,采用面向对象进行设计的方式称 为OOD,采用面向对象进行编码的方式称为OOP。面向过程(OP)和面向对象(OO)本质的区别在于分析方式的不同,最终导致了编码方式的不同。
分享到:
相关推荐
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步...对象,初学者或者很蹩脚的程序员很可能以面向对象之虚而行面向过程之实,这样设计出来的所 谓面向对象的程序很难有良好的可移植性和可扩展性。
浅析面向过程和面向对象的语言差异——以C语言和vb程序设计语言为例.pdf
面向过程、面向对象、面向组件、面向服务软件架构的分析与比较
面向过程与面向对象区别面向过程与面向对象区别
资源共享!希望能给大家带来帮助!
这是对面向过程和面向对象的解释,个人参考一些文章后做的小总结。
首先C面向过程的编程,C++和JAVA都是面向对象的编程。 二者用最简单的例子来说 比如说:我吃饭 面向过程:着重在吃的过程,要具体描述吃的没一个步骤,比如夹米饭,张嘴,我进行咀嚼等之类的过程 面向对象:是先将...
学习PHP不可不知道的知识,从PHP来看面向对象和面向过程的优缺点……
面向过程与面向对象面向过程面向对象面向过程和面向对象的区别类对象面向对象的两个要素2.类属性成员变量局部变量属性赋值的先后顺序成员变量和局部变量的异同点方法方法声明权限修饰符:public protected 缺省 ...
面向对象的软件开发过程.
在这期间,程序设计语言主要经历了从面向过程(如C和Pascal语言)到面向对象(如C++和Java语言),再到面向组件编程(如.NET平台下的C#语言),以及正在快速发展的面向服务架构技术(如SOA和WebService)。
内容概要: 本文档详细介绍了Java编程中的面向对象编程(OOP)和面向过程编程(Procedural Programming)两种主要编程范式。通过示例代码和详细解释,帮助读者理解这两种编程方式的概念、特点和用法,并对比它们之间...
面向对象的思想用对象和对象之间的关系表现系统。模块封装和局 部化的特点使面向对象的方法更有利于改善软件质量、理解和维护软件系统。面 向对象的方法和一些过程方法结合,组成完整的开发方法。
通过简单java零钱通项目 理解面向过程和面向对象的区别
Functional Programming vs. Imperative Programming
面向对象与面向过程的程序设计方法比较.pdf主要介绍了面向对象与面向过程在程序设计方面的比较,指出了面向对象程序设计方法的优势。
面向过程的详细设计文档,大家可以参考。做大型项目时,面向过程和面向对象详细设计文档是我们经常用到的。
用面向对象和面向过程方法解求100内素数并输出素数之和