当前位置: 首页 > news >正文

【PlantUML系列】类图(一)

目录

一、类

二、接口

三、抽象类

四、泛型类

五、类之间的关系

六、添加注释

七、包图

八、皮肤参数


一、类

使用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表示实心菱形,表示强拥有关系。也表示整体与部分的关系,但部分不能独立于整体存在。组合是关联的一种,表示强的“拥有”关系,整体的生命周期结束时,部分的生命周期也会结束。
@startumlclass 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.lryc.cn/news/497763.html

相关文章:

  • Unity AssetBundles(AB包)
  • 腾讯面试:如何解决哈希冲突?
  • 【动手学运动规划】 4.5 A*算法
  • Spring Boot 3.4.0 发布:功能概览与示例
  • 【48】Android通过libjpeg-turbo库实现图片压缩
  • Linux输入设备应用编程
  • 【Vulkan入门】03-创建Device
  • 【jvm】C2编译器
  • 使用 Acme.sh 自动生成和续签免费 SSL 证书(含通配符支持)
  • Android 图形系统之四:Choreographer
  • CAP定理和BASE理论
  • 笔记软件:我来、思源笔记、Obsidian、OneNote
  • 试探互联网如何工作?
  • 【c++笔试强训】(第三十篇)
  • 微信小程序购物车全选反选功能以及合计
  • vue-qr在线生成二维码组件(vue2版本)
  • 大语言模型技术相关知识-笔记整理
  • SCP命令实现Linux中的文件传输
  • linux环境中后台运行java程序
  • Go学习:变量
  • 在Unity编辑模式下运行Mono中的方法
  • Y20030028 JAVA+SSM+MYSQL+LW+基于JAVA的考研监督互助系统的设计与实现 源代码 配置 文档
  • MATLAB期末复习笔记(下)
  • 「Mac畅玩鸿蒙与硬件37」UI互动应用篇14 - 随机颜色变化器
  • MySql:理解数据库
  • 学习笔记051——SpringBoot学习2
  • crush rule 20 type does not match pool
  • BA是什么?
  • 通过docker 搭建jenkins环境;
  • 10-高级主题