PlantUML文本绘制类图
记录下文本绘制类图的语法
参考 https://juejin.cn/post/6844903731293585421
类的UML表示
使用UML表示一个类,主要由三部分组成。类名、属性、方法。其中属性和方法的访问修饰符用 - 、# 、+ 表示 private、protected、public。
如图所示,表示A类有一个private属性,protected 构造函数和public方法。
@startumlclass A{- String field+ A()# void method()
}
' 单行备注
note right: 这是测试类 Aclass B{- String field+ B()# void method()
}
' 多行备注
note left
Hello
World
end note@enduml

类的关系
在面向对象语言中,类的关系有很多种,可以概括为三类:泛化、依赖、关联。
泛化
泛化指父类跟子类的关系,表示is-a的关系。如父类是抽象类或普通类,则这种关系叫继承。如,父类是接口,则这种关系叫实现。UML中,继承和实现由不同的标记表示。
继承
PlantUML用 --|> 表示继承关系。实线和三角形的抽象表示,指向谁,即继承谁。
@startumlclass Aabstract B' A 继承 BA --|> B@enduml

实现
PlantUML用 …|> 表示实现关系。虚和三角形的抽象表示,指向谁,即实现谁。
@startumlclass Ainterface C' A 实现 CA ..|> C@enduml

依赖:B类作为A类的参数、局部变量、静态方法调用
类之间,最弱的关联方式。常用于在A类的方法中使用B类的对象作为参数、局部变量或者对B类静态方法的调用。
PlantUML用 …> 表示依赖关系。虚线和箭头的抽象表示,指向谁,即依赖谁。
@startumlclass Aclass B' A 依赖 BA ..> B@enduml

关联:对象间的引用关系
关联关系,即对象之间的引用关系。常使用类的属性表达。
单向关联:A类有B类属性
B类作为A类的属性,表示A类与B类有关联。 PlantUML用 --> 表示单向关联。实线线和箭头的抽象表示,指向谁,即关联谁。
@startumlclass A{- B b}class B' A 关联 BA --> B@enduml

双向关联:A、B类互相有对方属性
B类作为A类的属性同时,A类也是B类的属性,表示双向关联。 PlantUML用 – 表示双向关联。或者用<–>。
@startumlclass A{- B b}class B{- A a}' A 关联 BA -- B@enduml

自关联:A类有A类的属性
A类关联A类自身。常见于单例模式。
@startumlclass A{- A a}' A 关联 AA --> A@enduml

聚合:学生之于班级
在关联关系的基础上,延伸出聚合关系,强的关联关系,表示has-a关系。整体与部分的关系,部分不依赖于整体,可独立存在。常用于成员变量。
如;汽车和轮胎的关系,轮胎可作为独立的商品出售。
PlantUML用 o-- 表示聚合关系。实线和空心菱形的抽象表示,指向谁,表示谁是整体。
@startumlclass Car{- List<Wheel> wheels}class Wheel' Car 关联 WheelCar "1" o-- "4" Wheel@enduml

图中数字1和4也表示一对多关联。N对N同理。
组合:翅膀之于鸟
在关联关系的基础上,延伸出另外一种关联关系,组合关系,表示contains-a关系。整体与部分的关系,部分依赖于整体,不可独立存在。常用于成员变量。
如:身体和动作的关系。
PlantUML用 *-- 表示聚合关系。实线和实心菱形的抽象表示,指向谁,表示谁是整体。
@startumlclass Body{- List<Action> actions}class Action' Body 关联 ActionBody "1" *-- "N" Action@enduml

排版
相比较其他的UML软件或插件。PlantUML的优势在于,存储的是文本文件,可以方便的进行团队协作以及高度可定制化的依赖关系。但是,最大的缺点在于,排版是通过插件自动生成的,排版效果不尽人意。因此,PlantUML提供四个关键字 up、down、left、right。指定类与类之间的相对关系。
default
箭头向左时,被指向对象在上; 箭头向右时,被指向对象在下。
@startumlclass A1
class B1A1 --> B1class A2
class B2
A2 <-- B2@enduml

