title: UML学习记录
date: 2024-06-29 17:39:27
tags: [UML, 工作技能, 基本功]
0/什么是UML?
UML——Unified modeling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果.
UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等
1/UML的分类
1.1/UML图
UML图本质上是将你的想法转述给别人,所以主要分为以下几类:
- 用例图
- 静态结构图:类图、对象图、包图、组件图、部署图
- 动态行为图:交互图(时序图与协作图)、状态图、活动图
类图是用来描述类与类之间的关系的,所以是UML图中最核心的。
1.2/UML类图
类图用于描述系统中的类(对象)本身的组成
和类(对象)之间的各种静态关系
,类之间的关系有:
- 依赖
- 泛化(继承)
- 实现
- 关联
- 聚合与组合
所以类图可以用以下例子来解释
public class Person {
private Integer id;
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
用类图就可以表示为
2/类图关系
2.0/类图关系概述
- 设计一个类中的信息和行为要实现
高内聚
- 设计多个类,类之间要做到
低耦合
在实际的系统应用中,我们所创建的多个对象往往是有联系
的, 通常情况下对象之间的关系可以分为以下几类:
- 泛化关系
- 实现关系
- 依赖关系
- 关联关系
- 聚合关系
- 组合关系
2.1/泛化(继承)关系
简单的说,泛化
就是继承
,即一个类(我们称之为子类,子接口)继承(extend
)另外一个类(我们称之为父类,父接口)的功能,并且可以增加自己额外的
一些功能。
在UML关系中,继承通常使用空心三角+实线表示.
接口间的继承关系通常用圆心表示,而类之间的继承关系通常用矩形表示
2.2/实现关系
在UML关系中,实现通常使用空心三角+虚线表示
表示一个类实现一个或多个接口的功能
2.3/依赖关系
在UML关系中,依赖常用虚线箭头表示
表示一个类依赖于另一个类的定义
,表示如果A对象离开了B对象,A对象无法通过编译,则此时A对象依赖于B对象(A类中使用到了B对象)
public class Weapon {
public float damage;
}
public class Player {
public Weapon weapon = null;
public float damage;
public float hp;
public void Attack(Player target) {
if (weapon != null) {
target.hp -= weapon.damage + damage;
}else{
target.hp -= damage;
}
}
}
2.4/关联关系
UML关系中,关联关系通常使用实线箭头表示
2.4.1/一对一关系
{% note info %}
单向关联
{% endnote %}
public class QQNumber{
public QQZone zone;
}
public class QQZone{}
{% note info %}
双向关联
{% endnote %}
public class QQNumber{
public QQZone zone;
}
public class QQZone{
public QQNumber number;
}
2.4.2/单向的一对多
{% note info %}
一个A对象属于多个B对象,并且每个B对象只能属于一个A对象
{% endnote %}
public class Employee{
}
public class Department{
public List<Employee> emps = new List<Employee>();
}
2.4.3/单向的多对一
{% note info %}
多个A对象属于一个B对象,并且每个A对象只能属于一个B对象
{% endnote %}
public class Department{
}
public class Employee{
public Department dept;
}
2.4.4/双向一对多,多对一
{% note info %}
A可以通过属性导航到B,B可以通过属性导航到A,本质上是把两个单向关系组合起来
{% endnote %}
public class Employee{
private Department dept;
}
public class Department{
private List<Employee> emps = new List<Employee>();
}
2.4.5/单向多对多
{% note info %}
一个A对象属于多个B对象,一个B对象也属于多个A对象
{% endnote %}
public class Student{
private List<Teacher> teachers = new List<Teacher>();
}
public class Teacher{
private List<Student> students = new List<Student>();
}
2.5/聚合关系
聚合关系是
关联关系的一种特例
,他体现的是整体与部分
,是一种“弱拥有”
的关系,即has-a
的关系。聚合是整体
和个体
之间的关系
关联关系所设计的两个类是要处在同一个层次上的,而在聚合关系中,两个类是处在不平等的层次上的,一个代表整体,一个代表部分。
聚合通常使用空心菱形+实心箭头表示
public class Phone{
private class Card;
}
public class Card{
}
2.6/组合关系
组合关系也是关联关系的一种特例
,体现的是一种contains-a
(包含)关系,比聚合更强,所以也是强聚合
整体和个体不能独立存在,一定是在一个模块中同时管理整体和个体,生命周期必须相同(级联)。
{% note info %}
按照我的理解就是字面意思,出现一定是"组合"起来出现,不会两个人单独出现
{% endnote %}
组合通常使用实心菱形+实线箭头表示
public class OrderBill{
private List<OrderBillItem> items = new List<OrderBillItem>();
}
public class OrderBillItem{
private OrderBill bill;
}