使用语雀绘制 Java 中六大 UML 类图
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
下载语雀
泛化关系Generalization
继承指的是一个类子类、子接口继承另外的一个类父类、父接口的功能、并可以为自己增加新功能的能力。在 Java 中继承关系通过关键字 extends 明确标识。就像Java ArrayList 继承了 AbstractList 并拓展了属于自己的功能。
UML图
继承用一条带空心三角箭头的实线表示从子类子接口指向父类父接口
@startuml
title Generalization
class AbstractList
class ArrayList
AbstractList <|-- ArrayList
@enduml
实现关系Realization
实现指的是一个 class 类实现 interface 接口可以是多个的功能在 Java 中通过关键字 implements 明确标识。就像编程语言是一个泛化的概念Java与Python就是它的具体落地实现。
public interface ProgrammingLanguage {
}
class Java implements ProgrammingLanguage {
}
class Python implements ProgrammingLanguage {
}
UML图
实现用一条带空心三角箭头的虚线表示
@startuml
title Generalization
interface ProgrammingLanguage
class Java
class Python
ProgrammingLanguage <|.. Java
ProgrammingLanguage <|.. Python
@enduml
关联关系Association
表示不同类对象之间有关联这是一种静态关系与运行过程的状态无关在最开始就可以确定。因此也可以用 1 对 1、多对 1、多对多这种关联关系来表示。比如学生和学校就是一种关联关系一个学校可以有很多学生但是一个学生只属于一个学校因此这是一种多对一的关系在运行开始之前就可以确定。
public class School {
List<Student> studentList;
}
class Student {
}
UML图
在关联的两端可以标注关联双方的角色和多重性标记。
@startuml
title Association
class School
School : StudentList
class Student
School "1"--"n" Student
@enduml
依赖关系Dependency
和关联关系不同的是依赖关系是在运行过程中起作用的。
A 类和 B 类是依赖关系主要有三种形式
- A 类是 B 类中某方法的局部变量
- A 类是 B 类方法当中的一个参数
- A 类向 B 类发送消息从而影响 B 类发生变化
例如个人银行卡的存款与提现会影响银行的总账户余额
public class Bank {
public static volatile BigDecimal allAccountBalance = new BigDecimal("1000000000");
public static void setAllAccountBalance(BigDecimal allAccountBalance) {
Bank.allAccountBalance = allAccountBalance;
}
}
class BankCard {
void deposit(BigDecimal money){
Bank.setAllAccountBalance(Bank.allAccountBalance.add(money));
}
void cashWithdrawal(BigDecimal money){
Bank.setAllAccountBalance(Bank.allAccountBalance.subtract(money));
}
}
UML图
依赖关系用由类 A 指向类 B 的带箭头虚线表示
@startuml
class Bank {
+allAccountBalance
}
class BankCard {
-deposit(BigDecimal money)
-cashWithdrawal(BigDecimal money)
}
Bank <.. BankCard
@enduml
聚合关系Aggregation
聚合是关联关系的一种特例它体现的是整体与部分的关系即 has-a 的关系。此时整体与部分之间是可分离的它们可以具有各自的生命周期部分可以属于多个整体对象也可以为多个整体对象共享。例如电脑和鼠标键盘的关系电脑作为整体而鼠标键盘作为电脑的非必要组成部分两者生命周期互不干扰。
public class Computer {
}
class Mouse {
}
class Keyboard {
}
UML图
聚合关系以实线空心菱形表示
@startuml
class Computer
class Mouse
class Keyboard
Computer o-- Mouse
Computer o-- Keyboard
@enduml
组合关系Composition
和聚合不同组合中整体和部分是强依赖的整体不存在了部分也不存在了。比如公司和部门公司没了部门就不存在了。但是公司和员工之间属于聚合关系因为公司没了员工还在。
public class Company {
}
class DepartmentA {}
class DepartmentB {}
class DepartmentC {}
UML图
组合关系用实心菱形表示
@startuml
class Company
class DepartmentA
class DepartmentB
class DepartmentC
Company *-- DepartmentA
Company *-- DepartmentB
Company *-- DepartmentC
@enduml