【PlantUML系列】类图(一)

发布于:2024-12-06 ⋅ 阅读:(103) ⋅ 点赞:(0)

目录

一、类

二、接口

三、抽象类

四、泛型类

五、类之间的关系

六、添加注释

七、包图

八、皮肤参数


一、类

使用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

九、示例


网站公告

今日签到

点亮在社区的每一天
去签到