类图用于面向对象对于应用结构概念建模, 也用于把具体的模型翻译成程序代码. 类图也可以用于数据建模
mermaid渲染:
classDiagram Animal <|-- Duck Animal <|-- Fish Animal <|-- Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() }
语法
类结构
顶部代表类名称, 中部代表类成员变量, 底部代表类成员函数
classDiagram
class BankAccount {
+String ower
+Bigdecimal balance
+deposit(amount)
+withdraw(amount)
}
classDiagram class BankAccount { +String ower +Bigdecimal balance +deposit(amount) +withdraw(amount) }
定义类
- 显示声明:
class Animal
- 通过关系声明
Vehicle <|-- Car
classDiagram
class Animal
Vehicle <|-- Car
classDiagram class Animal Vehicle <|-- Car
定义类的成员
包括了属性和方法, 还有额外信息
区分方法和属性的决定性符号是()
, 定义类成员有两种办法
- 类外定义
classDiagram
class Dog
Dog : +String name
Dog : +bark()
Dog : +eat(food) bool
classDiagram class Dog Dog : +String name Dog : +bark() Dog : +eat(food) bool
- 类内部定义, 用大括号
classDiagram
class Dog {
+String name
+bark()
+eat(food) bool
}
classDiagram class Dog { +String name +bark() +eat(food) bool }
返回值
返回值在右括号后面添加
泛型类型
泛型用~
代替两个尖括号
classDiagram
class Squre~Shape~{
int id
List~int~ position
setPoints(List~int~ points)
getPoints() List~int~
}
classDiagram class Squre~Shape~{ int id List~int~ position setPoints(List~int~ points) getPoints() List~int~ }
可见性
类成员的可见性有四种:
+
public-
private#
protected~
package/internal
还有静态和虚函数
*
abstract:someAbstractMethod()*
$
static:someStaticMethod()$
定义关系
主要语法:
[classA][Arrow][ClassB]:LabelText
不同箭头代表的意思:
类型 | 描述 |
---|---|
<¦– |
(Inheritance)继承 |
*-- |
(Composition)组合 |
o-- |
(Aggregation)聚合 |
--> |
(Association)关联 |
-- |
(Link)实线连接 |
..> |
(Dependency)依赖 |
..¦> |
(Realization)实现 |
.. |
(Link)虚线连接 |
classDiagram
classA <|-- classB : Inheritance
classC *-- classD : Composition
classE o-- classF : Aggregation
classG <-- classH : Association
classI -- classJ : Link
classK <.. classL : Dependency
classM <|.. classN : Realization
classO .. classP : Link
classDiagram classA <|-- classB : Inheritance classC *-- classD : Composition classE o-- classF : Aggregation classG <-- classH : Association classI -- classJ : Link classK <.. classL : Dependency classM <|.. classN : Realization classO .. classP : Link
把箭头反向也可以用
多重和乘数关系
一般用在Link关系上, 表示类间的关系
1
只有1个0..1
0个或1个1..*
1个或多个*
多个n
n个{n>1}0..n
0~n {n>1}1..n
1~n {n>1}
样式(也可以在引号内写自己的文本):
[classA] "cardinality1" [arrow] "cardinality2" [classB]:LabelText
classDiagram
Customer "1" --> "*" Ticket
Student "1" --> "1..*" Course
Glaxy --> "many" Star : Contains
classDiagram Customer "1" --> "*" Ticket Student "1" --> "1..*" Course Glaxy --> "many" Star : Contains
类的注解
对类进行文本标识像元信息, 对性质进行清晰的指示, 例如:
<<interface>>
接口类<<abstract>>
抽象类<<service>>
服务类<<enumeration>>
枚举
在单独的行声明:
classDiagram
class Shape{
draw()*
}
<<interface>> Shape
classDiagram class Shape{ draw()* } <> Shape
在类内部:
classDiagram
class Shape{
<<interface>>
draw()*
count()$
size()
}
class Color{
<<enumeration>>
RED
BLUE
GREEN
WHITE
BLACK
}
classDiagram class Shape{ <> draw()* count()$ size() } class Color{ < > RED BLUE GREEN WHITE BLACK }
注释
mermaid注释用%%
开头
交互
绑定鼠标点击事件到浏览器: Interaction