【PlantUML系列】类图(一)
目录
一、类
二、接口
三、抽象类
四、泛型类
五、类之间的关系
六、添加注释
七、包图
八、皮肤参数
一、类
使用class
关键字定义类,类名后跟大括号,声明类的属性和方法。
属性:格式为{visibility} attributeName : AttributeType;
{visibility}
:成员的可见性,可以是-
(私有)、#
(受保护)、+
(公共)、~
(包级私有)。attributeName
:属性的名称。AttributeType
:属性的类型,可以是任何有效的数据类型,如int
、String
、boolean
等。
方法:格式为{visibility} methodName(param1 : Type1, param2 : Type2, ...) : ReturnType;
{visibility}
:成员的可见性,可以是-
(私有)、#
(受保护)、+
(公共)、~
(包级私有)。methodName
:方法的名称。param1 : Type1, param2 : Type2, ...
:方法的参数列表,每个参数由名称和类型组成,多个参数之间用逗号分隔。ReturnType
:方法的返回类型,可以是任何有效的数据类型,如int
、String
、boolean
等,如果方法没有返回值,则可以省略返回类型。
@startuml
class ClassName {- attribute1 : Type# attribute2 : Type+ attribute3 : Type- method1() : Type# method2(param1 : Type1, param2 : Type2) : Type+ method3(param : Type) : Type
}
@enduml
二、接口
使用interface
关键字定义接口,接口中的方法只能声明,不能实现。
@startuml
interface InterfaceName {+ method1() : Type+ method2(param : Type) : Type
}
@enduml
三、抽象类
使用abstract
关键字定义抽象类,抽象类中可以包含抽象方法和具体方法。
抽象方法:表达格式为在方法前增加{abstract}
@startuml
abstract class AbstractClassName {{abstract} + method1() : Type+ method2() : Type
}
@enduml
四、泛型类
在类名后跟尖括号< >
定义泛型类型。
@startuml
class GenericClass<TType> {+ method(param : TType) : TType
}
@enduml
五、类之间的关系
- 泛化:使用
--|>
表示。表示一个类(子类)继承另一个类(父类)的属性和方法。子类是父类的一种特殊类型。 - 关联:使用
-->
表示。表示两个类之间有逻辑上的连接,关联可以是双向的或单向的,并且通常有一个角色名和多重性(如1, *, n, m等)。 - 实现:使用
..|>
表示。表示一个类实现了接口的承诺,即实现了接口中定义的所有方法。 - 依赖:使用
-->
表示,箭头端点可以附加一个空心三角形。表示一个类的变化可能会影响另一个类,通常用于描述方法参数、局部变量、或者方法返回类型等临时性的关系。 - 聚合:使用
"n" *-- "m"
表示,其中n
和m
分别表示聚合的两端的基数。表示整体与部分的关系,部分可以独立于整体存在。聚合是关联的一种,表示弱的“拥有”关系。 - 组合:使用
"n" o-- "m"
表示,其中o
表示实心菱形,表示强拥有关系。也表示整体与部分的关系,但部分不能独立于整体存在。组合是关联的一种,表示强的“拥有”关系,整体的生命周期结束时,部分的生命周期也会结束。
@startumlclass ClassA {
}class ClassB {
}class InterfaceA {
}ClassB --|> ClassA : 泛化
ClassA ..|> InterfaceA : 实现
ClassA --> ClassB : 关联
ClassA "1" *-- "n" ClassB : 聚合
ClassA "1" o-- "n" ClassB : 组合
ClassA -down-|> ClassB : 依赖@enduml
六、添加注释
使用note
关键字为类或关系添加注释。
@startuml
class ClassA {
}
note left of ClassA : This is a note
@enduml
七、包图
使用package
关键字定义包,并在包中定义类或接口。
@startuml
package one.two {class Hello
}
package three.four {class World
}
World -- Hello
@enduml
八、皮肤参数
使用skinparam
关键字设置类图的外观,典型配置如下。
- 背景颜色(BackgroundColor)
- 边框颜色(BorderColor)
- 箭头颜色(ArrowColor)
- 字体颜色(FontColor)
- 字体名称(FontName)
- 字体大小(FontSize)
- 圆角(RoundCorner)
- 手写风格(Handwritten)
- 参与者填充(ParticipantPadding)
- 盒子填充(BoxPadding)
- 消息对齐(SequenceMessageAlign)
- 箭头风格(ArrowStyle)
- 活动图背景色(ActivityBackgroundColor)
- 活动图边框色(ActivityBorderColor)
@startuml' 设置整个图表的背景颜色
skinparam backgroundColor #FFFFFF' 设置类和接口的背景颜色
skinparam classBackgroundColor #DDDDDD' 设置类和接口的边框颜色
skinparam borderColor #000000' 设置箭头颜色
skinparam ArrowColor #555555' 设置默认字体名称
skinparam defaultFontName Arial' 设置默认字体大小
skinparam defaultFontSize 12' 设置类和接口的圆角大小
skinparam roundCorner 5' 设置手写风格的字体(可选值:true 或 false)
skinparam handwritten false' 设置参与者的外边距
skinparam ParticipantPadding 30' 设置盒子的外边距
skinparam BoxPadding 15' 设置序列图中消息的对齐方式(可选值:left, right, center)
skinparam sequenceMessageAlign center' 设置箭头风格(可选值:solid, dashed, dotted, open)
skinparam ArrowStyle solid' 设置活动图的形状背景色
skinparam ActivityBackgroundColor #FFFFFF' 设置活动图的形状边框色
skinparam ActivityBorderColor #000000' 设置活动图节点的填充颜色
skinparam ActivityNodeColor #FFFFFF' 设置活动图节点的边框颜色
skinparam ActivityBorderColor #000000' 设置类图中类的边框厚度
skinparam classBorderThickness 1' 设置类图中方法和属性的图标大小
skinparam classAttributeIconSize 10' 设置类图中方法和属性的字体颜色
skinparam classMethodFontColor #000000' 设置类图中方法和属性的字体大小
skinparam classAttributeFontColor #000000' 设置类图中方法和属性的字体大小
skinparam classMethodFontSize 12' 设置类图中方法和属性的字体大小
skinparam classAttributeFontSize 12' 定义类
class ExampleClass {- privateAttribute : String+ publicMethod() : void
}' 定义接口
interface ExampleInterface {+ interfaceMethod() : void
}' 展示类和接口之间的关系
ExampleClass ..|> ExampleInterface' 展示类之间的关系
class AnotherClass {+ anotherMethod() : void
}
ExampleClass --> AnotherClass : 使用@enduml
九、示例
相关文章:

【PlantUML系列】类图(一)
目录 一、类 二、接口 三、抽象类 四、泛型类 五、类之间的关系 六、添加注释 七、包图 八、皮肤参数 一、类 使用class关键字定义类,类名后跟大括号,声明类的属性和方法。 属性:格式为{visibility} attributeName : AttributeType…...

Unity AssetBundles(AB包)
目录 前言 AB包是什么 AB包有什么作用 1.相对Resources下的资源AB包更好管理资源 2.减小包体大小 3.热更新 官方提供的打包工具:Asset Bundle Browser AB包资源加载 AB包资源管理模块代码 前言 在现代游戏开发中,资源管理是一项至关重要的任务。随着游戏内容…...

腾讯面试:如何解决哈希冲突?
我们面试时经常被问到HashMap是怎么解决哈希冲突的,很多同学对其含糊其词、一知半解。因此小编对相关知识进行了总结,希望帮助读者加深对其理解。 哈希表就是通过散列函数将键映射到定值,简单来说就是一个键对应一个值。 而通过散列函数映射…...

【动手学运动规划】 4.5 A*算法
我宁愿永远做我自己,也不愿成为别人,即使那个人比你更快乐。 —《成为简奥斯汀》 🏰代码及环境配置:请参考 环境配置和代码运行! 4.5.1 概述 Dijkstra算法是基于广度优先搜索策略来遍历空间内的所有节点,最终计算出…...
Spring Boot 3.4.0 发布:功能概览与示例
Spring Boot 3.4.0 带来了许多增强功能,使现代应用开发更加高效、便捷和强大。以下是最新功能的完整概述,以及一些帮助您快速入门的代码示例。 1. 应用程序版本管理 Spring Boot 引入了 spring.application.version 属性,方便开发者设置和访…...

【48】Android通过libjpeg-turbo库实现图片压缩
(1)公司为节约图片占用服务器存储资源成本,需要对Android手机客户端所传递到云存储服务器中的图片进行压缩,在不影响图片失真程度的情况下,最大限度的压缩图片以节省图片所占用的存储空间。 (2)…...

