目录
一、类
二、接口
三、抽象类
四、泛型类
五、类之间的关系
六、添加注释
七、包图
八、皮肤参数
一、类
使用class
关键字定义类,类名后跟大括号,声明类的属性和方法。
属性:格式为{visibility} attributeName : AttributeType;
{visibility}
:成员的可见性,可以是-
(私有)、#
(受保护)、+
(公共)、~
(包级私有)。attributeName
:属性的名称。AttributeType
:属性的类型,可以是任何有效的数据类型,如int
、String
、boolean
等。
方法:格式为{visibility} methodName(param1 : Type1, param2 : Type2, ...) : ReturnType;
{visibility}
:成员的可见性,可以是-
(私有)、#
(受保护)、+
(公共)、~
(包级私有)。methodName
:方法的名称。param1 : Type1, param2 : Type2, ...
:方法的参数列表,每个参数由名称和类型组成,多个参数之间用逗号分隔。ReturnType
:方法的返回类型,可以是任何有效的数据类型,如int
、String
、boolean
等,如果方法没有返回值,则可以省略返回类型。
@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"
表示,其中n
和m
分别表示聚合的两端的基数。表示整体与部分的关系,部分可以独立于整体存在。聚合是关联的一种,表示弱的“拥有”关系。 - 组合:使用
"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