【PlantUML系列】类图(一)

news2024/12/26 21:16:36

目录

一、类

二、接口

三、抽象类

四、泛型类

五、类之间的关系

六、添加注释

七、包图

八、皮肤参数


一、类

使用class关键字定义类,类名后跟大括号,声明类的属性和方法。

属性:格式为{visibility} attributeName : AttributeType

  • {visibility}:成员的可见性,可以是-(私有)、#(受保护)、+(公共)、~(包级私有)。
  • attributeName:属性的名称。
  • AttributeType:属性的类型,可以是任何有效的数据类型,如intStringboolean等。

方法:格式为{visibility} methodName(param1 : Type1, param2 : Type2, ...) : ReturnType;

  • {visibility}:成员的可见性,可以是-(私有)、#(受保护)、+(公共)、~(包级私有)。
  • methodName:方法的名称。
  • param1 : Type1, param2 : Type2, ...:方法的参数列表,每个参数由名称和类型组成,多个参数之间用逗号分隔。
  • ReturnType:方法的返回类型,可以是任何有效的数据类型,如intStringboolean等,如果方法没有返回值,则可以省略返回类型。
@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"表示,其中nm分别表示聚合的两端的基数。表示整体与部分的关系,部分可以独立于整体存在。聚合是关联的一种,表示弱的“拥有”关系。
  • 组合:使用"n" o-- "m"表示,其中o表示实心菱形,表示强拥有关系。也表示整体与部分的关系,但部分不能独立于整体存在。组合是关联的一种,表示强的“拥有”关系,整体的生命周期结束时,部分的生命周期也会结束。
@startuml

class 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

九、示例

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

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

相关文章

VR眼镜可视化编程:开启医疗信息系统新纪元

一、引言 随着科技的飞速发展&#xff0c;VR 可视化编程在医疗信息系统中的应用正逐渐成为医疗领域的新趋势。它不仅为医疗教育、手术培训、疼痛管理等方面带来了新的机遇&#xff0c;还在提升患者体验、推动医疗信息系统智能化等方面发挥着重要作用。 在当今医疗领域&#xf…

IS-IS的原理

IS-IS的基本概念&#xff1a; 概述&#xff1a; IS-IS&#xff0c;中间系统到中间系统&#xff0c;是ISO国际标准化组织为它的无连接网络协议设计的一种动态路由协议 IS-IS支持CLNP网络和IP网络&#xff0c;采用数据链路层封装&#xff0c;区别于ospf只支持IP网络&#xff0…

华为ACL应用笔记

1、基本ACL 2000-2999 基本ACL&#xff08;Access Control List&#xff0c;访问控制列表&#xff09;是一种网络安全技术&#xff0c;它根据源IP地址、分片信息和生效时间段等信息来定义规则&#xff0c;对报文进行过滤。 规则&#xff1a; ACL由一系列规则组成&#xff0c;每…

点云标注软件SUSTechPOINTS的安装和使用,自测win10和ubuntu20.04下都可以用

点云标注软件SUSTechPOINTS的安装和使用 github项目源码&#xff1a;https://github.com/naurril/SUSTechPOINTS gitee源码以及使用教程&#xff1a;https://gitee.com/cuge1995/SUSTechPOINTS 首先拉取源码 git clone https://github.com/naurril/SUSTechPOINTS最好是在cond…

大模型评测中的基础指标都包括哪些

大语言模型&#xff08;LLM&#xff09;评测是LLM开发和应用中的关键环节。目前评测方法可以分为人工评测和自动评测&#xff0c;其中&#xff0c;自动评测技术相比人工评测来讲&#xff0c;具有效率高、一致性好、可复现、鲁棒性好等特点&#xff0c;逐渐成为业界研究的重点。…

SystemUI修改状态栏电池图标样式为横屏显示(以Android V为例)

SystemUI修改状态栏电池图标样式为横屏显示(以Android V为例) 1、概述 在15.0的系统rom产品定制化开发中&#xff0c;对于原生系统中SystemUId 状态栏的电池图标是竖着显示的&#xff0c;一般手机的电池图标都是横屏显示的 可以觉得样式挺不错的&#xff0c;所以由于产品开发…

最长最短单词

最长最短单词 C语言实现C实现Java实现Python实现 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 输入1行句子&#xff08;不多于200个单词&#xff0c;每个单词长度不超过100&#xff09;&#xff0c;只包含字母、空格和逗号。单词由至少一…

C++【PCL】点云数据平移 旋转,对点云进行刚体变化

//头文件 #include <iostream>#include <pcl/point_cloud.h>#include<pcl/io/pcd_io.h>#include <pcl/common/transforms.h> #include <pcl/io/ply_io.h>//主函数int main() {pcl::PointCloud<pcl::PointXYZ>::Ptr source_cloud(new pcl::…

