【设计模式】面向对象式开发的发展史

由于我的IP号非常特殊,导致最近不能上网,连无线都不行。。所以,耽误了很多东西。今天居然可以用无线了,让我欣喜若狂,马上提笔,写下这篇文章。主要内容是面向对象式开发的演化史。。

远古的开发

最早期的机器语言编程,程序员还在纠结于计算机内存和外存的容量。

随着高性能的计算机越来越普及,编程也发展到一个较高的层次,出现了各种高级语言,软件编程也进入了百家争鸣的时代。。

刚开始的高级语言编程,大多是面条式代码,随着代码的复杂化,造成代码极度混乱,越来越不适应发展的需要。

面向过程式开发

而后来出现的面向过程式开发,是把需求理解成一条条业务流程,然后分析这些流程,将它们交织组合在一起,再划分成一个个功能模块,最终通过一个个函数,实现需求。

优点

总的来说,面向过程式开发,将代码分割成了多个模块,增强了复用性,方便了调试和修改。但结构也相对复杂。。

缺点

首先,面向过程关注业务流程,但不管分析做得如何到位,都永远无法从用户那里获得所有的需求,并且,需求是最可变的东西。业务流程的制定需要受到很多条件的限制,甚至程序的效率、运行方式都会反过来影响业务流程。有时候用户为了更好地实现商业目的,会主动改变业务流程,并且,一个流程的变化经常会带来一系列的变化。。所以,流程的易变性,使原本复杂的代码不易修改。

其次,面向过程通过划分功能模块,通过函数的相互调用来实现,但需求变化时,就需要更改函数。而你改动的函数,有多少地方在调用它,关联多少数据,这是很不容易弄清楚的地方。

或许开发者本人弄得清楚,但下一位维护代码者,是否也了解所有的函数间的彼此调用关系?函数的修改极有可能引起不必要的Bug出现。维护和调试中所耗费的大多数时间并不是花在修改Bug上,而是花在寻找Bug上,以及弄清如何避免在修改代码时导致不良副作用上了。就像这次师哥师姐开发的学生评教系统那样,寻找Bug才是最难的。。所以,种种迹象都表明,面向过程式开发不能适应软件的发展。。

总的来说,面向过程式开发使原本复杂的代码不易修改,并且,维护和调试所耗费的大多数时间都花费在寻找Bug上。所以,它不能很好地适应变化。

面向对象式开发

而面向对象的诞生,很好的解决了需求变化所带来的问题。

定义

面向对象关注的是对象,对象的优点在于,可以定义自己负责的事物,做要求它做的事情。对象是自己负责自己,并且,清楚的定义了自己的责任。

面向对象式开发,是把需求理解成一个个对象,让这些对象互相调用,符合了业务需要。当需求变化时,尽管无法预测会发生什么变化,但是通常可以预测到哪里发生了变化。它的特点之一,就是可以封装这些变化区域,从而更容易地将代码与变化产生的影响隔离开来。

VS面向过程

显然,对象比流程更加稳定,也更加封闭。业务流程从表面上看只有一个入口、一个出口,但是实际上,流程的每一步都可能改变某个数据的内容、改变某个设备的状态,对外界产生影响。而对象则是完全通过接口与外界联系,接口内部的事情与外界无关。

总的来说,面向过程式开发相对容易,但不容易应对变化;面向对象式开发困难,但却能更好的应对千变万化的世界。所以,现代的软件需要面向对象式开发,这是属于它的时代,但未来是谁的天下?!我们拭目以待。。

小结

通过学习设计模式这本书,让我了解到面向对象式开发是为了更好的解决需求变化所带来的问题,让我从根本上明白面向对象技术的巨大优点。。

时间: 2024-08-08 22:07:24

【设计模式】面向对象式开发的发展史的相关文章

“函数式”和“面向对象式”在权限引擎中是如何融为一体的?

Function和Operation的异同 Function是绑定在ResourceType(class)上的,一种资源类型上有一个Function列表.record(object)从ResourceType(class)继承这些Function列表.这种绑定在对象上的函数叫Method,而绑定在ResourceType上的函数叫Operation,它们的名字不同只是因为所处的层次不同,ResourceType + Operation + Field是面向软件的最终用户的,而Class + Me

游戏设计模式——面向数据编程(新)

