英文及缩写

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

POP-OOP-SOP-COP-SOA-AOP的更多相关文章

  1. OOP的完美点缀—AOP之SpringAOP实现原理

    OOP的完美点缀-AOP之SpringAOP实现原理 前言 OOP与AOP OOP(Object Oriented Programming,面向对象编程),通过封装.继承将程序抽象为各个层次的对象,进 ...

  2. 编程思想的理解(POP,OOP,SOA,AOP)

    http://blog.csdn.net/hawksoft/article/details/7021435 1)POP--面向过程编程(Process-oriented programming ):面 ...

  3. 编程思想的理解(POP,OOP,SOA,AOP) x

    http://blog.chinaunix.net/uid-29417436-id-4060980.html 1)POP--面向过程编程(Process-oriented programming ): ...

  4. 编程思想(POP,OOP,SOA,AOP)

    1)POP--面向过程编程(Process-oriented programming ): 面向过程编程是以功能为中心来进行思考和组织的一种编程方法,它强调的是系统的数据被加工和处理的过程,在程序设计 ...

  5. 自己实现简单的AOP(一)简介

    AOP 和 OOP,在我看来是两种相辅相成的技术,作为OOP的补充,AOP 有着自己特殊的应用场景. 假设,我们需要在Service层实现以下几项基本功能: /// <para>1.自动管 ...

  6. SpringIOC&AOP

    Spring是为简化企业级系统开发而诞生的,Spring框架为J2EE应用常见的问题提供了简单.有效的解决方案,使用Spring,你可以用简单的POJO(Plain Old Java Object)来 ...

  7. 面试准备--Spring(AOP)

    AOP:面向切面编程,在执行某个指令时,需要添加某个预编译的指令. 下面这个例子是来自网上的: 1.OOP回顾 在介绍AOP之前先来回顾一下大家都比较熟悉的OOP(Object Oriented Pr ...

  8. Spring AOP应用实例demo

    AOP(Aspect-Oriented Programming.面向方面编程).能够说是OOP(Object-OrientedPrograming.面向对象编程)的补充和完好.OOP引入封装.继承和多 ...

  9. [置顶] 深入浅出Spring(三) AOP详解

    上次的博文深入浅出Spring(二) IoC详解中,我为大家简单介绍了一下Spring框架核心内容中的IoC,接下来我们继续讲解另一个核心AOP(Aspect Oriented Programming ...

  10. 漫谈AOP开发之初探AOP及AspectJ的用法

    一.为什么需要AOP技术 AOP 是一个很成熟的技术. 假如项目中有方法A.方法B.方法C……等多个方法, 如果项目需要为方法A.方法B.方法C……这批方法增加具有通用性质的横切处理.   下图可以形 ...

随机推荐

  1. 如何控制TextBox的最打输入字符的长度

    TextBox控件本身有个maxlength属性,它可以限制TextBox中输入字符的最大长度,所以在只有字符输入的情况下,该属性可以很好的帮助我们达到限制输入长度的目的. 但如果输入包含中文或中英文 ...

  2. 解决乱码的方法是,在执行SQL语句之前,将MySQL以下三个系统参数设置为与服务器字符集character-set-server相同的字符集

    character-set-server/default-character-set:服务器字符集,默认情况下所采用的. character-set-database:数据库字符集. characte ...

  3. leetcode Sort List 对链表进行排序

    描述: Sort a linked list in O(n log n) time using constant space complexity. 在O(n*log(n))的时间复杂度,常数级空间复 ...

  4. 栈(stack)和堆(heap)

    栈(stack)和堆(heap), Java程序在运行时都要开辟空间,任何软件在运行时都要在内存中开辟空间,Java虚拟机运行时也是要开辟空间的.JVM运行时在内存中开辟一片内存区域,启动时在自己的内 ...

  5. JustOj 1486: Hello, world!

    题目描述 This is the first problem for test. Since all we know the ASCII code, your job is simple: Input ...

  6. yield的理解

    yield的理解:yield命令是异步两个阶段的分界线需要先对迭代器和生成器进行理解: 迭代器:是一种支持next()操作的对象.它包含一组元素,当执行next()时,返回其中一个元素:当所有元素都被 ...

  7. 怎样从外网访问内网Web?

    本地部署了一个Web服务端,只能在局域网内访问,怎样从外网也能访问到本地的Web服务呢?本文将介绍具体的实现步骤. 准备工作 部署并启动Web服务程序 默认部署的Web服务端口是8080. 实现步骤 ...

  8. 4~20mA

    4~20mA电流输出芯片XTR111完整电路 0-5v转0-20ma和0-5v转4-20ma 压控恒流源电路 4-20mA电流环路发送器入门

  9. BeanCreationException: Error creating bean with name 'transactionManager' defined

    BeanCreationException: Error creating bean with name 'transactionManager' defined in \WEB-INF\classe ...

  10. zabbix 监控Nginx和PHP

    原理 Nginx和PHP(5.3及以上版本)都自带了一个状态页,默认没有开启,通过开启这个状态页即可获取实时的工作状态. Nginx状态获取 Nginx的配置默认是拒绝通过IP来访问,我们可以再默认虚 ...