一.前言
一直以来,在画UML关系图的时候,都不是那么顺利,主要是其中的几种关联关系并不好理解。今天学习并总结下。
二.UML关系:三大类,六小类
- 泛化(Generalization):包含继承(Extends)和实现(Implement)。
- 依赖(Dependency):单独的一类。
- 关联(Association):包含关联(Association),聚合(Aggregation),组合(Compositon)。
三.继承(Extends)
- 类继承类,接口继承接口。
四.实现(Implemet)
- 类实现接口。
五.依赖(Dependency)
- 类A依赖类B的定义,B的变化引起A的改动。
- 这种关系是短暂的,偶然的。
- 如果A依赖B,则B体现为A的方法的参数,局部变量,静态方法的调用。
public class ClassA { //方法的参数 public void function1(ClassB classB){ System.out.println(classB.field); } //局部变量 public void function1(){ ClassB classB = new ClassB(); classB.operator1(); } //静态方法的调用 public void function2(){ ClassB.operator2(); } }
六.关联(Association)
- 类A知道类B的属性和方法。
- 这种关系不是短暂的,一般是长期性的;而且双方一般是平等的。
- 如果A依赖B,则B体现为A的成员变量。
- 双向关联。
七.聚合(Aggregation)
- 关联关系的特例,是一种强的关联关系。
- 双方是整体体和部分的关系;整体和部分可以分割,各有各的生命周期。
- 如果B聚合于A,则B体现为A的成员变量。这个和关联关系是一样的,只能在语义上区分。
public class Computer { public Cpu cpu; public Computer(){ cpu = new Cpu(); //Computer和Cpu的周期可以相同 } public void function(){ cpu = new Cpu(); //Computer和Cpu的周期可以不相同 } }
八.组合(Compositon)
- 关联关系的特例,是一种更强的关联关系。
- 双方是整体体和部分的关系;整体和部分不可以分割,相同的生命周期。
- 如果B组合于A,则B体现为A的成员变量。这个和关联关系是一样的,可以在语义上区分,也可以从初始化时刻区分。
public class People { public Brain brain; public Computer(){ brain = new Brain(); //People和Brain的周期必须相同 } }
九.总结
一.前言 二.UML关系:三大类,六小类 三.继承(Extends) 四.实现(Implemet) 五.依赖(Dependency) 六.关联(Association) 七.聚合(Aggregation) 八.组合(Compositon) 九.总结