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就是聚合,在初始化后内部成员变量也初始化,这就是组合。

posted @ 2022-04-06 09:50  伟衙内  阅读(22)  评论(0编辑  收藏  举报