OOP vs AOP

OOP(模块化管理)

ObjectOriented Programming,面向对象编程。问题或者功能都被划分到一个一个的模块里边。每个模块专心干自己的事情,模块之间通过设计好的接口交互 如: AOP概念 - 图1

  • 举个例子说明OOP的局限性

Android中每个模块加上日志功能,要求模块运行时候能输出日志。通常情况都是先设计一个日志模块,由此提供api让其他功能模块去调用。但是从OOP的角度来讲模块之间就产生很严重的耦合,将来日志模块api发生变更,导致其他模块都必须要跟着改动,而这样做,显然工作量不小,也违背了OOP的Oriented原则。这个日志输出功能,从整体来看,都是一个上的。而这个的范围,就不局限在单个模块里了,而是横跨多个模块

AOP(跨模块管理)

Aspect Oriented Programming,面向切向编程

AOP目的就是解决OOP目前存在的问题
  1. 我们要认识到OOP世界中,有些功能是横跨并嵌入众多模块里的,比如打印日志,比如统计某个模块中某些函数的执行时间等。这些功能在各个模块里分散得很厉害,可能到处都能见到

  2. AOP的目标是把这些功能集中起来,放到一个统一的地方来控制和管理。如果说,OOP如果是把问题划分到单个模块的话,那么AOP就是把涉及到众多模块的某一类问题进行统一管理。比如我们可以设计两个Aspects,一个是管理某个软件中所有模块的日志输出的功能,另外一个是管理该软件中一些特殊函数调用的权限检查