当前位置:网站首页>markdown类图学习
markdown类图学习
2022-08-10 05:36:00 【吉良吉影__.】
在软件工程中,统一建模语言(UML)中的类图是一种静态结构图,它通过显示系统的类、它们的属性、操作(或方法)以及对象之间的关系来描述系统的结构。
类图是面向对象建模的主要构建块。它用于应用程序结构的一般概念建模,以及将模型转换为编程代码的详细建模。类图还可以用于数据建模。类图中的类既表示主要元素、应用程序中的交互,也表示要编程的类。
类图例子
示例源码:
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()
}
效果如下:(类图的源码要用"```mermaid ```"包裹)
语句规则
Class
UML提供了表示类成员的机制,例如属性和方法,以及关于它们的附加信息。图中类的单个实例包含三个部分:
- 顶部的隔间包含类的名称。它以粗体和居中打印,并且第一个字母是大写的。它还可以包含描述类性质的可选注释文本。
- 中间的隔间包含类的属性。它们是左对齐的,第一个字母是小写的。
- 底部的分隔符包含类可以执行的操作。它们也是左对齐的,第一个字母是小写的。
classDiagram
class BankAccount
BankAccount : +String owner
BankAccount : +Bigdecimal balance
BankAccount : +deposit(amount)
BankAccount : +withdrawl(amount)
效果如下:
Define a class 定义类
定义类有两种方法:
- 使用像class Animal这样的关键字class显式定义一个类。这定义了Animal类
- 通过它们之间的关系定义两个类Vehicle <|—Car。这定义了两个类Vehicle和Car及其关系
classDiagram
class Animal
Vehicle <|-- Car
效果如下:
命名约定:类名应该由字母数字(unicode允许)和下划线字符组成。
Defining Members of a class 定义属性与方法
UML提供了表示类成员的机制,例如属性和方法,以及关于它们的附加信息。
Mermaid根据是否存在圆括号()来区分属性和函数/方法。带有()的函数被视为函数/方法,其他的则被视为属性。
定义类成员有两种方法,无论使用哪一种语法来定义成员,输出都是相同的。两种不同的方式是:
- 使用:(冒号)后跟成员名关联类的成员,一次定义一个成员很有用。例如:
classDiagram
class BankAccount
BankAccount : +String owner
BankAccount : +BigDecimal balance
BankAccount : +deposit(amount)
BankAccount : +withdrawal(amount)
效果如下:
- 使用{}方括号关联类的成员,其中成员在花括号中分组。适合一次定义多个成员。例如:
classDiagram
class BankAccount{
+String owner
+BigDecimal balance
+deposit(amount)
+withdrawl(amount)
}
效果如下:
Return Type 定义方法返回值类型
可以在方法定义之后添加:一个空格 + 返回值类型,作为方法的返回类型
classDiagram
class BankAccount{
+String owner
+BigDecimal balance
+deposit(amount) bool
+withdrawl(amount) int
}
效果如下:
Generic Types 泛型
成员可以使用泛型类型定义,例如List,通过将类型括在~(波浪号)中来定义字段、参数和返回类型。注意:目前不支持嵌套类型声明(如List<List>)
这可以作为类定义方法的一部分来完成:
classDiagram
class Square~Shape~{
int id
List~int~ position
setPoints(List~int~ points)
getPoints() List~int~
}
Square : -List~string~ messages
Square : +setMessages(List~string~ messages)
Square : +getMessages() List~string~
效果如下:
Visibility 可见性
要指定类成员(即任何属性或方法)的可见性,这些标记可以放在成员名之前,但它是可选的:
+ Public
- Private
# Protected
~ Package/Internal
注意,你也可以通过在方法的末尾添加以下符号来在方法定义中添加额外的分类器,比如方法被static修饰,是抽象方法等。例如:
* Abstract e.g.: someAbstractMethod()*
$ Static e.g.: someStaticMethod()$
注意,你还可以通过在字段名的末尾添加以下符号来包括额外的分类器到字段定义中:
$ Static e.g.: String someField$
Defining Relationship 定义关系
关系是一个通用术语,涵盖了在类和对象图中发现的特定类型的逻辑连接。
语法:[classA][Arrow][ClassB]
目前支持的UML下定义的类有不同类型的关系:
| Type | Description |
|---|---|
| <|- - | Inheritance 继承 |
| *- - | Composition 构成 |
| o- - | Aggregation 聚合 |
| - -> | Association 关联 |
| - - | Link (Solid) |
| ..> | Dependency |
| ..|> | Realization 实现 |
| .. | Link (Dashed) |
classDiagram
classA <|-- classB
classC *-- classD
classE o-- classF
classG <-- classH
classI -- classJ
classK <.. classL
classM <|.. classN
classO .. classP
效果如下:
我们可以用这些标签来描述两个类之间关系的性质。另外,箭头也可以用于相反的方向:
classDiagram
classA --|> classB : Inheritance
classC --* classD : Composition
classE --o classF : Aggregation
classG --> classH : Association
classI -- classJ : Link(Solid)
classK ..> classL : Dependency
classM ..|> classN : Realization
classO .. classP : Link(Dashed)
效果如下:
Labels on Relations 关系上的标签
可以向关系中添加标签文本:
语法:[classA][Arrow][ClassB]:LabelText
classDiagram
classA <|-- classB : implements
classC *-- classD : composition
classE o-- classF : aggregation
效果如下:
Two-way relations 双向关系
关系可以有多种方式:
classDiagram
Animal <|--|> Zebra
语法:[Relation Type][Link][Relation Type]
其中Relation Type可以是:
Type Description
<| Inheritance
* Composition
o Aggregation
> Association
< Association
|> Realization
Link可以是:
Type Description
-- Solid
.. Dashed
Annotations on classes 注释在类
可以用类似于类元数据的特定标记文本对类进行注释,从而对类的性质给出明确的指示。一些常见的注释示例可能是:
<<Interface>>表示接口类<<abstract>>表示一个抽象类<<Service>>表示服务类<<enumeration>>表示枚举
注释在开头<<和结尾>>中定义。有两种向类添加注释的方法,无论使用的语法是什么,输出都是相同的。两种方法是:
- 在定义类之后的单独一行中。例如:
classDiagram
class Shape
<<interface>> Shape
Shape : noOfVertices
Shape : draw()
效果如下:
- 在嵌套结构中,与类定义一起。例如:
classDiagram
class Shape{
<<interface>>
noOfVertices
draw()
}
class Color{
<<enumeration>>
RED
BLUE
GREEN
WHITE
BLACK
}
效果如下:
Comments 注释
注释可以在类图中输入,解析器会忽略注释。注释需要单独一行,并且必须以%%(双百分比符号)开头。从注释开始到下一个换行符之后的任何文本都将被视为注释,包括任何类图语法
classDiagram
%% This whole line is a comment classDiagram class Shape <<interface>>
class Shape{
<<interface>>
noOfVertices
draw()
}
效果如下:
Cardinality / Multiplicity on relations 关系上的基数性/多样性
类图中的多重性或基数性表示一个类的实例数量链接到另一个类的一个实例。例如,一个公司将有一个或多个员工,但每个员工只为一个公司工作。
多重符号被放置在一个关联的末端附近。
不同的基数选项有:
1 Only 1
0..1 Zero or One
1..* One or more
* Many
n n {
where n>1}
0..n zero to n {
where n>1}
1..n one to n {
where n>1}
在给定箭头的前面(可选)和后面(可选)引号中放置基数文本,可以很容易地定义基数。
语法:[classA] “cardinality1” [Arrow] “cardinality2” [ClassB]:LabelText
classDiagram
Customer "1" --> "*" Ticket
Student "1" --> "1..*" Course
Galaxy --> "many" Star : Contains
效果如下:
Setting the direction of the diagram 设置图表的方向
对于类图,您可以使用direction语句来设置图呈现的方向,就像本例中一样。
classDiagram
direction RL
class Student {
-idCard : IdCard
}
class IdCard{
-id : int
-name : string
}
class Bike{
-id : int
-name : string
}
Student "1" --o "1" IdCard : carries
Student "1" --o "1" Bike : rides
效果如下:
边栏推荐
- 为什么游戏需要热更新
- 详解 Hough 变换(上)基本原理与直线检测
- mysql分组排序并取各分组前几个数据
- 常用模块封装-pymysql、pymongo(可优化)
- Pytorch - 07. Multidimensional characteristics of input processing
- 通过adb devices命令在控制台显示企业级PicoNeo3设备号
- 离散数学的学习记录
- LeetCode Interview Question 17.14 Minimum k Number (Moderate)
- 开源游戏服务器框架NoahGameFrame(NF)服务器端环境搭建(二)
- LeetCode 1894. Find the student number that needs to be supplemented with chalk
猜你喜欢

