PlantUML文本绘制类图

news2025/1/18 20:21:53

记录下文本绘制类图的语法
参考 https://juejin.cn/post/6844903731293585421

类的UML表示

使用UML表示一个类,主要由三部分组成。类名、属性、方法。其中属性和方法的访问修饰符用 - 、# 、+ 表示 private、protected、public。
如图所示,表示A类有一个private属性,protected 构造函数和public方法。

@startuml

class A{
	- String field
	+ A()
	# void method()
}
' 单行备注
note right: 这是测试类 A

class B{
	- String field
	+ B()
	# void method()
}
' 多行备注
note left
Hello
World
end note

@enduml

在这里插入图片描述

类的关系

在面向对象语言中,类的关系有很多种,可以概括为三类:泛化、依赖、关联。

泛化

泛化指父类跟子类的关系,表示is-a的关系。如父类是抽象类或普通类,则这种关系叫继承。如,父类是接口,则这种关系叫实现。UML中,继承和实现由不同的标记表示。

继承

PlantUML用 --|> 表示继承关系。实线和三角形的抽象表示,指向谁,即继承谁。

@startuml

    class A
    abstract B

    ' A 继承 B
    A --|> B

@enduml

在这里插入图片描述

实现

PlantUML用 …|> 表示实现关系。虚和三角形的抽象表示,指向谁,即实现谁。

@startuml

    class A
    interface C

    ' A 实现 C
    A ..|> C

@enduml

在这里插入图片描述

依赖:B类作为A类的参数、局部变量、静态方法调用

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

@startuml

    class A
    class B

    ' A 依赖 B
    A ..> B

@enduml

在这里插入图片描述

关联:对象间的引用关系

关联关系,即对象之间的引用关系。常使用类的属性表达。

单向关联:A类有B类属性

B类作为A类的属性,表示A类与B类有关联。 PlantUML用 --> 表示单向关联。实线线和箭头的抽象表示,指向谁,即关联谁。

@startuml

	class A{
		- B b
	}
	class B

	' A 关联 B
	A --> B

@enduml

在这里插入图片描述

双向关联:A、B类互相有对方属性

B类作为A类的属性同时,A类也是B类的属性,表示双向关联。 PlantUML用 – 表示双向关联。或者用<–>。

@startuml

	class A{
		- B b
	}
	class B{
		- A a
	}

	' A 关联 B
	A -- B

@enduml

在这里插入图片描述

自关联:A类有A类的属性

A类关联A类自身。常见于单例模式。

@startuml

	class A{
		- A a
	}
	

	' A 关联 A
	A --> A

@enduml

在这里插入图片描述

聚合:学生之于班级

在关联关系的基础上,延伸出聚合关系,强的关联关系,表示has-a关系。整体与部分的关系,部分不依赖于整体,可独立存在。常用于成员变量。
如;汽车和轮胎的关系,轮胎可作为独立的商品出售。
PlantUML用 o-- 表示聚合关系。实线和空心菱形的抽象表示,指向谁,表示谁是整体。

@startuml

	class Car{
		- List<Wheel> wheels
	}
	class Wheel

	' Car 关联 Wheel
	Car "1" o-- "4" Wheel

@enduml

在这里插入图片描述

图中数字1和4也表示一对多关联。N对N同理。

组合:翅膀之于鸟

在关联关系的基础上,延伸出另外一种关联关系,组合关系,表示contains-a关系。整体与部分的关系,部分依赖于整体,不可独立存在。常用于成员变量。
如:身体和动作的关系。
PlantUML用 *-- 表示聚合关系。实线和实心菱形的抽象表示,指向谁,表示谁是整体。

@startuml

	class Body{
		- List<Action> actions
	}
	class Action

	' Body 关联 Action
	Body "1" *-- "N" Action

@enduml

在这里插入图片描述

排版

相比较其他的UML软件或插件。PlantUML的优势在于,存储的是文本文件,可以方便的进行团队协作以及高度可定制化的依赖关系。但是,最大的缺点在于,排版是通过插件自动生成的,排版效果不尽人意。因此,PlantUML提供四个关键字 up、down、left、right。指定类与类之间的相对关系。

default

箭头向左时,被指向对象在上; 箭头向右时,被指向对象在下。

@startuml

class A1
class B1

A1 --> B1

