UML (Unified modeling language,统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果。
UML 本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和它们之间的关系,比如类、接口之间的关系。
画 UML 图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理,类图是描述类与类之间的关系的,是 UML 图中最核心的部分,在学习设计模式的时候,我们有必要掌握类图的使用
类与类之间的关系:依赖、泛化(继承)、实现、关联、聚合、组合
各种关系的强弱顺序:泛化= 实现> 组合> 聚合> 关联> 依赖
只要在方法局部变量、方法参数位置、方法返回值处使用了另外的类,他们就产生了依赖关系
class Student {}
class Teacher {}
public class School {
public School() {
Teacher teacher;
Student student;
}
}
在idea中,选中要显示关系的类,右键 Diagrams>Show Diagram,然后在打开界面右键选中 Show Dependencies 可以显示类的关系
在idea中使用 灰色虚线箭头 表示依赖关系
泛化关系又叫做继承关系,他是依赖关系的一种特例,只要是实现了继承关系的类,都属于泛化关系
class Son extends Father {}
public class Father {}
在 idea 中用 深蓝色实线实心箭头 表示泛化关系
实际上就是 A 类实现 B 接口,他也是依赖关系的一种特例
class UserServiceImpl implements UserService { }
public interface UserService {}
在 idea 中使用 绿色虚线实心箭头 表示实现关系
如下表示 最多一个
// Emp.java
public class Emp {}
// Dep.java
public class Dep {
private List<Emp> emps;
}
表示的是整体和部分的关系,整体与部分可以分开。聚合关系是关联关系的特例,所以他具有关联的导航性与多重性。
聚合关系最典型的一个实例就是电脑与鼠标、键盘的关系,电脑离开了鼠标和键盘还是可以正常工作,他们并没有连在一起,可以通过USB接口插拔。
class Mouse {}
class Keyboard {}
public class Computer {
private Mouse mouse;
private Keyboard keyboard;
public void setMouse(Mouse mouse) {
this.mouse = mouse;
}
public void setKeyboard(Keyboard keyboard) {
this.keyboard = keyboard;
}
}
灰色普通箭头+灰色实心菱形
表示的是整体和部分的关系,整体与部分不可以分开。组合关系是关联关系的特例,所以他具有关联的导航性与多重性。
组合关系最典型的一个实例就是人体的构成,当一个正常的婴儿诞生的时候,他必然有手脚、头、身体,缺一不可,整体与局部不可分开。
class Head {}
class Body {}
class Hand {}
class Leg {}
public class Person {
private Head head = new Head();
private Body body = new Body();
private Hand hand = new Hand();
private Leg leg = new Leg();
}
灰色普通箭头+灰色实心菱形
1、依赖关系:由使用者指向被使用者。
如果A指向B,则说明A中使用了B,使用方式包括A类中有B类实例化对象的局部变量。A类中有方法把B类实例化对象当做了参数,A类中有方法调用了B类中的静态方法。
2、泛化关系:由子类指向父类
3、实现关系:由实现类指向接口
4、关联关系:由拥有者指向被拥有者。
如果A指向B,则说明A类中有B类的成员变量
5、聚合关系:由整体指向部分
如果A指向B,则说明A类中有B类的成员变量,但是与关联关系不同,A类和B类有逻辑关系。A类是整体,B类是部分。A类由B类构成,同时B类即便不在A类中也可以单独存在。
6、组合关系:由整体指向部分。
如果A指向B,则说明A类中有B类的成员变量,但是与关联关系不同,A类和B类有逻辑关系。A类是整体,B类是部分。A类由B类构成。但与聚合关系不同,如果B类不在A类中就无法单独存在。