目录
-
- [1. 类图](#1. 类图)
1. 类图
类图的设计语法与编程语言的传统语法相似。这种相似性为开发人员提供了一个熟悉的环境,从而使创建图表的过程更简单、更直观。这种设计方法不仅简洁,而且还能创建既简洁又富有表现力的表述。此外,它还允许通过与序列图相呼应的语法来描绘类之间的关系,为流畅而深刻地描绘类之间的交互铺平了道路。除了结构和关系表示法,类图语法还支持进一步的丰富,如包含注释和应用颜色,使用户能够创建信息丰富且视觉上吸引人的图表。
1.1、什么是类图
类图(Class Diagram)是描述类、接口、协同以及他们之间关系的图,用来显示系统中这些概念的静态结构。
类图是其它图的基础。我们可以在类图的基础上,使用状态图、协作图、组件图和配置图等。
类图的主要作用有:
- 对系统的词汇进行建模
- 对简单的协作进行建模
- 对逻辑数据库模式进行建模
类图主要由类、接口和各种关系组成。
关系主要包括泛化关系、依赖关系、关联关系和实现关系。
1.2、元素声明
java
@startuml
abstract abstract
abstract class "abstract class"
annotation annotation
circle circle
() circle_short_form
class class
class class_stereo <<stereotype>>
diamond diamond
<> diamond_short_form
entity entity
enum enum
exception exception
interface interface
metaclass metaclass
protocol protocol
stereotype stereotype
struct struct
@enduml
1.3、类之间的关系
关系类型 | 符号 | 绘图 |
---|---|---|
泛化关系 | <-- | |
组合关系 | *-- | |
聚合关系 | o-- |
可以用... 来代替-- ,会显示为虚线。
java
@startuml
Class01 <|-- Class02
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 -- Class10
@enduml
java
@startuml
Class11 <|.. Class12
Class13 --> Class14
Class15 ..> Class16
Class17 ..|> Class18
Class19 <--* Class20
@enduml
java
@startuml
Class11 <|.. Class12
Class13 --> Class14
Class15 ..> Class16
Class17 ..|> Class18
Class19 <--* Class20
@enduml
1.4、关系上的标签
在关系之间使用标签来说明时, 使用 :后接 标签文字。 对元素的说明,你可以在每一边使用 "" 来说明
java
@startuml
类01 "1" *-- "many" 类02 : 包含
类03 o-- 类04 : 聚合
类05 --> "1" 类06
@enduml
在标签的开始或结束位置添加< 或 >以表明是哪个对象作用到哪个对象上
java
@startuml
class 汽车
发动机 - 汽车 : 驱动 >
汽车 *- 轮子 : 拥有 4 >
汽车 -- 人 : < 所属
@enduml
1.5、在元素名称和关系标签中使用非字母
如果你想在类(或枚举...)的显示名称中使用非字母,可以
- 在类定义中使用as 关键字来指定一个别名
- 在类名称周围加上引号""
java
@startuml
class "This is my class" as class1
class class2 as "It works this way too"
class2 *-- "foo/dummy" : use
@enduml
1.6、添加方法
要声明属性和方法,你可以使用符号:,后面跟字段或方法的名称。 编译器会通过检查括号来选择方法和字段。
java
@startuml
Object <|-- ArrayList
Object : equals()
ArrayList : Object[] elementData
ArrayList : size()
@enduml
可用花括号{} 为所有属性和方法分组。 注意,语法对类型/名称的顺序有很大的灵活性。
java
@startuml
class Dummy {
String data
void methods()
}
class Flight {
flightNumber : Integer
departureTime : Date
}
@enduml
可以使用{field}和{method}修饰符来覆盖编译器对属性和方法的默认识别。
java
@startuml
class Dummy {
{field} A field (despite parentheses)
{method} Some method
}
@enduml