class A2
class B2
A2 <-- B2

@enduml

在这里插入图片描述

up

使用up时,被指向对象在上。

@startuml

class A1
class B1

A1 -up-> B1

class A2
class B2
A2 <-up- B2

@enduml

在这里插入图片描述

down

使用down时,被指向对象在下。

@startuml

class A1
class B1

A1 -down-> B1

class A2
class B2
A2 <-down- B2

@enduml

在这里插入图片描述

left

使用left时,被指向对象在左。

@startuml

class A1
class B1

A1 -left-> B1

class A2
class B2
A2 <-left- B2

@enduml

在这里插入图片描述

right

使用right时,被指向对象在右。

@startuml

class A1
class B1

A1 -right-> B1

class A2
class B2
A2 <-right- B2

@enduml

在这里插入图片描述

@startuml

package "Classic Collections" #yellow{
  Object <|-- ArrayList
}

package net.sourceforge.plantuml {
  Object <|-- Demo1
  Demo1 *- 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
}

在这里插入图片描述

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

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

相关文章

1007 Maximum Subsequence Sum

Given a sequence of K integers { N1​, N2​, ..., NK​ }. A continuous subsequence is defined to be { Ni​, Ni1​, ..., Nj​ } where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements. For example, g…

电商数据采集和分析

什么是电商数据采集&#xff1f; 数据采集一般是指利用人工或者爬虫技术&#xff0c;对电商平台上的公开数据进行抓取采集&#xff0c;采集完成后&#xff0c;去除客户不需要的无关的杂质数据&#xff0c;再进行交付。 电商数据采集要注意哪些点&#xff1f; 首先是采集平台&…

vue 简单实验 自定义组件 局部注册

1.概要 2.代码 <html> </html> <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <body><div id"counter"><component-a></component-a></div> </body&g…

【方案】安防监控EasyCVR智慧工地视频监管风险预警平台的应用

智慧工地方案是一种结合现代化技术与工地管理实践的创新型解决方案。它通过实时监控、数据分析、人工智能等技术手段&#xff0c;使工地管理更加高效、智能化。在建设智慧工地的过程中&#xff0c;除了上述提到的利用物联网技术实现设备互联、数据采集及分析以外&#xff0c;还…

快捷支付和网上支付、协议支付都有哪些区别?

协议支付是指客户通过与银行签订协议&#xff0c;将客户的银行账户连接到商户的相关账户&#xff0c;并在支付时直接输入相关账户的支付密码。通过与特定商户共同为客户提供的电子支付方式&#xff0c;客户在中国银行开立的银行账户与客户在特定商户的用户ID绑定&#xff0c;并…

华为“鸿鹄之志”:2025年L4,2030 年实现 L5,全场景AI指日可待

在第七届未来网络发展大会上&#xff0c;华为公司的彭松发表了题为《打造端到端 AI 网络&#xff0c;打通全场景 AI 能力》的主题演讲。他指出&#xff0c;AI 时代网络创新包括 Network for AI 和 AI for Network 两个方面的目标。 前者旨在构建支持AI业务的网络&#xff0c;实…

冠达管理:股票基本知识有哪些?建议新手了解!

股票教育是存在较大危险的&#xff0c;所以新手出资者在进行股票买卖之前主张先了解股票基本常识。那么股票基本常识有哪些&#xff1f;主张新手了解!下面就为大家剖析&#xff1a; 1、股票含义 股票是股份有限公司所有权的一部分&#xff0c;也是发行的所有权凭据&#xff0c…

HTTP协议初识·上篇

目录 认识URL urlencode和urldecode 如何编码解码和验证过程 一个基本的网络服务器的流程 代码验证请求与响应 准备工作 HTTPServer.hpp Protocol.hpp makefile 1请求 HTTPServer.hpp 1.0函数handlerHttp-基本流程 再次处理 HttpServer.cc(新建文件) 测试1 -- 请…

JS的事前循环Event Loop

前言 javascript是单线程脚本语言&#xff0c;并非指js只有一个线程&#xff0c;而是同一时刻只能有一个线程在工作。 js异步如何实现 如果 JS 中不存在异步&#xff0c;只能自上而下执行&#xff0c;如果上一行解析时间很长&#xff0c;那么下面的代码就会被阻塞。 对于用户…

【直接收藏】前端 VUE 高阶面试题(三)

