PlantUML——类图

背景

类图是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这些实例。

@startumlclass Person {- id- name- birthday+ getId()+ getName()+ getBirthday()
}interface Car abstract class Listenum Size{SMALLMEIDUMLARGEEXTRA_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,因此它们之间是泛化关系。最后,一个学校有多个学生,学校和学生之间是聚合关系。

@startumlclass Person {- id- name- birthday+ getId()+ getName()+ getBirthday()
}class Student {- grade+ getGrade()+ study(Book book)
}class Book {
}Person <|-- StudentStudent ..> Bookinterface List
abstract class AbstractList
abstract class AbstractLinkedListAbstractList ..|> List
AbstractLinkedList ..|> Listclass ArrayList
class LinkedListArrayList --|> AbstractList
LinkedList --|> AbstractLinkedListclass School {- List<Student> student
}Student --o School@enduml

在这里插入图片描述

箭头方向

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

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

Student -up-|> Person
Student -right-o School
@startumlclass Person {- id- name- birthday+ getId()+ getName()+ getBirthday()
}class Student {- grade+ getGrade()+ study(Book book)
}class Book {
}Student -up-|> Person
Student .left.> Bookinterface List
abstract class AbstractList
abstract class AbstractLinkedListAbstractList .up.|> List
AbstractLinkedList .up.|> Listclass ArrayList
class LinkedListArrayList -up-|> AbstractList
LinkedList -up-|> AbstractLinkedListclass 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
@startumlclass 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 #blueinterface List #6ACCEF
abstract class AbstractList #6ACCEF
abstract class AbstractLinkedList #6ACCEFAbstractList .up.|> List #blue
AbstractLinkedList .up.|> List #blueclass ArrayList #6ACCEF
class LinkedList #6ACCEFArrayList -up-|> AbstractList #blue
LinkedList -up-|> AbstractLinkedList #blueclass School #6ACCEF{- List<Student> student
}Student -right-o School #blue@enduml

在这里插入图片描述

包图

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

package com.yang {
}

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

@startumlpackage 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 #6ACCEFabstract class AbstractList #6ACCEFabstract class AbstractLinkedList #6ACCEFclass ArrayList #6ACCEFclass LinkedList #6ACCEF
}Student -up-|> Person #blue
Student .left.> Book #blueAbstractList .up.|> List #blue
AbstractLinkedList .up.|> List #blueArrayList -up-|> AbstractList #blue
LinkedList -up-|> AbstractLinkedList #blueStudent -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.mzph.cn/pingmian/63637.shtml

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

相关文章

【Java知识】Java进阶-如何开启远程调式

java远程调试 概述Java远程调试的开启与底层原理开启Java远程调试底层原理 JVM参数 概述 Java远程调试的开启与底层原理 开启Java远程调试 Java远程调试允许开发者在本地IDE&#xff08;如Eclipse、IntelliJ IDEA等&#xff09;中调试运行在远程服务器上的Java应用程序。以下…

入选国家数据局案例!浙江“一体化智能化公共数据平台”总体架构详解~

国家数据局在2024中国国际大数据产业博览会上发布了首批50个数字中国建设典型案例。案例涉及数据基础设施、数据资源、数字技术创新、数字政府、数字经济、数字社会、数字文化、数字生态文明等领域&#xff0c;集中反映了近年来数字中国建设的实践和成效。 其中&#xff0c;由…

vscode IntelliSense Configurations

IntelliSense 是一个强大的代码补全和代码分析功能&#xff0c;它可以帮助开发者提高编程效率。图中显示的是 VSCode 的 IntelliSense 配置界面&#xff0c;具体配置如下&#xff1a; Compiler path&#xff08;编译器路径&#xff09;: 这里指定了用于构建项目的编译器的完整路…

同三维TL200H2S6 6机位精品教育录播主机

录制点播、直播导播、互动、音频处理器、中控等多功能为一体 8路视频输入:6路SDI1路HDMI1(4K30)1路(3选1:HDMI2/2路VGA) 2路视频输出&#xff1a;1路HDMI1(4K30)1路&#…

欢乐斗地主案例

1&#xff0c;创建对象 package anlidoudizhu;public class pai implements Comparable<pai> {private Double value;private String name;Overridepublic int compareTo(pai o) {return -Double.compare(this.value,o.value);}//升序排序&#xff0c;treeset集合public…

技术型企业如何高效搭建企业博客以增强品牌影响力和市场竞争力

在数字化时代&#xff0c;技术型企业面临着激烈的市场竞争和快速变化的行业环境。为了在这场竞争中脱颖而出&#xff0c;企业需要寻找新的营销渠道和品牌建设工具。企业博客作为一种低成本、高效率的在线内容平台&#xff0c;已经成为技术型企业增强品牌影响力和市场竞争力的重…

go-zero(十二)消息队列

go zero 消息队列 在微服务架构中&#xff0c;消息队列主要通过异步通信实现服务间的解耦&#xff0c;使得各个服务可以独立发展和扩展。 go-zero中使用的队列组件go-queue&#xff0c;是gozero官方实现的基于Kafka和Beanstalkd 的消息队列框架,我们使用kafka作为演示。 一、…

