POP、OOP和AOP的区别

POP:面向过程编程

面向过程编程就是一步一步来,在项目之前就已经固定好每一步。

优点:

  • 流程化编程任务明确,在开发之前就基本考虑了实现方式与最终结果;
  • 开发效率高,代码短小精悍,善于结合数据结构来开发高效率程序;
  • 流程明确,具体步骤清晰,便于节点分析;

缺点:

  • 需要深入思考,耗费精力;
  • 代码重用性低,不易扩展,维护起来难度大;
  • 对复杂业务,面向过程的模块化难度较高,耦合度比较高;

OOP:面向对象编程

针对业务处理过程的实体及其属性和行为进行抽象封装;

OOP有三个特征:封装、继承、多态;

封装性:封装是指将对象信息抽象成一个实体,其中属性方法不允许外部程序直接访问。简单来说,封装就是要找出某一类事务的公共属性,然后提取出来。

继承性:子类继承父类所有的成员方法和属性,可以拥有自己的属性,子类也可以重写父类方法。继承解决了代码的重用问题;

多态性:多态存在三个条件:1、继承;2:、重写;3、父类引用指向子类对象;多态的实现方式:1、接口实现;2、继承父类方法重写;3、同一个类中进行重载;

优点:

  • 结构清晰,注重对象和职责,不同对象承担不同职责;
  • 封装性,将事务高度抽象,便于流程中的行为分析、操作;
  • 容易扩展,代码重用率高,可继承,可覆盖;
  • 实现简单,可以有效减少程序的维护工作量。

缺点:

  • 面向对象在面向过程的基础上高度抽象,从而和代码底层的交互非常少,从而不适合底层开发和游戏开发,甚至多媒体开发;
  • 复杂性,对于事务开发而言,事务本身是面向过程的,过度封装导致事务本身复杂性提高。

AOP:面向切面编程

采取横向抽取机制,即将分散在各个方法中的重复代码提取出来,然后再程序中编译或运行阶段,再将这些抽取出来的代码应用到需要执行的地方。

优点:

  • 简单、易用;
  • 降低模块的耦合度;
  • 使系统容易扩展;
  • 设计决定的迟绑定:设计师可以推迟为将来的需求作决定;
  • 更好的代码复用性;

缺点:

  • 增加额外重复代码,且紧耦合;
  • 每个业务逻辑需要一个装饰器实现或代理;
  • 使用麻烦,需增加容器;

示例:

 // action 即为我们的侧关注点,即logger
    Function.prototype.after = function (action) {
      //保留当前函数,这里this指向运行函数即clickHandler
      var func = this;
      // return 被包装过的函数,这里就可以执行其他功能了。
      // 并且该方法挂在Function.prototype上,
      // 被返回的函数依然具有after属性,可以链式调用
      return function () {
        // 原函数执行,这里不考虑异步
        var result = func.apply(this, arguments);
        // 执行之后的操作
        action.apply(this, arguments);
        // 将执行结果返回
        return result;
      };
    };
    // before 实现类似,只不过执行顺序差别而已
    Function.prototype.before = function (action) {
      var func = this;
      return function () {
        action.apply(this, arguments);
        return func.apply(this, arguments);
      };
    };


    const doSomething = () => {
      console.log('doSomething')
    }
    let clickHandler = () => {
      // n行代码
      doSomething()
      //n 行代码
    }
    clickHandler = clickHandler.before(() => {
      console.log('doSomething之前')
    }).after(() => {
      console.log('doSomething之后')
    })
    clickHandler() // 执行结果和预期一致

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值