86.说说vue生命周期&#xff0c;发送请求在生命周期的哪个阶段&#xff0c;为什么不可以是beforeMount&#xff0c;mounted中 回答&#xff1a; 1、vue的生命周期 1&#xff09;、生命周期是什么&#xff1f; Vue 实例有一个完整的生命周期&#xff0c;也就是从开始创建、初始…

C++信息学奥赛1148:连续出现的字符

代码题解&#xff1a; #include <iostream> #include <string> using namespace std; int main() {int n;// 输入一个整数ncin>>n;cin.ignore();string str1;// 输入一行字符串getline(cin,str1);for(int i0;i<str1.length();i){int a0;for(int ji;j<…

自定义拖拽功能,上下拖拽改变盒子高度

核心在于监听鼠标的move来改变div的高度&#xff0c;抽成了组件 <template><div ref"container" class"drag"><z-tooltip v-if"isShowIcon" effect"dark" content"格式化" placement"top-start"&…

Windows11 安装 nvm node版本管理工具

在 Windows 11 上安装并配置 NVM 与 Node.js 版本管理工具 引言&#xff1a; Node.js 是一款强大的开发工具&#xff0c;而版本管理工具 NVM 则可以帮助我们在不同的项目中灵活地切换和管理 Node.js 版本。本篇博客将为大家介绍如何在 Windows 11 操作系统上安装 NVM&#xff…

【Go Web 篇】从零开始:构建最简单的 Go 语言 Web 服务器

随着互联网的迅速发展&#xff0c;Web 服务器成为了连接世界的关键组件之一。而在现代编程语言中&#xff0c;Go 语言因其卓越的性能和并发能力而备受青睐。本篇博客将带你从零开始&#xff0c;一步步构建最简单的 Go 语言 Web 服务器&#xff0c;让你对 Go 语言的 Web 开发能力…

什么是确认测试报告?确认测试报告的用途和周期?

确认测试又称有效性测试&#xff0c;其任务是验证软件的功能和性能及其他特性是否与用户的要求一致。确认测试需要提供的资料包括&#xff1a; 软件需求规格说明书&#xff1a;列出了软件的功能和性能要求&#xff0c;是确认测试的依据。 确认测试计划&#xff1a;制定了确认…

JUC集合、map线程安全

文章目录 在并发场景下&#xff0c;集合产生的问题解决方案VectorsynchronizedListCopyOnWriteArrayList写时赋值技术什么是写实复制技术&#xff1a; HashSet线程不安全问题解决办法 HashMap线程不安全总结特点 在并发场景下&#xff0c;集合产生的问题 现在下面这段代码&…

视频分割合并工具说明

使用说明书&#xff1a;视频分割合并工具 欢迎使用视频生成工具&#xff01;本工具旨在帮助您将视频文件按照指定的规则分割并合并&#xff0c;以生成您所需的视频。 本程序还自带提高分辨率1920:1080&#xff0c;以及增加10db声音的功能 软件下载地址 https://github.com/c…

kafka--技术文档--spring-boot集成基础简单使用

阿丹&#xff1a; 查阅了很多资料了解到&#xff0c;使用了spring-boot中整合的kafka的使用是被封装好的。也就是说这些使用其实和在linux中的使用kafka代码的使用其实没有太大关系。但是逻辑是一样的。这点要注意&#xff01; 使用spring-boot整合kafka 1、导入依赖 核心配…

【DEVOPS】Jenkins使用问题 - 控制台输出乱码

0. 目录 1. 问题描述2. 解决方案3. 最终效果4. 总结 1. 问题描述 部门内部对于Jenkins的使用采取的是Master Slave Work Node的方式&#xff0c;即作为Master节点的Jenkins只负责任务调度&#xff0c;具体的操作由对应的Slave Work Node去执行。 最近团队成员反馈一个问题&a…

高忆管理股票分析:1年期LPR下调10个基点 融资成本稳中有降

8月21日&#xff0c;中国人民银行授权全国银行间同业拆借中心发布&#xff0c;最新借款商场报价利率(LPR)为&#xff1a;1年期种类报3.45%&#xff0c;较上一期下降10个基点&#xff1b;5年期以上种类报4.20%&#xff0c;与前一期相等。 上海高忆私募基金&#xff08;百度搜索高…