2024第六届金盾信安杯Web 详细题解

比赛一共4道Web题,比赛时只做出三道,那道文件上传没有做出来,所以这里是另外三道题的WP 分别是 fillllll_put hoverfly ssrf fillllll_put 涉及: 绕过exit() 死亡函数 php://filter 伪协议配合base64加解密 一句话木马 题目源码&#xff1a; $content参数在开头被…

006 MATLAB编程基础

01 M文件 MATLAB输入命令有两种方法&#xff1a; 一是在MATLAB主窗口逐行输入命令&#xff0c;每个命令之间用分号或逗号分隔&#xff0c;每行可包含多个命令。 二是将命令组织成一个命令语句文集&#xff0c;使用扩展名“.m”&#xff0c;称为M文件。它由一系列的命令和语句…

Delphi Web前端开发教程(9):基于TMS WEB Core框架

3、REST Servers服务端(后端)框架 REST服务端特点&#xff1a; – 为远程资源提供一个REST API接口。也可以为其他网络内容提供服务&#xff1b; – 包括在Delphi Enterprise & Architect企业版和架构师版中的RAD服务器、DataSnap、WebBroker&#xff1b; – 开源框架&a…

SPC三种判定准则的算法

1.连续6个点递增或递减 //传入数据列表 //返回连续X个及以上递增或递减的数组下标int n = array.Length; int X = X_in; List<int> regions_start = new List<int>(); List<int> regions_end = new List<int>();if(Open){for (int i = 0; i < n - (…

AI一键生成原创圣诞印花图案

一、引言 随着科技的飞速发展&#xff0c;AI 已经深入到我们生活和工作的各个角落&#xff0c;为创意设计领域带来了前所未有的变革。在圣诞即将来临之际&#xff0c;想要设计独特的圣诞印花图案却又担心缺乏灵感或专业技能&#xff1f;别担心&#xff0c;千鹿 AI 为我们提供了…

Ubuntu的pip怎么用

第一步&#xff1a;查看python3版本 第二步&#xff1a;安装pip 第三步&#xff1a;可以尝试使用pip list查看 也可以尝试安装 下面这条命令可以设置永久源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

基于Matlab三点雨流计数法的载荷时间历程分析与循环疲劳评估

随着工程领域中机械设备和结构系统的复杂性不断增加&#xff0c;疲劳分析成为评估其可靠性与使用寿命的关键环节。载荷时间历程数据在疲劳分析中扮演着重要角色&#xff0c;而雨流计数法作为经典的循环计数方法&#xff0c;能够有效地从载荷时间历程中提取疲劳载荷循环信息。本…

帝可得-策略管理

策略管理 需求说明 策略管理主要涉及到二个功能模块&#xff0c;业务流程如下&#xff1a; 新增策略: 允许管理员定义新的策略&#xff0c;包括策略的具体内容和参数&#xff08;如折扣率&#xff09;策略分配: 将策略分配给一个或多个售货机。 #mermaid-svg-PSQOJMLJqVGn3W…

【数据结构】手搓链表

一、定义 typedef struct node_s {int _data;struct node_s *_next; } node_t;typedef struct list_s {node_t *_head;node_t *_tail; } list_t;节点结构体&#xff08;node_s&#xff09;&#xff1a; int _data;存储节点中的数据struct node_s *_next;&#xff1a;指向 node…

嵌入式 C 编程必备(7):const 关键字 —— 打造稳定的常量空间

目录 一、const关键字的基本含义与用法 1.1. 修饰基本数据类型 1.2. 修饰指针 1.3. 修饰数组 1.4. 修饰结构体 二、const关键字在嵌入式编程中的优势 2.1. 提升代码可读性 2.2. 增强代码安全性 2.3. 优化内存使用 2.4. 促进模块化设计 2.5. 支持静态分析和测试 三、…

Day28 买卖股票的最佳时机 跳跃游戏 跳跃游戏 II K 次取反后最大化的数组和

贪心算法 part02 122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 求最大利润 将每天的正利润加和 public int maxProfit(int[] prices) {int totalPrices 0;for(int i0;i<prices.length;i){if(i<prices.length-1&&prices[i1]>prices[…

【专题】计算机网络之运输层(传输层)

1. 运输层协议概述 1.1 进程之间的通信 (1) 运输层的作用 运输层提供进程间的逻辑通信。 运输层的屏蔽作用&#xff1a; 运输层向高层用户屏蔽了下面网络核心的细节&#xff08;如网络拓扑、所采用的路由选择协议等&#xff09;&#xff0c;使应用进程看见的就是好像在两个运…