PlantUML——类图

news2025/1/19 11:35:51

背景

类图是UML模型中的静态视图,其主要作用包括:

  • 描述系统的结构化设计,显示出类、接口以及它们之间的静态结构和关系。
  • 简化对系统的理解,是系统分析与设计阶段的重要产物,也是系统编码和测试的重要模型依据。

在UML中,一个类通常由名称、属性和操作等构成,除此之外,类的构成还包含类的职责、约束和注释等信息。

使用

创建plantUML文件

在PlantUML中,要创建类图,首先我们要创建一个plantUML文件,选择class类型

创建完成后,会自动生成一个模板文件供我们参考。

类的定义

在UML的类图中,一般我们需要表示出一个类各个字段的可见性,UML中可见性和符号的对应关系如下:

可见性符号
public+
package private~
protected#
private-

在Java中,类用class关键字、接口使用interface关键字,而抽象类使用abstract class,枚举类使用enum。在PlantUML中,我们同样可用用class、interface、abstract class和enum来分别表示出类、接口、抽象类和枚举。

如下图所示,我们定义了Person类,其中Person类有id、name、birthday属性,并且它们的可见性为private,此外,含有getId、getName和getBirthday这些public方法。然后还定义了Car接口和List抽象类,最后定义了一个Size枚举类,这个枚举类包含SMALL、MEDIUM、LARGE和EXTRA_LARGE这些实例。

@startuml

class Person {
	- id
	- name
	- birthday
	+ getId()
	+ getName()
	+ getBirthday()
}

interface Car 

abstract class List

enum Size{
	SMALL
	MEIDUM
	LARGE
	EXTRA_LARGE
}

@enduml

在这里插入图片描述

类型关系

在UML中,类与类之间,包含以下6种关系:

关系plantUML表示描述
泛化(Generalization)>
实现(Realization)>
关联(Association)–>关联关系表示“拥有”,相比依赖关系的临时性和单向性,关联关系具有长期性、平等性(可双向),所以关联表示的关系比依赖更强。
聚合(Aggregation)–o聚合关系相对组合弱一些,在聚合关系中,整体与部分是可分离的,比如学校和学生,一个学校有多个学生,当学生毕业后,学校仍然存在,不受影响,而学生实体也不会因为离开学校而被销毁。
组合(Composition)–*在组合关系中,整体与部分是不可分离的,整体与部分的生命周期保持一致,比如人体和四肢,就是一种典型的组合关系。
依赖(Dependency)…>依赖表示使用关系,在java中,被依赖的类,一般以方法参数、局部变量和静态方法调用等形式出现

以下图为例,Student继承于Person类,然后Student的study方法中,会以Book作为参数,因此,Student和Book之间是依赖关系。然后List接口有两个实现——AbstractList和AbstractLinkedList,因此,它们之间是实现关系,而ArrayList继承自AbstractList,因此它们之间是泛化关系。最后,一个学校有多个学生,学校和学生之间是聚合关系。

@startuml

class Person {
	- id
	- name
	- birthday
	+ getId()
	+ getName()
	+ getBirthday()
}

class Student {
	- grade
	+ getGrade()
	+ study(Book book)
}

class Book {
}


Person <|-- Student

Student ..> Book

interface List
abstract class AbstractList
abstract class AbstractLinkedList

AbstractList ..|> List
AbstractLinkedList ..|> List

class ArrayList
class LinkedList

ArrayList --|> AbstractList
LinkedList --|> AbstractLinkedList

class School {
	- List<Student> student
}

Student --o School

@enduml

在这里插入图片描述

箭头方向

在上面的类图中,我们发现这个箭头方向有时候指向上面,有时候指向下面,当我们需要对箭头方向进行调整时,

可以使用up、down、left和right来表示。以下代码为例,表示School的上面是Person,School的右边是School

Student -up-|> Person
Student -right-o School
@startuml

class Person {
	- id
	- name
	- birthday
	+ getId()
	+ getName()
	+ getBirthday()
}

class Student {
	- grade
	+ getGrade()
	+ study(Book book)
}

class Book {
}


Student -up-|> Person
Student .left.> Book

interface List
abstract class AbstractList
abstract class AbstractLinkedList

AbstractList .up.|> List
AbstractLinkedList .up.|> List

class ArrayList
class LinkedList

ArrayList -up-|> AbstractList
LinkedList -up-|> AbstractLinkedList

class School {
	- List<Student> student
}

Student -right-o School

@enduml

在这里插入图片描述

颜色

在PlantUML中,我们可以对相关的元素去设置对应的颜色,其语法也很简单,就是在类的声明后面,加上颜色的定义,比如说我们想设置Person为红色,Student为绿色,那么定义如下:

class Person #red {
	- id
	- name
	- birthday
	+ getId()
	+ getName()
	+ getBirthday()
}

class Student #green {
	- grade
	+ getGrade()
	+ study(Book book)
}

对于类与类之间的连线,同样可以设置对应的颜色,比如我们希望类与类之间颜色为蓝色,那么可以在右边加上对应的颜色定义,示例如下:

Student -up-|> Person #blue
Student .left.> Book #blue
@startuml

class Person #red {
	- id
	- name
	- birthday
	+ getId()
	+ getName()
	+ getBirthday()
}

class Student #green {
	- grade
	+ getGrade()
	+ study(Book book)
}

class Book #6ACCEF {
}


Student -up-|> Person #blue
Student .left.> Book #blue

interface List #6ACCEF
abstract class AbstractList #6ACCEF
abstract class AbstractLinkedList #6ACCEF

AbstractList .up.|> List #blue
AbstractLinkedList .up.|> List #blue

class ArrayList #6ACCEF
class LinkedList #6ACCEF

ArrayList -up-|> AbstractList #blue
LinkedList -up-|> AbstractLinkedList #blue

class School #6ACCEF{
	- List<Student> student
}

Student -right-o School #blue

@enduml

在这里插入图片描述

包图

在我们的类图中,有时候这些类散落在不同的包下,因此,我们需要定义包图,来反映这些类归属于哪些包和这些包之间的依赖关系,包的声明很简单,使用package关键字接口,示例如下:

package com.yang {
}

声明包之后,我们将类的定义,写在对应的包代码块下,以表示这个类归属于当前包。

@startuml

package com.yang.model #orange{
 class Person #red {
	- id
	- name
	- birthday
	+ getId()
	+ getName()
	+ getBirthday()
 }
	class Student #green {
	- grade
	+ getGrade()
	+ study(Book book)
	}
}

package com.yang.valueobject #grey{
	class Book #6ACCEF {
	}
	class School #6ACCEF{
	- List<Student> student
	}
}
package java.util {
 interface List #6ACCEF
 abstract class AbstractList #6ACCEF
 abstract class AbstractLinkedList #6ACCEF
 class ArrayList #6ACCEF
 class LinkedList #6ACCEF
}

Student -up-|> Person #blue
Student .left.> Book #blue


AbstractList .up.|> List #blue
AbstractLinkedList .up.|> List #blue

ArrayList -up-|> AbstractList #blue
LinkedList -up-|> AbstractLinkedList #blue


Student -right-o School #blue


@enduml

在这里插入图片描述

参考文档

https://blog.csdn.net/zhangwei_david/article/details/125477021

https://blog.csdn.net/vitaviva/article/details/120639074

https://www.cnblogs.com/lanqiu5ge/p/9502419.html

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

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

相关文章

CSS一些小点 —— 12.7

1. box-sizing: border-box box-sizing 属性&#xff0c;默认值为 content-box box-sizing: border-box 使padding和border的值不会再影响元素的宽高&#xff1b;padding和border的值算在指定宽高的内部&#xff08;但是外边距依然算做外部&#xff09; 2. overflow: hidden …

Vue组件实现PDF图纸批量打印功能详解

在现代Web应用中&#xff0c;打印功能是一个常见的需求&#xff0c;尤其是在工程和设计领域&#xff0c;经常需要将图纸或文档打印出来。本文将介绍如何使用Vue.js实现一个简单的PDF图纸批量打印功能。 功能概述 该Vue组件的主要功能是&#xff1a; 展示一系列图纸&#xff0…

00. Nginx-知识网络

知识目录 语雀知识网络&#xff0c;点击“”-- 点击“”查看知识网络 01. Nginx-基础知识 02. Nginx-虚拟主机 03. Nginx-Web模块 04. Nginx-访问控制 05. Nginx-代理服务 06. Nginx-负载均衡 07. Nginx-动静分离 08. Nginx-平滑升级 09. Nginx-日志切割 10. Nginx-…

第八节、Bresenham直线插补【51单片机-TB6600驱动器-步进电机教程】

摘要&#xff1a;前面章节主要介绍单个电机控制&#xff0c;本节内容介绍两个电机完成直线插补运动 一、 Bresenham直线算法介绍 Bresenham直线算法由Jack Elton Bresenham于1962年在IBM开发&#xff0c;最初用于计算机显示直线&#xff0c;它确定应该选择的n维光栅的点&#…

使用数据层进行数据生命周期管理

作者&#xff1a;来自 Elastic Stef Nestor Elasticsearch 7.10 使配置数据生命周期变得不再那么复杂。在这篇博文中&#xff0c;我将介绍一些变化、如何使用它们以及一些最佳实践。 数据生命周期可以包含很多阶段&#xff0c;因此我们将涉及&#xff1a; 将集群划分为层&…

大数据-244 离线数仓 - 电商核心交易 ODS层 数据库结构 数据加载 DataX

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…

【RK3562J开发笔记】MCP2518FD外部CAN-FD控制器的调试方法

“SPI转CAN-FD”是嵌入式开发领域的常用方法&#xff0c;它极大地促进了不同通信接口之间的无缝连接&#xff0c;并显著降低了系统设计的复杂性。飞凌嵌入式依托瑞芯微RK3562J处理器打造的OK3562J-C开发板因为内置了SPI转CAN-FD驱动&#xff0c;从而原生支持这一功能。该开发板…

