一、引言
机算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并很少,只是随着应用领域和方向的不一样,产生了不少的分支,因此说编程并非一件很困难的事情,一个高中生通过特定的训练就能够作获得。可是,会编程和编好程绝对是两码事,一样的程序员,有的人几年以后成为了架构师,有的人却还在不停地coding,只不过ctrl-c、ctrl-v用得更加纯熟了。在中国,编程人员最终的归途无外乎两条:一是转向技术管理,它的终点是CTO;二是继续深刻,它的终点是首席架构师,成为CEO的人毕竟是少数。若是你如今仍是个普通的程序员,但愿继续在技术这条路上前进的话,我想你仍是应该先补充一点软件工程的思想,学习一点有关设计模式的知识,只有具有这些能力,你才能从总体和宏观层面来考虑问题、分析问题和解决问题。本人Coding了不少年,中间走了很多弯路,虽然最终没什么大成就,但总算有一些心得,很愿意把本身的一些经验拿出来跟你们分享,这或许对你的发展有所帮助。
由程序员转为架构师,最绕不开的概念就算是面向对象(OO)了。记得在大学的时候,咱们专业开了一门课叫《面向对象的编程》。那个时候,咱们刚刚学了一门C语言,开发环境用的仍是DOS下的Turbo C,半点项目开发的经验都没有,纯粹的空对空。因此,一学期下来,我始终处于一种懵懂状态,既没领会面向过程和面向对象到底有什么区别,也没搞懂面向对象能带来什么好处。
二、面向过程(OP)和面向对象(OO)
2.1 蛋炒饭和盖浇饭
有人这么形容OP和OO的不一样:用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。所谓盖浇饭,北京叫盖饭,东北叫烩饭,广东叫碟头饭,就是在一碗白米饭上面浇上一份盖菜,你喜欢什么菜,你就浇上什么菜。我以为这个比喻仍是比较贴切的。
蛋炒饭制做的细节,我不太清楚,由于我没当过厨师,也不会作饭,但最后的一道工序确定是把米饭和鸡蛋混在一块儿炒匀。盖浇饭呢,则是把米饭和盖菜分别作好,你若是要一份红烧肉盖饭呢,就给你浇一份红烧肉;若是要一份青椒土豆盖浇饭,就给浇一份青椒土豆丝。
蛋炒饭的好处就是入味均匀,吃起来香。若是恰巧你不爱吃鸡蛋,只爱吃青菜的话,那么惟一的办法就是所有倒掉,从新作一份青菜炒饭了。盖浇饭就没这么多麻烦,你只须要把上面的盖菜拨掉,更换一份盖菜就能够了。盖浇饭的缺点是入味不均,可能没有蛋炒饭那么香。
究竟是蛋炒饭好仍是盖浇饭好呢?其实这类问题都很难回答,非要比个上下高低的话,就必须设定一个场景,不然只能说是各有所长。若是你们都不是美食家,没那么多讲究,那么从饭馆角度来说的话,作盖浇饭显然比蛋炒饭更有优点,他能够组合出来任意多的组合,并且不会浪费。
2.2 软件工程
盖浇饭的好处就是“菜”“饭”分离,从而提升了制做盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是“可维护性”比较好,“饭”和“菜”的耦合度比较低。蛋炒饭将“蛋”“饭”搅和在一块儿,想换“蛋”“饭”中任何一种都很困难,耦合度很高,以致于“可维护性”比较差。软件工程追求的目标之一就是可维护性,可维护性主要表如今3个方面:可理解性、可测试性和可修改性。面向对象的主要好处就是显著的改善了软件的可维护性。
面向过程(OP)和面向对象(OO)是否是就是指编码的两种方式呢?不是!你拿到了一个用户需求,好比有人要找你编个软件,你是否是须要通过需求分析,而后进行整体/详细设计,最后编码,才能最终写出软件,交付给用户。这个过程是符合人类基本行为方式的:先想作什么,再想如何去作,最后才是作事情。有的同窗说:“我没按照你说的步骤作啊,我是直接编码的”。其实,你必定会经历了这三个阶段,只不过你潜意识里没有分得那么清楚。对于拿到需求就编码的人,可能编着编着,又得倒回去从新琢磨,仍是免不了这些过程,
以OO为例,对应于软件开发的过程,OO衍生出3个概念:OOA、OOD和OOP。采用面向对象进行分析的方式称为OOA,采用面向对象进行设计的方式称为OOD,采用面向对象进行编码的方式称为OOP。面向过程(OP)和面向对象(OO)本质的区别在于分析方式的不一样,最终致使了编码方式的不一样。
2.3 面向过程(OP)和面向对象(OO)(未完待续)