浅谈游戏中3种常用阴影渲染技术(1):平面阴影

【fiddler4】使用fiddler设置简单并发

STM32单片机手机APP蓝牙高亮RGB彩灯控制板任意颜色亮度调光

每日刷题(day01)——leetcode 53. 最大子数组和

Convolutional Neural Network (CNN) for mnist handwritten digit recognition

STM32单片机OLED经典2048游戏单片机小游戏

通过adb devices命令在控制台显示企业级PicoNeo3设备号

GC0053-STM32单片机NTC热敏电阻温度采集及控制LCD1602

Explain the principle of MySql index in detail

51单片机教室人数进出统计检测数码管显示装置红外传感器
随机推荐
一小时极速掌握游戏资源远程热更新
【图像识别】训练一个最最简单的AI使其识别Vtuber
PyTorch的安装与基础知识
51单片机RS485远程双机多机温度采集主从机多节点蜂鸣器报警
接口自动化2.0
废水中氟离子去除方法
The way for programmers to make money from a sideline business and increase their monthly income by 20K
Convolutional Neural Network (CNN) for mnist handwritten digit recognition
样条曲线(下)之插值问题(贝塞尔曲线、B样条和一般样条曲线插值)
【C语言】结构体变量学习笔记1
51单片机智能远程遥控温控PWM电风扇系统红外遥控温度速度定时关机
二次元卡通渲染之描边
除砷树脂吸附原理
请亲们关注下我,谢谢了。
Gradle学习 (一) 入门
溶液中重金属去除
常用模块封装-csv文件操作封装
自定义View的流程总结学习
Unity中采用二进制存档与读档
51单片机营养液自动配置搅拌系统TDS浓度采集自动加水加营养液