当前位置:网站首页>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
效果如下:
边栏推荐
猜你喜欢
pytorch-11. Convolutional Neural Network (Advanced)
LeetCode 1351. Counting Negative Numbers in Ordered Matrices (Simple)
序列化、编码、requests库json和data参数
C#对MySQL数据库进行增删改查操作(该操作还有防止MySQL注入功能)
Notes for Netual Network
手机端应用类型
mysql使用常见问题和解决
每日刷题(day02)——leetcode 622. 设计循环队列
C陷阱与缺陷 个人阅读笔记
STM32单片机LORA无线远程火灾报警监控系统DS18B20MQ2火焰检测
随机推荐
mkfs.minix.c之minix_super_block.s_nzones获取解析
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁
详解样条曲线(上)(包含贝塞尔曲线)
氨氮的有效吸附材料
pytorch-11. Convolutional Neural Network (Advanced)
二叉树 6/20 86-90
【目标检测】相关指标的引入与解析
pytorch-09. Multi-classification problem
手机端应用类型
LaTeX总结----在CSDN上写出数学公式
I don't like my code
【fiddler4】使用fiddler设置简单并发
Flutter Package 插件开发
探究乱码问题的本源:GBK,UTF8,UTF16,UTF8BOM,ASN1之间的关联
STM32F407ZG GPIO输出相关实验
Multisim软件的基本使用
样条曲线(下)之插值问题(贝塞尔曲线、B样条和一般样条曲线插值)
STM32单片机OLED俄罗斯方块单片机小游戏
ASP.Net利用代码点击相应按钮来关闭当前的页面(亲测有效)
unity3d著名项目-Dark Tree翻译