OpenCV 图像基本操作

OpenCV快速通关 第一章&#xff1a;OpenCV 简介与环境搭建 第二章&#xff1a;OpenCV 图像基本操作 OpenCV 图像基本操作 OpenCV快速通关第二章&#xff1a;OpenCV 图像基本操作一、相关结构体与函数介绍&#xff08;一&#xff09;cv::Mat 结构体&#xff08;二&#xff09;c…

QT通过在线安装器安装【详细】

在线安装器地址&#xff1a; 官方在线安装器&#xff1a;Index of /official_releases/online_installers (qt.io) 通过命令行启动安装页面 直接双击qt安装程序&#xff0c;在线安装会非常慢&#xff0c;甚至安装失败&#xff0c;所以通过命令行页面启动安装页面。点击wind…

保姆级教学 uniapp绘制二维码海报并保存至相册,真机正常展示图片二维码

一、获取二维码 uni.request({url: https://api.weixin.qq.com/wxa/getwxacode?access_token${getStorage("token")},responseType: "arraybuffer",method: "POST",data: {path: "/pages/index/index"},success(res) {// 转换为 Uint…

基于stm23的智慧宿舍系统 (DAY10)_小程序

好久没记录开发进度了&#xff0c;今天小程序差不多开发完了&#xff0c;UI这块算是比较常见了&#xff0c;主要功能是能连接onenet查看设备上传的数据&#xff0c;同时也能对设备进行一些控制下面是几个主要的函数&#xff0c;功能比较简单 wx.request({url: ${apiBaseUrl}/t…

dockerfile部署前后端(vue+springboot)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言0.环境说明和准备1.前端多环境打包1.1前端多环境设置1.2打包 2.后端项目多环境配置以及打包2.1后端多环境配置2.2项目打包 3.文件上传4.后端镜像制作4.1dockerf…

Tomcat使用教程

下载地址&#xff1a;https://tomcat.apache.org/ 配置环境变量 变量名: CATALINA_HOME 变量值: D:\tools\apache-tomcat-9.0.97 Path: %CATALINA_HOME%\bin 启动Tomcat(打开命令提示符) startup.bat 解决乱码问题(打开conf\logging.properties) java.util.logging.Conso…

vim实用命令整理(常用的命令)

本章教程,总结自己平时使用vim过程中,经常使用的命令,分享给大家。 一、高频使用 i:进入插入模式(光标处插入) a:进入插入模式(光标后插入) esc:返回普通模式 ::进入命令模式 :w:保存 :q:退出 :wq:保存并退出 :q!:强制退出不保存 :e filename:打开文件 :set n…

UiPath API接口说明

Swagger网址 私有云网址&#xff08;企业版&#xff09; https://企业/swagger/index.html 公有云网址&#xff08;社区版&#xff09; https://cloud.uipath.com/linan/LinanZhang/orchestrator_/swagger/index.html#/ 常见问题 Swagger页面测试请求时报错“You are not a…

17. Threejs案例-Three.js创建多个立方体

17. Threejs案例-Three.js创建多个立方体 实现效果 知识点 WebGLRenderer (WebGL渲染器) WebGLRenderer 是 Three.js 中用于渲染 WebGL 场景的核心类。它负责将场景中的对象渲染到画布上。 构造器 new THREE.WebGLRenderer(parameters) 参数类型描述parametersObject可选…

【解决pycharm下site-packages文件标记为红色的问题】

怎么解决pycharm下site-packages文件标记为红色的问题 这是一个pycharm无法识别本地site-packages问题答案解释器设置路径如下&#xff1a; 这是一个pycharm无法识别本地site-packages问题 最近正在搭建一个python3requestsunittestHTMLTestRunner接口测试框架&#xff0c;发现…

高中数学:计数原理-排列组合

文章目录 一、排列排列数例题 二、组合组合数例题 三、使用方法总结 一、排列 排列数 例题 二、组合 组合数 例题 三、使用方法总结 组合&#xff1a;从n个元素中抽取m个元素&#xff0c;不排序&#xff0c;则用组合计算 排列&#xff1a;从n个元素中抽取m个元素&#xff0c;再…

软件设计师下午题知识点

下午题一&#xff1a;数据流图DFD 数据流图平衡原则 此题注意两个平衡&#xff1a; 1、父图与子图的平衡&#xff08;顶层图、0层图&#xff09;&#xff1b;2、子图内平衡&#xff09;遵循自顶向下&#xff0c;从抽象到具体 结构化分析 在结构化分析方法中&#xff0c;数…

C++哈希(一)

1.底层结构 顺序结构以及平衡中&#xff0c;元素关键码与其存储位置之间没有相对应的关系&#xff0c;因此在查找一个元素时&#xff0c;要经过关键码的多次比较。顺序查找的时间复杂度为O(N)。 理想的搜索方法&#xff1a;可以不经过比较&#xff0c;依次直接从表中直接搜索…