【Java】Java绘制UML图

news2025/1/17 1:01:11

1.继承关系(Inheritance)

继承指的是一个类(子类、子接口)继承另外的一个类(父类、父接口)的功能,通过关键字 extends 明确标识
在这里插入图片描述
UML图

继承用一条带空心三角箭头的实线表示,从子类(子接口)指向父类(父接口)
在这里插入图片描述

2.实现关系(Realization/Implementation)

实现指的是一个 class 类实现 interface 接口(可以是多个)的功能,通过关键字 implements 明确标识

public interface ProgrammingLanguage {
}
 
class Java implements ProgrammingLanguage {
}
 
class Python implements ProgrammingLanguage {
}

UML图

实现用一条带空心三角箭头的虚线表示
在这里插入图片描述

3.关联关系(Association)

表示不同类对象之间有关联,这是一种静态关系,与运行过程的状态无关,在最开始就可以确定。可以用 1 对 1、多对 1、多对多这种关联关系来表示。

public class School {
    List<Student> studentList;
}
 
class Student {
}

UML图

在关联的两端可以标注关联双方的角色和多重性标记。
在这里插入图片描述

4.依赖关系(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 的带箭头虚线表示:
在这里插入图片描述

5.聚合关系(Aggregation)

聚合是关联关系的一种特例,它体现的是整体与部分的关系,即 has-a 的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。例如电脑和鼠标键盘的关系,电脑作为整体,而鼠标键盘作为电脑的非必要组成部分,两者生命周期互不干扰。

public class Computer {
}
 
class Mouse {
}
 
class Keyboard {
}

UML图

聚合关系以实线空心菱形表示
在这里插入图片描述

6.组合关系(Composition)

和聚合不同,组合中整体和部分是强依赖的,整体不存在了部分也不存在了。比如公司和部门,公司没了部门就不存在了。但是公司和员工之间属于聚合关系,因为公司没了员工还在。

public class Company {
}
 
class DepartmentA {}
class DepartmentB {}
class DepartmentC {}

UML图

组合关系用实心菱形表示
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/435368.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字孪生可实现三维可视化智慧园区吗?

随着城市化的进程和信息化的发展&#xff0c;越来越多的城市拥有了智慧园区这一新的城市形态&#xff0c;通过“互联网”和物联网技术&#xff0c;实现了各种功能部门之间的信息共享与协同&#xff0c;提高了园区服务的质量和效率。然而&#xff0c;如何更好地实现园区管理和运…

DNS服务的正反向解析

目录 1.DNS域名解析服务概括 产生原因 作用&#xff1a; 2.正向解析 2.1 准备工作&#xff0c;关闭selinux和防火墙 2.2 安装DNS软件 2.3 服务端操作&#xff0c;编辑DNS主配置文件 2.4 服务端操作&#xff0c;编辑区域配置文件&#xff0c;可以在最后添加&#xff0c…

OpenAI文档翻译——搭建第一个自己的ChatGPT应用

这篇主要是讲了重头到位创建一个基于OpenAI API的应用程序的过程&#xff0c;同时给出了Node.js、Python版本的实例代码。应用程序的构建总体来说是很简单的就是一个接口调用&#xff0c;前提是我们需要提供密匙。 如果想要获取更好的结果返回一个是可以给模型提供一些列子从而…

9.5 数组的指针和指向数组的指针变量-2

9.5 数组的指针和指向数组的指针变量-2 一.数组名作为函数参数&#xff08;1&#xff09;实参和形参都是数组名&#xff08;2&#xff09;实参用数组名&#xff0c;形参用指针变量&#xff08;3&#xff09;实参和形参都用指针变量&#xff0c;这个和&#xff08;2&#xff09;…

Leetcode-day1【80】删除有序数组中的重复项 II

文章目录 80. 删除有序数组中的重复项 II题目解题思路解题思路【学习】双指针 80. 删除有序数组中的重复项 II 题目 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。…

CBAM小陈读paper系列

忘记做笔记了&#xff0c;只能 把看文章的PDF保存下来了

神经网络:Zero2Hero 1

Zero → \to → Hero : 1 实现了一个字符级中文语言模型&#xff0c;数据采用的是开源中文姓名数据集中的一部分&#xff0c;主要内容如下&#xff1a; 字符的预处理 统计频次计算字符对频次矩阵 实现一个简单的先验概率模型 从训练数据中计算字符的先验概率根据先验概率通过…

前端UI框架有哪些|20个优秀免费开源的WEB前端UI框架提高网站开发效率

最近准备学习一下前端UI我也是在网上找了很久最终整理出来了20个不错的前端UI框架网站,大家都知道很多成熟的前端框架可以直接引,学习框架可以提升我们网站的开发速度。有些大型公司的前端或者后端框架都是用自己开发的,对于大部分用户和公司来讲,我们可以用开源免费的前端…

TCP和UDP通信对比

tcp通信流程 服务器: 创建流式套接字 绑定 监听 提取 读写 关闭 客户端: 创建流式套接字 连接 读写 关闭 收发数据: read recv ssize_t recv(int sockfd, void *buf, size_t len, int flags); //flagsMSG_PEEK 读数据不会删除缓冲区的数据 write send ssize_t send(int…

【Paper Note】ViViT: A Video Vision Transformer

ViViT: A Video Vision Transformer AbstractOverview of vision transformer 回顾ViTEmbedding video clips 视频编码方式Uniform frame sampling 均匀采样Tubelet embedding 时空管采样初始化3D卷积代码介绍视频编码输入到模型当中 Transformer Models for VideoSpatio-tempo…

安全测试(linux基线排查)看这一篇就够了

前言部分&#xff1a; 作为一个安全测试人员&#xff0c;在确保WEB应用程序没有漏洞外&#xff0c;应该也需要关注一下主机环境的安全&#xff0c;因为应用程序部署在主机环境提供运行环境&#xff0c;也应当关注一下主机环境的安全。于此&#xff0c;通过学习本次对linux安全加…

香橙派pi5下,debian,docker19.03.9版本runc容器逃逸

在香橙派pi5下,debian,docker19.03.9版本下,安装系统后,启动docker,显示一切正常。 当加入k8s集群以后,可以正常连接到集群,node状态显示为ready。看起来一切正常。不过过一会之后,香橙派节点内存飙升,然后挂掉。重连失败,需要重启后才能重连。且swapoff -a命令执行…

C++之深入解析C++20协程的原理和应用

一、无栈协程成为 C20 协程标准 协程分为无栈协程和有栈协程两种&#xff0c;无栈指可挂起/恢复的函数&#xff0c;有栈协程则相当于用户态线程。有栈协程切换的成本是用户态线程切换的成本&#xff0c;而无栈协程切换的成本则相当于函数调用的成本&#xff1b;无栈协程和线程…

个人写校园点评项目的笔记

目录 ​编辑 1.解决短信登陆--2023.4.14 redis 数据类型 阿里云短信服务 存入redis的key和value 流程 dto的意义 给token设置有效期 拦截器的类没有交给Spring Constants 2.商户查询缓存&#xff08;不采用SpringCache&#xff0c;而是尝试原理实现&#xff09; 20…

Spring Cloud Alibab --Seata

事务特性 A&#xff08;Atomic&#xff09;&#xff1a;原子性&#xff0c;构成事务的所有操作&#xff0c;要么都执行完成&#xff0c;要么全部不执行&#xff0c;不可能出现部分成功部分失败的情况。 C&#xff08;Consistency&#xff09;&#xff1a;一致性&#xff0c;在事…

Tarjan算法求割点和桥

先进行一些定义&#xff0c;假设目前有一个无向连通图 割点&#xff1a;某点及其边去掉后&#xff0c;图不再连通 桥&#xff1a;某条边去掉后&#xff0c;图不再联通 tarjan算法求割点 不考虑子结点到父结点的情况 dfn(x) x实际杯访问的时间点 low(x) x通过图可回溯到的最…

22从零开始学Java之你知道return、break与continue的区别吗?

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥给大家介绍了while、do-while两种循环结构&#xff0c;并且给大家总结…

KubeSphere 社区双周报 | OpenFunction 支持 Dapr 状态管理 | 2023.03.31-04.13

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2023.03.31-2023.…

测试工具之JMH详解

文章目录 1 JMH1.1 引言1.2 简介1.3 DEMO演示1.3.1 测试项目构建1.3.2 编写性能测试1.3.3 执行测试1.3.4 报告结果 1.4 注解介绍1.4.1 BenchmarkMode1.4.2 Warmup1.4.3 Measurement1.4.4 Threads1.4.5 Fork1.4.6 OutputTimeUnit1.4.7 Benchmark1.4.8 Param1.4.9 Setup1.4.10 Te…

大数据实战 --- 美团外卖平台

目录 开发环境 数据描述 功能需求 数据准备 数据分析 RDD操作 Spark SQL操作 创建Hbase数据表 创建外部表 统计查询 开发环境 HadoopHiveSparkHBase 启动Hadoop&#xff1a;start-all.sh 启动zookeeper&#xff1a;zkServer.sh start 启动Hive&#xff1a; nohup …