论编程思想
从第一台计算机诞生到现在七十多年,计算机一直遵循着冯哥提出的以二进制为计算基础,以运算控制存储及输入输出五大组件构成的体系架构,硬件的发展从晶体管到中小规模集成电路再到大规模及超大规模集成电路,体积越来越小、能耗越来越低、功能越来越强、价格越来越便宜,便携化网络化和智能化将是未来的发展趋势。
个人对硬件的体验还停留在二十年前奔腾166跳线超频到200风冷不开盖不发烫不死机的美好回忆中(可惜主板不支持否则一定挑战一把233水冷)。和几十年不变的硬件体系相比软件工程思想却发生了巨大的变化,经历了面向过程(POP)到面向结构(SOP)到面向对象(OOP)到面向接口(IOP)到面向服务(SOA)再到面向切面(AOP)的演变,不过后者的出现并不是消灭和取代前者,江湖门派总爱争论哪种思想先进哪种语言优秀,其实每种编程思想和语言各有其适用的应用场景,各有其擅长的解决之道。
面向过程(POP):面向过程的编程思想是伴随着计算机诞生最早出现的,一句话总结就是先干啥后干啥然后干啥最后干啥,程序看起来就是一个数据加算法的集合,数据以变量的形式在算法之间被调度流转和加工,这种模式与人类的日常活动非常相似,所以很容易理解。
面向结构(SOP):面向结构的编程思想本质还是面向过程,只是更加注重逻辑的独立性,追求自上而下的模块化设计,部分地解决了标准化和规范化的问题。一个项目包含若干程序,程序包含若干文件,文件包含若干函数,函数包含若干语句,语句转换成若干条机器指令按顺序执行。当对数据复杂性和安全性有较高要求的时候,面向结构的编程思想就显得力不从心了。
面向对象(OOP):面向对象的编程思想是将面向过程编程思想中以开发者为主导地位变成以世界万物为主导地位,将事物的内部属性与外部环境隔离开,强调了事物之间的联系并赋予他们从属关系,界定对象的职责与能力范围。总结起来就是,你有我也有,你没有我还有 – 继承;花多少钱办多大事儿 – 重载;你行我比你还行 – 覆盖;谁能谁干 – 多态。面向对象编程思想如同侏罗纪时代的恐龙出现以后就迅速统治了地球,在下一次小行星撞上地球之前都不会消失。
面向接口(IOP):面向接口的编程思想和面向结构思想类似都是主流编程思想的一个分支体系,它的本质是只要开发者严格遵循接口的定义(规范与约束)就一定可以得到想要的一致性结果,它弱化了对象的属性和方法的概念,将对象理解成一个抽象体,根据需要调用或扩展接口功能来满足实际业务。
面向服务(SOA):面向服务的编程思想是在面向接口的编程思想上更进一步,两者粒度不同,前者是将一个整体功能封装起来,后者封装的则是一个对象。这种思想更多的还是体现在架构层面而非编码层面,多被当做中间件应用于系统间而非系统内调用。
面向切面编程(AOP),第一次听到切面这个名词感觉好奇怪,听说过挂面拉面刀削面,做法有炒的焖的打卤的炸酱的,难道软件行业都发展到必须边吃面边写代码的新高度了吗?后来一调查发现意思满拧,切面是剖面、创面和断面的意思,和吃没有半毛钱关系,记得小时候经常被老师夸奖:这孩子记吃不记打,一直引以为傲到现在。
其实切面这个词表达的还是挺生动形象的,操作手法与植物嫁接类似,在枝干上人工打开一个深度创面,让受体和配体之间紧密贴合,利用细胞增生的原理使二者创口慢慢愈合,达到投之以桃报之以李的目的。
面向切面的编程思想追求的最高境界是以最小的侵入代价换取最大的自主功能实现,为了达到这个目标,引入了几个全新的概念:反射、拦截、责任链、动态代理和控制反转,讲清楚每个概念都够写本书了,理解是一回事用好是另一回事,这里面坑多了,填一个少一个,早日填平好迎接新技术的到来。打算过几天结合一个基础框架分享一下面向切面的编程思想,也算给自己一点点激励。
曾经有许多种编程思想摆在我的面前,但是我都不太明白,等到面试的时候才后悔莫及,尘世间最痛苦的事情莫过于此。如果可以给我一个机会再来一次的话,我会说我要努力学习,如果有人问我未来的编程思想是什么,我希望是面向钞票!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
springmvc与mybatis的整合
整合的思路 springmvc+mybatis的系统架构: image.png 第一步:整合持久层(dao) mybatis和spring整和,使用mapper的扫描器自动扫描mapper接口在spring中进行注册 第二步:整合service 通过spring管理service接口 使用配置方式蒋service接口配置在spring配置文件中。 实现事务控制 第三步:整合springmvc 由于springmvc是spring的模块,不需要整合 参数绑定(自定义) <!--conversionService--> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <!--转换器--> <property name="converters"> <list> <!--自定义的类的实现的全路径--> <bean class="cn.persi...
- 下一篇
只有烂程序员才相信世界是由技术驱动的
转自知乎专栏(黑白互联网)作者:佯良 大概2个月前陆奇的一篇文章刷屏:“一个优秀的程序员,要相信世界是由技术驱动的”,我觉得这句话是狗屁,不过是资本家用来哄骗程序员的。我认可陆奇的五点要求,但这些只是程序员的本职工作。 别忘了,去掉程序员的职业身份,他们还是一个个活生生的“人”。 只有烂程序员才相信世界是由技术驱动的,优秀的程序员会意识到世界是由资本和权力驱动的。 人,是一种社会性动物。技术也好,商业也罢,都只是用来解决社会问题的工具。以前我认为技术是面向机器的,现在明白了,其实真正优秀的、可靠的技术,都是面向人类的。你在优化设计模式的时候,不是在优化机器,而是为了让“人”维护起来更方便;你在优化算法的时候,不是在节约内存,而是为了让“人”拥有更好的用户体验(即速度);你在做一个GUI的时候,不是在与机器对抗,而是为了让数据管理更加方便。一切因为人,一切为了人。大家都知道早期的计算机是用来计算弹道的,但这并不是为了炸弹,而是为了炸人。 我的意思是说,程序员在做好本职工作的时候,必须清晰的认识到,你所做的一切,你所设计的一切,最终是为了服务于什么。 这是你保持竞争力的前提。否则,你就等着...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- 设置Eclipse缩进为4个空格,增强代码规范
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音