8月6日

UML

UML是一种可视化的面向对象的建模语言,可以用来描述系统的静态结构和动态行为。用得最多的是类图,时序图,用例图。

类图

类图中类是对象的集合,用来描述类的对象结构类及与类,系统之间的交互关系

  1. 泛化关系(表现为is a):实线加指向父类或接口的空心箭头,包括类与类的继承,接口与接口的继承,类对接口的实现.
  2. 实现抽象:虚线+指向抽象的类的空心箭头
  3. 聚合关系:不是强依赖关系,用实线+空心菱形箭头指向依赖对象,公司和员工的关系
  4. 组合关系:强依赖关系(共存),用实线+实心菱形箭头指向依赖对象,公司和部门的关系,同时创建,同生命周期
  5. 依赖关系:通过入参依赖,用虚线+实心箭头,体现为局部变量,方法参数或者静态调用方法
  6. 关联关系(has a):一个类知道另一个类的属性和方法,是另一个类的全局变量

时序图

用来显示对象之间的交互关系的图,涉及到角色,生命线,控制焦点和消息等元素
消息可以分为:同步消息,异步消息,返回消息,自关联消息

用例图

用来描述角色和系统之间的关系,角色与系统交互及系统反应,包括扩展关系和包含关系

AOP

AOP面向切面编程。程序设计原则中的单一职责原则,要求我们一个类只负责一个任务,那就意味着一个程序将会有很多类,负责不同能功能。好处是解耦了,但同时如果需要对类的方法进行埋点统一配置等,将会异常繁琐。而AOP就是为了解决这个问题.

横切关注点

贯穿多个模块的非主体业务功能,如日志功能

AOP的几种实现方式

  1. 动态代理
  2. APT是一种编译期注解处理技术。通过注解和处理来实现编译期生成代码,和源代码一起编译成class文件。将拓展的关注点代码放入注解处理器中
  3. AspectJ
    是一种编译器。java编译器基础上加了关键字识别和编译方法,可以编写Aspect程序植入目标程序,拓展程序功能。
  4. Transform + Javassist/ASM
    Transform是Android Gradle提供的,可以操作字节码的一种方式。源码-.class-.dex。在.class转变为.dex过程会经历一系列的Transform处理。Javassist/ASM是操作.class字节码

参考