【JAVA高级篇教学】第二篇:使用 Redisson 实现高效限流机制

在高并发系统中&#xff0c;限流是一项非常重要的技术手段&#xff0c;用于保护后端服务&#xff0c;防止因流量过大导致系统崩溃。本文将详细介绍如何使用 Redisson 提供的 RRateLimiter 实现分布式限流&#xff0c;以及其原理、使用场景和完整代码示例。 目录 一、什么是限流…

基于卷积神经网络的Caser算法

将一段交互序列嵌入到一个以时间为纵轴的平面空间中形成“一张图”后&#xff0c;基于卷积序列嵌入的推荐&#xff08;Caser&#xff09;算法利用多个不同大小的卷积滤波器&#xff0c;来捕捉序列中物品间的点级&#xff08;point-level&#xff09;、联合的&#xff08;union-…

ubuntu下的chattts 学习5:Example: self introduction

代码 import ChatTTS import torch import torchaudiochat ChatTTS.Chat() chat.load(compileFalse) # Set to True for better performance ################################### inputs_en """ chat T T S is a text to speech model designed for dialogu…

【银河麒麟高级服务器操作系统】修改容器中journal服务日志存储位置无效—分析及解决方案

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://documentkylinos.cn 服务器环境以及配置 【机型】 整机类型/架构&am…

HTML:表格重点

用表格就用table caption为该表上部信息&#xff0c;用来说明表的作用 thead为表头主要信息&#xff0c;效果加粗 tbody为表格中的主体内容 tr是 table row 表格的行 td是table data th是table heading表格标题 &#xff0c;一般表格第一行的数据都是table heading

[创业之路-187]:《华为战略管理法-DSTE实战体系》-1-从UTStarcom的发展历程,如何辩证的看企业初期发展太顺利中的危机

目录 一、UTStarcom&#xff08;UT斯达康&#xff09;的发展历程 1、创立与初期发展 2、快速成长与上市 3、技术创新与业务拓展 4、战略调整与持续发展 二、从UTStarcom的发展历程&#xff0c;如何辩证的看企业初期发展太顺利中的危机 1、企业初期发展的顺利表现 2、顺…

ubuntu系统生成SSL证书配置https

自签名【Lets Encrypt】的测试证书&#xff0c;有效期三个月。 第一步&#xff1a;安装acme&#xff0c;如果没有安装git&#xff0c;需要提前安装 下载came资源 git clone https://github.com/Neilpang/acme.sh.git 无法访问&#xff0c;可以试用gitee的资源&#xff0c;安…

CentOS 7 环境下常见的操作和配置

目录 1. CentOS 7 中的 vsftpd 配置与使用 安装与启动 vsftpd 配置 vsftpd&#xff08;/etc/vsftpd/vsftpd.conf&#xff09; 常见命令 2. 使用 yum 包管理器 3. 安全性与防火墙配置 开放端口 4. 使用 systemd 管理服务 5. SELinux 配置 查看 SELinux 状态 临时禁用…

《AI教学能力:开启教育新纪元》

一、摘要 AI 在教育领域的应用日益广泛&#xff0c;对教学能力产生了深远影响。本文将深入探讨 AI 教学能力的核心技术、实际应用、教学模式与策略、全球实践以及未来趋势&#xff0c;为教育的现代化发展提供参考。 摘要&#xff1a; AI 在教育领域的应用及其对教学能力的影响…

【信息系统项目管理师】第10章:项目进度管理过程详解

文章目录 一、规划进度管理1、输入2、工具与技术3、输出 二、定义活动1、输入2、工具与技术3、输出 三、排列活动顺序1、输入2、工具与技术3、输出 四、估算活动持续时间1、输入2、工具与技术3、输出 五、制订进度计划1、输入2、工具与技术3、输出 六、控制进度1、输入2、工具与…

域渗透入门靶机之HTB-Cicada

easy难度的windows靶机 信息收集 端口探测 nmap -sT --min-rate 10000 -p- 10.10.11.35 -oA ./port 发现开放了53&#xff0c;88&#xff0c;389等端口&#xff0c;推测为域控 进一步信息收集&#xff0c;对爆破的端口进行更加详细的扫描 小tips&#xff1a;对于众多的端口&…

pgsql中如何设计维度表、度量表、事实表、大宽表

在 PostgreSQL 中设计维度表、度量表、事实表和大宽表需要遵循数据仓库建模的最佳实践。以下是如何设计这些表的详细步骤&#xff0c;包括建模的结构、示例 SQL 代码以及注意事项。 1. 维度表 (Dimension Table) 设计步骤&#xff1a; 确定维度&#xff1a;识别需要的维度&am…

单片机:实现贪吃蛇(附带源码)

单片机实现贪吃蛇游戏是一个较为复杂的项目&#xff0c;涉及到硬件控制、程序设计、图形显示、输入处理等方面。这里我们以基于8051单片机为例&#xff0c;详细介绍如何通过硬件和软件来实现一个简单的贪吃蛇游戏。为了让解释更加清晰&#xff0c;我们将逐步分析贪吃蛇的游戏逻…