文章目录
0. 什么是UML?
UML:统一建模语言,是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发任意进行思考和记录思路的结果。
1. 依赖关系(Dependence)
1.1 什么是依赖关系?
只要是在类中用到了对方,那么他们之间就存在依赖关系。如果没有对方,连编译都过不了。
1.2 上代码
新建四个类
/**
* @author LongXi
* @create 2021-07-31 19:57
*/
public class IDCard {
}
/**
* @author LongXi
* @create 2021-07-31 19:57
*/
public class Person {
}
/**
* @author LongXi
* @create 2021-07-31 19:57
*/
public class PersonDao {
}
/**
* @author LongXi
* @create 2021-07-31 19:57
*/
public class Department {
}
主类
/**
* @author LongXi
* @create 2021-07-31 19:57
*/
public class PersonServiceBean {
private PersonDao personDao;
public void save(Person person){
}
public IDCard getIDCard (Integer personId){
return null;
}
public void modify(){
Department department = new Department();
}
}
1.3 用类图描述关系
1.4 依赖小结
在类中用到了对方,具体有下面四种
- 类的成员属性(私有变量)
- 类的方法的返回类型
- 方法接收的参数类型
- 方法中使用到
2. 泛化关系(Generalization)
2.1 什么是泛化关系?
泛化关系实际上就是继承关系,他是依赖关系的特例
2.2 上代码
/**
* @author LongXi
* @create 2021-07-31 20:15
*/
public abstract class DaoSupport {
public void save (Object entity){
}
public void delete (Object id){
}
}
/**
* @author LongXi
* @create 2021-07-31 20:17
*/
public class PersonServiceBean extends DaoSupport{
}
2.3 用类图描述关系
2.4 小结
- 泛化关系实际上就是继承关系
- 如果A类继承了B类,我们就说A和B存在泛化关系。
3. 实现关系(Realization)
3.1 什么是实现关系?
实现关系实际上就是A类实现了B类,它是依赖关系的特列
3.2 上代码
/**
* @author LongXi
* @create 2021-07-31 20:23
*/
public interface PersonService {
public void delete(Integer id);
}
/**
* @author LongXi
* @create 2021-07-31 20:23
*/
public class PersonServiceBean implements PersonService{
@Override
public void delete(Integer id) {
System.out.println("delete");
}
}
3.3 用类图描述关系
4. 关联关系(Association)
4.1 什么是关联关系?
关联关系实际上就是类与类之间的联系,它是依赖关系的特例
关联具有导航性:即双向关系或单向关系
4.2 单向一对一
/**
* @author LongXi
* @create 2021-07-31 20:37
*/
public class Person {
private IDCard card;
}
/**
* @author LongXi
* @create 2021-07-31 20:37
*/
public class IDCard {
}
4.3 单向一对一:用类图描述关系
4.3 双向一对一
/**
* @author LongXi
* @create 2021-07-31 20:37
*/
public class Person {
private IDCard card;
}
/**
* @author LongXi
* @create 2021-07-31 20:37
*/
public class IDCard {
private Person person;
}
4.4 双向一对一: 用类图描述关系
5. 聚合关系(Aggregation)
5.1 什么是聚合关系?
聚合关系:表示的是整体和部分的关系,整体和部分可以分开。聚合关系是关联关系的特例,所以它具有关联的导航性和多重性。
例如:一台电脑由键盘,显示器,鼠标等组成,组成电脑的各个配件是可以从电脑上分离出来的,使用带空心菱形的实线来表示。
聚合:整体和部分可以分开
组合:整体和部分不可以分开
5.2 上代码
显示器类
/**
* @author LongXi
* @create 2021-07-31 20:47
*/
public class Moniter {
}
鼠标类
/**
* @author LongXi
* @create 2021-07-31 20:47
*/
public class Mouse {
}
电脑类
/**
* @author LongXi
* @create 2021-07-31 20:47
*/
public class Computer {
private Mouse mouse;
private Moniter moniter;
public void setMouse(Mouse mouse) {
this.mouse = mouse;
}
public void setMoniter(Moniter moniter) {
this.moniter = moniter;
}
}
5.3 类图
部分聚合整体
6. 组合关系(Composition)
6.1 什么是组合关系?
如果Mouse,Moniter和Computer是不可分离的,则升级为组合关系
组合关系:也是整体和部分的关系,但是整体和部分不可以分开
6.2 上代码
改变一下鼠标,显示器和电脑的关系
/**
* @author LongXi
* @create 2021-07-31 20:47
*/
public class Computer {
private Mouse mouse = new Mouse();
private Moniter moniter = new Moniter();
public void setMouse(Mouse mouse) {
this.mouse = mouse;
}
public void setMoniter(Moniter moniter) {
this.moniter = moniter;
}
}
6.3 用类图描述关系
6.4 再举一个例子,加深理解
人和身份证的关系,就是聚合关系,人可以没有身份证。
人和头的关系,就是组合关系,人不可以没有头。
6.5 上代码
头部类
/**
* @author LongXi
* @create 2021-07-31 20:59
*/
public class Head {
}
身份证类
/**
* @author LongXi
* @create 2021-07-31 20:37
*/
public class IDCard {
private Person person;
}
人类
/**
* @author LongXi
* @create 2021-07-31 20:37
*/
public class Person {
// 聚合关系
private IDCard card;
// 组合关系
private Head head = new Head();
}
6.6 用类图描述关系
6.7 注意
如果在程序中Person实体中定义了对IDCard进行级联删除 ,即删除Person时连同IDCard一起删除,那么IDCard和Person就是组合了