架构师之路(1)---面向过程和面向对象

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)本质的区别在于分析方式的不同,最终导致了编码方式的不同。

2.3 面向过程(OP)和面向对象(OO)

转载于:https://www.cnblogs.com/springMVC/archive/2009/03/06/2204463.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Servlet与缓存

Servlet类请求缓存:response.setDateHeader("Expires",System.currentTimeMills()1000*60*60) ;刷新缓存:请求头 If-Modified-Since服务器 lastModified请求头 和 服务器 进行比较 决定是否缓存转载于:https://www.cnblogs.com/Knuth/archive/…

HTTP快速入门

一、tomcat端口号设置为80,访问时候可以不加;http协议1.1版本可以复用连接,请求结束后会稍微等会; 二、 表单,get方式提交: 三、user-agent告诉服务器是哪个浏览器,代码中解决兼容性问题&#x…

vs2008生成自定义dll,VS2008发布、生成网站时设置固定的dll文件名

在用VS2008发布网站项目时,默认生成bin目录下的.dll文件名是随机命名的; 如果要固定生成文件名如何固定呢? 有以下两种方案: 一、每个页面的程序集分别生成对应的dll; 方法:在“发布网站”的选项中,勾选“使用固定命名和单页程…

oracleI基础入门(8)--table--MINUS

MINUSMINUS 指令是运用在两个 SQL 语句上。它先找出第一个 SQL 语句所产生的结果,然后看这些结果有没有在第二个 SQL 语句的结果中。如果有的话,那这一笔资料就被去除,而不会在最后的结果中出现。如果第二个 SQL 语句所产生的结果并没有存在于…

分类(二):基于向量空间模型的文本分类

2019独角兽企业重金招聘Python工程师标准>>> 利用向量空间模型进行文本分类的思路主要基于邻近假设(contiguity hypothesis)。 邻近假设: 同一类的文档会构成一个邻近区域,而不同类的邻近区域之间是互不重叠的。 1、Ro…

Request请求对象

一、Request对象由服务器创建,我们使用 浏览器访问服务器资源原理: 二、Request体系结构 其中,servlet 的service()方法参数列表是 servletRequest对象, HttpServlet 的 doGet()和 doPost() 方法参数列表是用的 HttpServletReques…

WinDBG咒语

p - step t - trace pa - step to address ta - trace to address pc - step to next call tc - trace to next call tb - trace to next branch (只适用于内核调试) pt - step to next return tt - trace to next return ph - step to next branch th - trace to next branch …

C#复制文件到指定文件夹

C#复制文件到指定文件夹 2010-06-04 16:09如: 路径:“D:/a/b” 有如下文件 P1009.txt Z1009.txt T1009.txt 复制到 E:盘下,自动建立一个以日期为文件夹名的文件夹下。 可以使用Process,用它打开CMD,然后执行DOS命令!(可以设置不打开CMD窗口…

Walle 瓦力 web部署系统

Walle 一个web部署系统工具,可能也是个持续发布工具,配置简单、功能完善、界面流畅、开箱即用! 安装步骤: 1. git clone 首先配置成功(去百度找答案) 打开git bash命令窗口执行: git clone gitg…

mysqlbinlog恢复误删数据

概述 代码bug,在处理上传出现异常时执行了DELETE FROM t_resource WHERE resource_id ? OR parent_id ?因为OR条件导致用户的上传的所有数据被清空了。 show 查看是否有开启log-bin备份 show variables like log_bin 欣慰的是,已经开启了二…

Quartz.NET 架构与源代码分析系列 part 1 :Quartz.NET 入门

概述 作业调度的目标在于按照预先确定的时间和指定的顺序来确保高效的数据处理流程,从而最大限度的使用系统资源。批处理流程是一种在无需最终用户干预的方式下在后台通过顺序方式运行的操作。 Windows XP系统也自带了“任务计划”,它是一个简单任务调度…

博弈论——关于Nim游戏和SG函数的几个链接

今天做了一道博弈论的题目,正好去找找相关资料再复习一下。 网上能找到的都是同样的文章,不过我觉得足够了,Nim游戏百度百科里说的很详细,包括公式、证明之类的 http://baike.baidu.com/view/1101962.htm 而对于SG函数&#xff0c…

【讨论】新一轮互联网的泡沫即将破灭,大量低级别的码农将被淘汰

最近看到BAT减少招聘,互联网企业倒闭潮开始。今年的营收额应该也有很大程度的下降,然后我进行了深刻的思考,我觉得新一轮的互联网泡沫将会破灭,行业面临新的洗盘。 虽然现在互联网行业还是如火如荼的进行,很多人没有感…

Request登录案例

一、分析和设计 1、需求 2、页面 3、druid连接池 4、jar包 5、需求设计 二、代码实现 1、web_WEB-INFO_lib使用之前要先将jar包加入工作空间, 2、JDBC工具类 3、Dao层持久化层 其中,有异常除了输出控制台日志,还可以输出流写入到一个文件中记…

Combine two strings into one.

CONCATENATE str_tmp % into str_tmp. 转载于:https://www.cnblogs.com/gangjing/archive/2009/03/13/1410623.html

基于winpcap的NDIS在IE浏览器,360安全浏览器hackwww.360.cn

winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。winpcap 驱动各项功能1. 捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数…

斑马Zebra驱动下载

Zebra GT800 点击进入下载页-> 自动安装包【WINXP/WIN7/WIN8】点击进入下载页-> 添加打印机向导【WINXP/WIN7/WIN8】热门下载 Zebra GK888t Zebra 888-TT/888-DT Zebra 105SL Zebra ZM400 Zebra TLP 2844 Zebra GT800 Zebra GK888d Zebra LP 2844 Zebra Z4Mplus Zebra S4…

HTTP响应消息

一、数据格式 二、相应行状态码 其中,304常见于请求图片,一个图片就是一次请求,但是后面再请求若服务器图片没有修改,则304,访问本地缓存; 500一般见于服务器代码异常,如3/0; 三、响…

javafx如何调节按钮位置_安全带高度调节器的小知识

对于开车的小伙伴对安全带已经再熟悉不过了,但是有很多车,在安全带上有一个小秘密,那就是高度调节器。高度调节器的作用:为了调节安全带上固定点的高度,使安全带能够适应不同体格的乘员,都能达到最好的保护…