UML中描述 对象 / 类 之间相互关系的方式包括:依赖(继承,实现),关联(聚合,组合)。
1、 依赖:A的变化会影响B,反之不成立,那么B依赖A;继承和实现在语义上讲也是依赖关系。uml中用带箭头的虚线表示,箭头指向被依赖元素B。
特点:当类与类之间有使用关系时就属于依赖关系,不同于关联关系,依赖不具有“拥有关系”,而是一种“相识关系”,只在某个特定地方(比如某个方法体内)才有关系。
编程中体现为局部变量、方法的参数、静态方法引用
public class Person {
void buy (Car car) {
}
}
2、 继承:uml中用带空心箭头的实线表示,箭头指向父类(被继承)。
3、 实现:uml中用带空心箭头的虚线表示,箭头指向接口(被实现)。
4、 关联:元素间的结构化关系,是一种弱关系,被关联的元素间通常可以被独立的考虑。uml中用实线表示,箭头指向被依赖元素。
特征:表示类与类或类与接口之间的依赖关系,表现为“拥有关系”;具体到代码可以用实例变量来表示。
编程中体现为成员变量
public class Teacher {
protected: List<Student> mList;
}
public class Student {
}
5、 聚合:关联关系的一种特例,表示部分和整体(has a)的关系。uml中用带空心菱形头的实线表示,菱形头指向整体。
特征:属于是关联的特殊情况,关联关系所涉及的两个类处在同一个层次上,而聚合关系中,两个类处于不同的层次上,一个代表整体,一个代表部分,体现部分-整体关系,是一种弱拥有关系;整体和部分可以有不一样的生命周期;是一种弱关联;
编程中体现为成员变量
public class Car {
protected:Engine engine;
}
public class Engine {
}
6、组合:组合是聚合关系的变种,表示元素间更强的组合关系;生命周期。uml中用带实心菱形头的实线表示,菱形头指向整体。
特征:属于是关联的特殊情况,也体现了体现部分-整体关系,是一种强“拥有关系”;整体与部分有相同的生命周期,是一种强关联;
class Person {
protected: Eyes mEyes;
}
class Eyes {
}
这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