英文及缩写:
面向过程:procedure oriented programming POP
面向对象:object oriented programming OOP
面向服务:Service-Oriented Architecture SOA
面向对象和面向过程的历程:
面向过程编程采取的是时间换空间的策略,因为在早期计算机配置低,内存小,如何节省内存则成了首要任务,哪怕是运行的时间更长。随着硬件技术的发展,硬件不再成为瓶颈,相反更好的模拟现实世界、系统的可维护性等问题凸显出来,于是面向对象设计应运而生。当下:应用在PC机上的一般应用系统,由于不太需要考虑硬件的限制,而系统的可维护性等方面却要求很高,一般采用面向对象方式;而在内存限制有所要求的嵌入式系统,则大多采用面向过程方式进行设计编程。
定义:
面向过程(POP)是分析解决问题的步骤,然后用函数把这些步骤一步一步的实现,然后在使用的时候一一调用则可。
面向对象(OOP)是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为。下面举一例说明面向过程和面向对象编程。
面向服务(SOA)是一种进行系统开发的新的体系架构。在基于SOA架构的系统中,具体应用程序的功能是由一些松耦合并且具有统一接口定义方式的组件(也就是Service)组合构建起来的,它对迅速变化的业务环境具有良好适应力。
使用面向服务的编程思想,设计者只需要通过集成各种服务即可完成系统的构建。通常情况下,面向服务的架构思想主要用于分布式系统的构建,设计者通过特定的数据格式集成一些服务完成系统构建,相比面向过程和面向对象而言,面向服务的思想是粒度最大的。面向对象,面向过程和面向服务都是当下仍广泛具有指导意义的编程思想,它们相辅相成,共同帮助我们完成软件设计任务。
举例:
首先使用面向过程:
1、开始游戏,
2、黑子先走,
3、绘制画面,
4、判断输赢,
5、轮到白子,
6、绘制画面,
7、判断输赢,
8、返回步骤2,
9、输出最后结果。
把上面每个步骤用分别的函数来实现,问题就解决了。
面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为:
1、黑白双方,这两方的行为是一模一样的,
2、棋盘系统,负责绘制画面,
3、规则系统,负责判定诸如犯规、输赢等。
第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
面向对象保证了功能的统一型,从而为扩展打下基础。现在要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的循序都要进行大规模调整。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。由此可以看出面向对象更易于扩展。
一、面向过程
1.1、含义:
顾名思义面向过程就是一种以过程为中心的编程思想,亦可以叫做“面向记录”面对过程能做到的就是分析出解决问题所需要的步骤,然后使用函数把步骤一步一步实现,使用的时候一个一个依次解决就好了。
1.2、举例
比如我们去机房上课,我们开始开机上课是一个事件,下课关机走人又是一个事件,在编程序的时候我们关心的是某一个事件,而不是上课本身,对于面向过程这一种思想来编写上课程序只要分别对上课下课写程序就好,不用关心怎么上课等内容。
二、面向对象
2.1、含义
面向对象就是一种以一种事物为中心的编程思想,他让我们在分析和解决问题时把思维和重点转向现实中的客体中来,把构成事物分解成各个对象,建立对象是为了描述某个事物在整个解决问题的步骤中的行为,然后通过UML工具理清这些客体之间的联系,最后用面向对象的语言实现这种客体以及客体之间的联系。
2.2、举例
比如我们来机房上课,上课开机和下课关机是一类事物,上课下课可以有自己的属性,学生,老师等,有自己的方法,用中文讲课,用英文讲课等,怎么讲课是怎么上课的行为而不是上课的每个事件。
三、面向服务
3.1、含义
面向服务就是描述服务之间的松耦合,松耦合的系统来源于业务,而面向对象的模型是紧耦合,面向服务的体系结构不是一个新鲜事物,是更传统的面向对象模型的替代模型。
面向服务设计的三大原则是无状态、单一实例和明确的服务接口。明确的服务接口是强制和必须的,但无状态和单一实例则不属于强制性原则,虽然说服务提 供状态管理会增加服务的复杂性,多实例也一样会增加服务的复杂性(需要增加同步并发处理等,而且会导致访问不确定性),但很多情况下这又是无法避免的。
3.2、举例
播放一个CD,你可以将要播放的CD放入CD机中,CD机将为你播放这张CD,CD机提供了一个CD播放服务。这里的好处就是你可以用不同的CD机去播放同一张CD。他们能提供同样的CD播放服务,但是服务质量是不同的。
SOA的思想明显不同于面向对象的编程,面向对象编程强烈的建议你应该将数据与其操作绑定。因此在面向对象编程风格中,每张CD 有它自己的CD播放机,他们之间不能被拆开。这听起来很奇怪,但是这就是我们建立许多已存软件系统的方式。
四、补充
4.1、面向组件编程(Component-Oriented Programming COP)
组件不是一个新的概念,Java中的javaBean规范和EJB规范都是典型的组件。组件的特点在于他定义了一种通用的处理方式。例如,JavaBean 拥有内视的特性,这样就可以通过工具来实现JavaBean的可视化。而EJB规范定义了企业服务中的一些特性,使得EJB容器能够为符合EJB规范的代码增添企业计算所需要的能力,例如事务、持久化、池等。
所以,组件比起对象来的进步就在于通用的规范的引入。通用规范往往能够为组件添加新的能力(就像上面所讨论的),但也给组件添加了限制,例如你需要实现EJB的一些接口
COP比OOP更进一步。通常OOP将数据对象组织到实体中。这种方法具有很多优点。但是,OOP有一个大的限制:对象之间的相互依赖关系。去掉这个限制的一个好的想法就是组件。组件和一般对象之间的关键区别是组件是可以替代的。
4.2、面向切面编程(Aspect-Oriented Programming AOP)
将通用需求功能从不相关类之中分离出来;同时,能够使得很多类共享一个行为,一旦行为发生变化,不必修改很多类,只要修改这个行为就可以。
AOP就是这种实现分散关注的编程方法,它将“关注”封装在“方面”中。
五、总结:
5.1、面向对象是将事物高度抽象化。
5.2、面向过程是一种自顶向下的编程
5.3、面向对象必须先建立抽象模型,之后直接使用模型就行了。
5.4、面向过程(OP)和面向对象(OO)本质的区别在于分析方式的不同,最终导致了编码方式的不同。