Linux输入设备应用编程
本章学习输入设备的应用编程,首先要知道什么是输入设备?输入设备其实就是能够产生输入事件的设备就称为输入设备,常见的输入设备包括鼠标、键盘、触摸屏、按钮等等,它们都能够产生输入事件,产生输入数据给计算机系统。…...
【Vulkan入门】03-创建Device
目录 先叨叨git信息关键代码VulkanEnv::CreateDevice() 编译并运行程序题外话 先叨叨 在上篇已经选择了一个合适的PhysicalDevice。 本篇要为这个PhysicalDevice创将一个Device。Device可以理解为APP与PhysicalDevice之间的代理。 所有APP与PhysicalDevice之间交互的资源都通过…...
【jvm】C2编译器
目录 1. 说明2. 编译流程3. 使用与配置4. 性能优化与监控5. 局限性 1. 说明 1.JVM(Java虚拟机)C2编译器是Java编译过程中的重要环节,专门用于将Java字节码编译成高效的本地机器代码,以提升Java程序的执行效率。2.特点:…...
使用 Acme.sh 自动生成和续签免费 SSL 证书(含通配符支持)
Acme.sh 是一个开源的脚本,能够从 ZeroSSL、Let’s Encrypt 等证书颁发机构(CA)获取免费的 HTTPS 证书。该脚本特别简单易用,并且支持多种验证方式。下面将详细介绍使用 Acme.sh 生成、安装和更新证书的各个步骤。 Github地址 使用…...

Android 图形系统之四:Choreographer
Choreographer 是 Android 系统中负责帧同步的核心组件,它协调输入事件、动画和绘制任务,以确保界面以固定频率(通常是每 16ms,一帧)流畅渲染。通过管理 VSYNC 信号和调度任务,Choreographer 是实现流畅 UI…...
CAP定理和BASE理论
CAP定理 CAP定理,也称为布鲁尔定理(Brewer’s Theorem),是分布式系统设计中的一个基本原理。它指出在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容…...
笔记软件:我来、思源笔记、Obsidian、OneNote
最近wolai的会员到期了,促使我更新了一下笔记软件。 首先,wolai作为一个笔记软件,我觉得有很多做得不错的方面(否则我也不会为它付费2年了),各种功能集成得很全(公式识别这个功能我写论文的时候…...

试探互联网如何工作?
Reading: How_does_the_Internet_workhow-does-internet-work Watching:How the Internet Works in 5 Minutes Outline: 互联网通过全球互联的计算机和服务器网络工作,通过标准化协议进行通信。数据被分解成数据包,并使用互联…...
【c++笔试强训】(第三十篇)
目录 爱丽丝的⼈偶(贪⼼构造) 题目解析 讲解算法原理 编写代码 集合(排序) 题目解析 讲解算法原理 编写代码 爱丽丝的⼈偶(贪⼼构造) 题目解析 1.题目链接:登录—专业IT笔试面试备考平…...

微信小程序购物车全选反选功能以及合计
微信小程序基于Vant Weapp的购物车功能实现 1、单选 使用微信小程序原生表单组件checkbox和checkbox-group 注意:checkbox原生不支持bind:change事件,checkbox-group支持 <checkbox-group bindchange"handleCheck"><checkbox val…...

vue-qr在线生成二维码组件(vue2版本)
在对于二维码生成中有许多组件,下面介绍关于自定义比较高的vue-qr组件,能自定义设置背景颜色、背景图片、背景Gif图、实点和空白区的颜色、中心Logo的图片和边距。 依赖下载 注意: 直接npm下载最新版 有些项目可能运行会抱错 这时候你可以降…...

大语言模型技术相关知识-笔记整理
系列文章目录 这个系列攒了很久。主要是前段之间面试大语言模型方面的实习(被拷打太多次了),然后每天根据面试官的问题进行扩展和补充的这个笔记。内容来源主要来自视频、个人理解以及官方文档中的记录。方便后面的回顾。 文章目录 系列文章…...
SCP命令实现Linux中的文件传输
CP命令的主要作用是实现Linux与Linux系统之间的文件传输。 SCP命令时基于SSH协议,所以两台服务器的sshd服务必须处于开启状态,否则无法完成上传与下载操作。 #1.上传文件 scp linux本地文件路径 远程用户名@linux主机地址:远程路径 #2.下载文件 scp 远程用户名@linux主机地址…...

linux环境中后台运行java程序
在生产环境,我们通常需要让java进程后台运行,并且即使会话关闭,进程也依然存在。 使用的命令: nohup java -jar xxx.jar -> aaa.log 2>&1 & 详细介绍下上面这条命令 (1)nohup:…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...
电脑桌面太单调,用Python写一个桌面小宠物应用。
下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡,可以响应鼠标点击,并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...