类的矩形表示法:
接口的矩形表示法如下图所示:
接口的矩形表示法顶端有“<<interface>>”,第一行是接口名,第二行是接口方法。
接口的棒棒糖表示法如下图所示:
接口的棒棒糖表示方法:圆圈旁为接口名,接口方法在实现口类中体现。
符号:“+”代表 public “-”代表 private “#”代表 protected
public class Bird {
public void haveWing(){
//局部变量
Wing wing = new Wing();
}
public void haveWing(Wing wing){
//方法参数
}
public void haveWings(){
//静态方法调用
Wing.getWing();
}
}
2. 关联关系(Association)
单向或双向(通常要避免使用双向关联关系),它是一种“has a”的关系,如果A单向关联B,则可以说A has a B,在代码中通常表现为全局变量,在画图时用“实线箭头”表示。
public class Bird {
private Wing wing;
public Wing getWing() {
return wing;
}
public void setWing(Wing wing) {
this.wing = wing;
}
}
由上边的代码可以看出Bird和Wing有关联,可以用下面的图表示:
3. 聚合关系(Aggregation)
单向,关联关系的一种,与关联关系之间的区别是语义上的,关联的两个对象通常是平等的,聚合则一般不平等,有一种整体和局部的感觉,画图时用“空心菱形+实线”表示,例如:
public class Team {
private Student student;
}
Team由 student 组成,他们的生命周期不同,整体不存在了,部分依然存在,当Team不存在,student依然存在,还可以加入别的组,可以用下面的图表示:
4. 组合关系(Composition)
单向,是一种强依赖的特殊聚合关系,体现了严格的部分和整体关系,部分和整体的生命周期一样,它们的生命周期相同,如果整体不存在了,部分也将消亡,画图时用“实心菱形+实线”表示,例如:
public class Person {
private Head head;
private Body body;
private Arm arm;
private Leg leg;
}
人由身体、头、胳膊、腿组成,当人这个整体不存在的时候,这些部分也不存在了,可以用下图表示:
5. 继承关系(Inheritance)
类实线接口,类继承抽象类,类继承父类都属于这种关系,画图时用“空心三角形+实线”表示。
继承关系的细化:
实现(Realization):类实现接口属于这种关系。
泛化(Generalization): 就是“is a”的关系,类继承抽象类,类继承父类都属于这种关系。
例如:
public class Dog extends Animal {
}
可以看出Dog类继承了Animal类,可以用下图表示: