[关闭]
@Chiang 2020-01-15T19:07:00.000000Z 字数 1914 阅读 939

编程思想(POP,OOP,COP,AOP,SOP) 整理

理论 编程思想


面向过程(procedure oriented programming) POP

一种以过程为中心的编程思想,分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了

面向对象(object oriented programming) OOP

一种编程范式,将数据及对数据的操作行为放在一起,作为一个相互依存、不可分割的整体——对象

  • 面向对象技术的基础是封装--接口与实现分离,
  • 面向对象的核心是多态--这是接口和实现分离的更高级升华,使得在运行时可以动态根据条件来选择隐藏在接口后面的实现,
  • 面向对象的表现形式是类和继承。
  • 面向对象的主要目标是使系统对象化,良好的对象化的结果,就是系统的各部分更加清晰化,耦合度大大降低

面向对象与面向过程对比

面向过程

  • 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
  • 缺点:没有面向对象易维护、易复用、易扩展

面向对象

  • 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
  • 缺点:性能比面向过程低

面向组件(Component-Oriented Programming) COP

  • 一种软件工程实践,设计时要求组件之间高内聚、松耦合
  • 面向组件技术建立在对象技术之上,它是对象技术的进一步发展,类这个概念仍然是组件技术中一个基础的概念,但是组件技术更核心的概念是接口。组件技术的主要目标是复用--粗粒度的复用,这不是类的复用,而是组件的复用,如一个dll、一个中间件,甚至一个框架。一个组件可以有一个类或多个类及其它元素(枚举、)组成,但是组件有个很明显的特征,就是它是一个独立的物理单元,经常以非源码的形式(如二进制,IL)存在。一个完整的组件中一般有一个主类,而其它的类和元素都是为了支持该主类的功能实现而存在的。为了支持这种物理独立性和粗粒度的复用,组件需要更高级的概念支撑,其中最基本的就是属性和事件,在对象的技术中曾一度困扰我们的类之间的相互依赖问题/消息传递问题,迄今为止我所知道最好的解决方案就是事件。要理解组件思想,首先要理解事件的思想和机制。

面向方(切)面(Aspect-Oriented Programming) AOP

  • AOP是OOP的延续,针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。
  • 举个简单的例子,对于“雇员”这样一个业务实体进行封装,自然是OOP/OOD的任务,我们可以为其建立一个“Employee”类,并将“雇员”相关的属性和行为封装其中。而用AOP设计思想对“雇员”进行封装将无从谈起。同样,对于“权限检查”这一动作片断进行划分,则是AOP的目标领域。而通过OOD/OOP对一个动作进行封装,则有点不伦不类。 
  • 换而言之,OOD/OOP面向名词领域,AOP面向动词领域

面向服务(Service-Oriented Programming) SOP

  • SOP将软件设计成一组可互操作的服务的一套原则或方法论,是一种体系结构,目标是在软件代理交互中获得松散耦合。一个服务是一个服务提供者为一个服务消费者获得其想要的最终结果的一个工作单元
  • 实际上SOA只是一种架构设计模式,而SOAP、REST、RPC就是根据这种设计模式构建出来的规范,其中SOAP通俗理解就是http+xml的形式,REST就是http+json的形式,RPC是基于socket的形式。上文提到的CXF就是典型的SOAP/REST框架,dubbo就是典型的RPC框架,而SpringCloud就是遵守REST规范的生态系统。

参考资料:
编程思想(POP,OOP,COP,AOP,SOP) 整理
面向组件编程是什么?
面向对象与面向过程的本质的区别
AOP(面向切面编程 Aspect Oriented Programming)
如何通俗易懂地解释什么是SOA?

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注