up
使用up时,被指向对象在上。
@startumlclass A1
class B1A1 -up-> B1class A2
class B2
A2 <-up- B2@enduml

down
使用down时,被指向对象在下。
@startumlclass A1
class B1A1 -down-> B1class A2
class B2
A2 <-down- B2@enduml

left
使用left时,被指向对象在左。
@startumlclass A1
class B1A1 -left-> B1class A2
class B2
A2 <-left- B2@enduml

right
使用right时,被指向对象在右。
@startumlclass A1
class B1A1 -right-> B1class A2
class B2
A2 <-right- B2@enduml

包
@startumlpackage "Classic Collections" #yellow{Object <|-- ArrayList
}package net.sourceforge.plantuml {Object <|-- Demo1Demo1 *- Demo2
}@enduml

包可以设置样式,也可以使用skinparam packageStyle设置为默认样式。
@startuml
scale 750 width
package foo1 <<Node>> {class Class1
}package foo2 <<Rect>> {class Class2
}package foo3 <<Folder>> {class Class3
}package foo4 <<Frame>> {class Class4
}package foo5 <<Cloud>> {class Class5
}package foo6 <<Database>> {class Class6
}

相关文章:
PlantUML文本绘制类图
记录下文本绘制类图的语法 参考 https://juejin.cn/post/6844903731293585421 类的UML表示 使用UML表示一个类,主要由三部分组成。类名、属性、方法。其中属性和方法的访问修饰符用 - 、# 、 表示 private、protected、public。 如图所示,表示A类有一个…...
5分钟理解NPL算法 之 马尔可夫链 Markov Chain
马尔可夫链(Markov Chain) 马尔可夫链是一种简单的推理模型。用于描述受当前事件影响下的下一事件发生概率。在预测学科中广泛应用。例如股票预测、文字推理、路线推荐等。 他的核心思路是:假设事件顺序为: X 1 , X 2 , X 3 , . . . . . X…...
C#_GDI+ 绘图编程入门
官网提供相关API GDI 基本图形功能_drawing 高级二维和矢量图形功能_drawing2D GDI 图像处理功能_Imaging GDI 排版功能_text Windows 窗体应用程序提供打印功能_Printing 像素 构成图像的最小单位就是像素;屏幕上显示不管是位图或者矢量图,当描述…...
自己写一个svg转化为安卓xml的工具类
自己写一个svg转化为安卓xml的工具类_张风捷特烈的博客-CSDN博客 svg资源阿里巴巴矢量资源网站:iconfont-阿里巴巴矢量图标库 感觉一般的svg到Android可用的xml差异有点规律,主要的就是path 秉承着能用代码解决的问题,绝对不动手。能够靠智商解决的问题…...
基于随机森林的机器启动识别,基于随机森林的智能家居电器启动识别
目录 背影 摘要 随机森林的基本定义 随机森林实现的步骤 基于随机森林的机器启动识别 代码下载链接: 基于随机森林的家用电器启动识别,基于RF的电器启动识别,基于随机森林的智能家居启动检测-深度学习文档类资源-CSDN文库 https://download.csdn.net/download/abc991835105/…...
Apache Doris 极简运维之BE扩缩容(1)
Apache Doris 极简运维之BE扩缩容(1) 一、环境信息硬件信息软件信息 二、缩容2.1 DROP BACKEND缩容2.2 DECOMMISSION BACKEND缩容2.2.1 缩容前2.2.2 缩容中2.2.3 缩容后 三、扩容3.1 扩容前3.2 扩容中3.3 扩容后 四、总结 一、环境信息 已部署三个BE节点…...
MySQL每日一练--校园教务系统
一丶数据库名称:SchoolDB 二丶数据库表信息:角色信息表 表名: t_role 主键: r_id 序号 字段名称 字段说明 类别 位数 属性 备注 1 r_id 角色编号 int 主键 自动增长 2 r_name_EN 角色名(英…...
9.阿里Sentinel哨兵
1.Sentinel Sentinel(哨兵)是由阿里开源的一款流量控制和熔断降级框架,用于保护分布式系统中的应用免受流量涌入、超载和故障的影响。它可以作为微服务架构中的一部分,用于保护服务不被异常流量冲垮,从而提高系统的稳定…...
设计模式之工厂方法模式
目录 工厂方法模式 简介 优缺点 结构 使用场景 实现 1.抽象产品 2.具体产品 3.抽象工厂 4.具体工厂 5.调用 总结 抽象工厂模式 简介 结构 实现 区别 工厂方法模式 简介 提供一个用于创建对象的接口(工厂接口),让其实现类(工厂实现类)决定实例化哪…...
【案例教程】基于R语言的物种气候生态位动态量化与分布特征模拟
在全球气候快速变化的背景下,理解并预测生物种群如何应对气候变化,特别是它们的地理分布如何变化,已经变得至关重要。利用R语言进行物种气候生态位动态量化与分布特征模拟,不仅可以量化描述物种对环境的需求和适应性,预…...
Moonbeam生态跨链互操作项目汇总
立秋已过,今年的夏天已经接近尾声,即将迎来凉爽的秋天。Moonbeam生态一同以往持续成长,在8月也举办了不少活动、完成集成合作以及协议更新。让我们一同快速了解Moonbeam生态项目近期发生的大小事件吧! Moonwell Moonwell是一个建…...
基于社会群体算法优化的BP神经网络(预测应用) - 附代码
基于社会群体算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于社会群体算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.社会群体优化BP神经网络2.1 BP神经网络参数设置2.2 社会群体算法应用 4.测试结果:5…...
208. 实现 Trie (前缀树)
题目描述 Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。 请你实现 Trie 类: Trie() 初始化前缀树对…...
adb使用总结
adb连接到模拟器 adb devices 打开模拟器,找到设置。 多次点击版本号,切换到开发者模式 搜索进入开发者选项 开启USB调试 此时在终端输入adb devices就连接上了 使用adb查看安卓手机架构 adb shell getprop ro.product.cpu.abi 进入安卓手机的shell …...
go:正确引入自己编写的包(如何在 Go 中正确引入自己编写的包)
前言 目录如下: 具体教程 1. 工作空间(我的是根目录)新建 go.work 文件 文件内容如下: go 1.21.0use (./tuchuang./tuchuang/testm ) 2. 添加go.mod文件 1. 包文件夹下 进入testm目录执行 go mod init testModule 2. 引用目…...
cortex-A7核PWM实验--STM32MP157
实验目的:驱动风扇,蜂鸣器,马达进行工作 目录 一,PWM相关概念 有源蜂鸣器和无源蜂鸣器 二,分析电路图,框图 三,分析RCC章节 1,确定总线连接 2,根据总线内容确定基…...
电工-学习电工有哪些好处
学习电工有哪些好处?在哪学习电工? 学习电工有哪些好处?在哪学习电工?学习电工可以做什么?优势有哪些? 学习电工可以做什么?学习电工有哪些好处? 就业去向:可在企业单位…...
Redis内存空间预估与内存优化策略:保障数据安全与性能的架构实践AIGC/AI绘画/chatGPT/SD/MJ
推荐阅读 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 资源分享 「java、python面试题」来自UC网盘app分享,打开手机app,额外获得1T空间 https://dr…...
Pandas数据分析教程-数据处理
pandas-02-数据清洗&预处理 B. 数据处理1. 重复值处理2. map逐元素转换3. 值替换4. 改变索引值5. 离散化与分箱6. 检测过滤异常值7. 排列与随机采样8. 根据类别生成one-hot向量,向量化文中用S代指Series,用Df代指DataFrame 数据清洗是处理大型复杂情况数据必不可少的步骤…...
php 多维数组排序,根据某一列排序(array_multisort()和array_column()联用)
array_multisort()和array_column()联用效果直接叠满,11>100 先来看下两个函数的介绍和用法 array_column(): 一般模式,不需要其中字段作为id,只需要提取val值 <?php // 可能从数据库中返回数组 $a [[id > 5698, first_name > Peter, last_name > G…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
