UML快速理解
以下所有信息以Java语言为准。
泛化(继承)
一个类继承另一个类,用实体箭头表示。
可以理解为使用了extends的都是泛化,都可以使用实体箭头。
public class Person {
protected String name;
protected int age;
}
public class Student extends Person {
protected String code;//学号
protected String classes;//班级
}
实现
类实现了接口。使用虚线和实箭头表示实现关系。
这是一个常用的方式,比如定义一个OperStudentService接口,然后定义Impl的实现类。
public interface OperStudentService {
void deleteStudent(String code);
}
public class OperStudentServiceImpl implements OperStudentService {
@Override
public void deleteStudent(String code) {
}
}
依赖
类A在方法中使用了类B,这就是A依赖B。使用虚线箭头表示
在OperPersonService的类中的insertPerson方法中,需要用到Person对象,那么就是OperPersonService依赖Person。
public class Person {
}
public class OperPersonService {
public void insertPerson(Person person){
}
}
关联
类A作为类B的属性,那么就说类B与类A关联。它比依赖表示两个类关系更强。
用实线箭头表示。
工人有很多技能,他能知道Skill类里面的具体属性和方法,这种很强的联系就是关联。
public class Skill {//技能
public String name;//名称
public String desc;//描述
public String grade;//级别
}
public class Worker { //工人
private List<Skill> skills;//技术
public void matchSkill(){
for (Skill skill : skills) {
String name = skill.name;
String desc = skill.desc;
String grade = skill.grade;
}
}
}
聚合
是一种 has-a的关系,所以聚合也可以被认为是关联。一般只能从语义上分析。
比如上面的worker拥有skill,也可以说是聚合关系。
聚合一般是用尾部是空心棱形的实线箭头表示。
public class Worker { //工人
private List<Skill> skills;//技术
public void setSkills(List<Skill> skills){
this.skills = skills;
}
}
一般在表示聚合关系时,都是可以使用setter或者其他方法来增加属性。
组合
这是一种整体由其他部分组成的关系,一般表示contains-a的关系。
使用尾部是实心的棱形实线箭头表示。
人是由头,身体,手,脚组成,所以这就是一种组合关系。
public class Body {
protected String desc;
protected String function; //功能
}
public class Hand {
protected String desc;
protected String function; //功能
}
...............省略相同代码
public class Person {
Head head = new Head(); //头
Body body = new Body();//身体
Leg leg = new Leg();//腿
Hand hand = new Hand();//手
}
当表示组合关系时,一般表示当Person类被new出来后,里面的成员变量也会被new出来。
如下所示,这个一般表示聚合关系,
public class Person {
Head head; //头
Body body;//身体
Leg leg;//腿
Hand hand;//手
public void setHead(Head head){this.head = head;}
.....省略相同代码
}
其实关联、组合、聚合在代码上都表现为类A作为类B的属性而存在,这只能靠场景区别。
或者就按照上述,有setter就是聚合,在初始化后内部成员变量也初始化,这就是组合。