目录 面向数据编程是什么? 单指令流多数据流(SIMD) 什么是SIMD 为什么需要SIMD 支持SIMD技术的指令集 使用SIMD编程 使用汇编内联 使用指令集库 使用ISPC语言 并行循环 避免Gather行为 CPU缓存(CPU cache) 什么是CPU缓存 为什么需要CPU缓存 CPU缓存预先存的是什么 CPU缓存命中/未命中 提高CPU缓存命中率 使用连续数组存储要批处理的对象 避免无效数据夹杂在连续内存区域 冷数据/热数据分割 频繁调用的函数尽可能不要做成虚函数 重新认识C++ S

转Web开发的发展史---Web开发技术的演变

转自:http://blog.csdn.net/zzzkk2009/article/details/9849431 在接下来的几个月时间里,我打算写一系列关于完整web开发的文章.这第一篇文章虽然有所粗略,但也能够充分概括了在之前15年或者更久的时间里web应用程序如何进行演变.并且最后我会囊括下这段时间内所写的相关技术. 在过去的美好日子里,我们使用的是简单的web页面(包括动态gif图片!).作为精美设计的典范,苹果有着这样的一个网站: 在那时,Web开发还比较简单,开发者经常会去操作web

Java 设计模式之模板方法开发中应用

模板方法差不多是Java设计模式中除单例之外的另一种非常简单也是我们在写程序时非常常用的一种方法了.以至于当你看到模板方法的设计模式时你会感觉到,这不是我在程序中经常用到的方法么. 定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类不可以改变一个算法的结构即可重定义该算法的某些特定步骤. 下面是我总结的模板方法中具体的代码实现通用框架 1:抽象的模板类: package template; public abstract class AbstractClass { protect

[转]Web开发的发展史

之所以转这篇文章是因为它可以对web请求有大致的理解. 以下内容转自:http://www.open-open.com/news/view/19ed96a 英文原文: Full stack web development ----------------------------分割线------------------------------------------- 在接下来的几个月时间里,我打算写一系列关于完整 web 开发的文章.这第一篇文章虽然有所粗略,但也能够充分概括了在之前 15 年

(转)向对象开发与面向组件开发的区别

通过对SOA.SCA.OSGi.JPF等面向组件理论和技术的理解,整理一篇面向对象开发与面向组件开发的区别. 1.面向对象中,对象之间的交互是细粒度的,通过单个消息进行交互: 面向组件中组件的交互是通过接口连接进行交互,接口内含有多个消息,接口不同则需要适配. 比如,信件一封一封的送,是对象之间的交互,信件一次性送完是组件交互. 2.组件的粒度比对象要大,在面向对象系统设计中,对象是构建系统的基本建筑材料:面向组件系统开发中,组件是系统的基本建筑块:组件有点类似子系统的概念,把一组相关的对象封装

MVC设计模式在游戏开发中的应用

一 定义 MVC即Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写. MVC是一种"前端"的设计模式. MVC的目的是:希望View和Model分离,当某一方改变时,而另一个方不必随之改变的. 例如,Java EE平台,iOS都是典型的基于MVC思想思想的,那么我们怎么在游戏设计中使用MVC模式呢. 二 MVC架构详解 1 模型Model 一直推荐一种思想:"所有的开发都是以数据位中心".在MV

游戏设计模式——面向数据编程思想

前言:随着软件需求的日益复杂发展,远古时期面的向过程编程思想才渐渐萌生了面向对象编程思想. 当人们发现面向对象在应对高层软件的种种好处时,越来越沉醉于面向对象,热衷于研究如何更加优雅地抽象出对象. 然而现代开发中渐渐发现面向对象编程层层抽象造成臃肿,导致运行效率降低,而这是性能要求高的游戏编程领域不想看到的. 于是现代游戏编程中,面向数据编程的思想越来越被接受(例如Unity2018更新的ECS框架就是一种面向数据思想的框架). 面向数据编程是什么? 先来一个简单的比较: 面向过程思想:考虑解决

面向服务开发中三层架构中事务单元的生命期管理

    经典的三层分层结构,控制层(Control),服务层(Service),持久层(Repository)应用广泛,在面向服务(SOA)的架构中,配合DI.IOC实现开放灵活的技术架构.     SOA中,Respository面向数据访问,提供访问数据库.文件.或其他业务接口提供持久能力.Service面向业务,提供访问业务功能的接口,使用领域模型描述业务需求,方便产品人员.需求人员和客户沟通理解业务流程.最后,Control面向业务流程整合,提供基于事务的需求实现.     事务,用需求