软件工程:UML 的表示法

📌目录



⚖️ UML的表示法:图形符号与语法规则

UML的表示法是一套标准化的图形符号和语法规则,用于描述系统的各个方面。本文将详细介绍UML各种图的表示法,包括类图、对象图、用例图、状态图、活动图、顺序图等,以及各种元素和关系的表示规则。

🎯 一、UML表示法概述

(一)表示法的重要性

UML表示法是UML的核心组成部分,它定义了如何使用图形符号来表示系统的各个方面。

表示法组成:
#mermaid-svg-EwOUZAAqWLbClMYu{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-EwOUZAAqWLbClMYu .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-EwOUZAAqWLbClMYu .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-EwOUZAAqWLbClMYu .error-icon{fill:#552222;}#mermaid-svg-EwOUZAAqWLbClMYu .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-EwOUZAAqWLbClMYu .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-EwOUZAAqWLbClMYu .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-EwOUZAAqWLbClMYu .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-EwOUZAAqWLbClMYu .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-EwOUZAAqWLbClMYu .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-EwOUZAAqWLbClMYu .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-EwOUZAAqWLbClMYu .marker{fill:#333333;stroke:#333333;}#mermaid-svg-EwOUZAAqWLbClMYu .marker.cross{stroke:#333333;}#mermaid-svg-EwOUZAAqWLbClMYu svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-EwOUZAAqWLbClMYu p{margin:0;}#mermaid-svg-EwOUZAAqWLbClMYu .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-EwOUZAAqWLbClMYu .cluster-label text{fill:#333;}#mermaid-svg-EwOUZAAqWLbClMYu .cluster-label span{color:#333;}#mermaid-svg-EwOUZAAqWLbClMYu .cluster-label span p{background-color:transparent;}#mermaid-svg-EwOUZAAqWLbClMYu .label text,#mermaid-svg-EwOUZAAqWLbClMYu span{fill:#333;color:#333;}#mermaid-svg-EwOUZAAqWLbClMYu .node rect,#mermaid-svg-EwOUZAAqWLbClMYu .node circle,#mermaid-svg-EwOUZAAqWLbClMYu .node ellipse,#mermaid-svg-EwOUZAAqWLbClMYu .node polygon,#mermaid-svg-EwOUZAAqWLbClMYu .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-EwOUZAAqWLbClMYu .rough-node .label text,#mermaid-svg-EwOUZAAqWLbClMYu .node .label text,#mermaid-svg-EwOUZAAqWLbClMYu .image-shape .label,#mermaid-svg-EwOUZAAqWLbClMYu .icon-shape .label{text-anchor:middle;}#mermaid-svg-EwOUZAAqWLbClMYu .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-EwOUZAAqWLbClMYu .rough-node .label,#mermaid-svg-EwOUZAAqWLbClMYu .node .label,#mermaid-svg-EwOUZAAqWLbClMYu .image-shape .label,#mermaid-svg-EwOUZAAqWLbClMYu .icon-shape .label{text-align:center;}#mermaid-svg-EwOUZAAqWLbClMYu .node.clickable{cursor:pointer;}#mermaid-svg-EwOUZAAqWLbClMYu .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-EwOUZAAqWLbClMYu .arrowheadPath{fill:#333333;}#mermaid-svg-EwOUZAAqWLbClMYu .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-EwOUZAAqWLbClMYu .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-EwOUZAAqWLbClMYu .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EwOUZAAqWLbClMYu .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-EwOUZAAqWLbClMYu .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EwOUZAAqWLbClMYu .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-EwOUZAAqWLbClMYu .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-EwOUZAAqWLbClMYu .cluster text{fill:#333;}#mermaid-svg-EwOUZAAqWLbClMYu .cluster span{color:#333;}#mermaid-svg-EwOUZAAqWLbClMYu div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-EwOUZAAqWLbClMYu .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-EwOUZAAqWLbClMYu rect.text{fill:none;stroke-width:0;}#mermaid-svg-EwOUZAAqWLbClMYu .icon-shape,#mermaid-svg-EwOUZAAqWLbClMYu .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EwOUZAAqWLbClMYu .icon-shape p,#mermaid-svg-EwOUZAAqWLbClMYu .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-EwOUZAAqWLbClMYu .icon-shape .label rect,#mermaid-svg-EwOUZAAqWLbClMYu .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EwOUZAAqWLbClMYu .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-EwOUZAAqWLbClMYu .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-EwOUZAAqWLbClMYu :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} UML表示法
图形符号
语法规则
语义定义
基本形状
连接线
修饰符
组合规则
命名规则
含义定义
约束条件

(二)基本图形元素

基本图形元素:

元素 形状 用途
矩形 矩形 类、对象、组件等
椭圆 椭圆 用例、状态等
菱形 菱形 关系修饰
圆形 圆形 状态点
箭头 箭头 关系方向

基本元素示例:
#mermaid-svg-c0sWprRzfvhghmuc{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-c0sWprRzfvhghmuc .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-c0sWprRzfvhghmuc .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-c0sWprRzfvhghmuc .error-icon{fill:#552222;}#mermaid-svg-c0sWprRzfvhghmuc .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-c0sWprRzfvhghmuc .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-c0sWprRzfvhghmuc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-c0sWprRzfvhghmuc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-c0sWprRzfvhghmuc .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-c0sWprRzfvhghmuc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-c0sWprRzfvhghmuc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-c0sWprRzfvhghmuc .marker{fill:#333333;stroke:#333333;}#mermaid-svg-c0sWprRzfvhghmuc .marker.cross{stroke:#333333;}#mermaid-svg-c0sWprRzfvhghmuc svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-c0sWprRzfvhghmuc p{margin:0;}#mermaid-svg-c0sWprRzfvhghmuc .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-c0sWprRzfvhghmuc .cluster-label text{fill:#333;}#mermaid-svg-c0sWprRzfvhghmuc .cluster-label span{color:#333;}#mermaid-svg-c0sWprRzfvhghmuc .cluster-label span p{background-color:transparent;}#mermaid-svg-c0sWprRzfvhghmuc .label text,#mermaid-svg-c0sWprRzfvhghmuc span{fill:#333;color:#333;}#mermaid-svg-c0sWprRzfvhghmuc .node rect,#mermaid-svg-c0sWprRzfvhghmuc .node circle,#mermaid-svg-c0sWprRzfvhghmuc .node ellipse,#mermaid-svg-c0sWprRzfvhghmuc .node polygon,#mermaid-svg-c0sWprRzfvhghmuc .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-c0sWprRzfvhghmuc .rough-node .label text,#mermaid-svg-c0sWprRzfvhghmuc .node .label text,#mermaid-svg-c0sWprRzfvhghmuc .image-shape .label,#mermaid-svg-c0sWprRzfvhghmuc .icon-shape .label{text-anchor:middle;}#mermaid-svg-c0sWprRzfvhghmuc .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-c0sWprRzfvhghmuc .rough-node .label,#mermaid-svg-c0sWprRzfvhghmuc .node .label,#mermaid-svg-c0sWprRzfvhghmuc .image-shape .label,#mermaid-svg-c0sWprRzfvhghmuc .icon-shape .label{text-align:center;}#mermaid-svg-c0sWprRzfvhghmuc .node.clickable{cursor:pointer;}#mermaid-svg-c0sWprRzfvhghmuc .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-c0sWprRzfvhghmuc .arrowheadPath{fill:#333333;}#mermaid-svg-c0sWprRzfvhghmuc .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-c0sWprRzfvhghmuc .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-c0sWprRzfvhghmuc .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-c0sWprRzfvhghmuc .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-c0sWprRzfvhghmuc .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-c0sWprRzfvhghmuc .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-c0sWprRzfvhghmuc .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-c0sWprRzfvhghmuc .cluster text{fill:#333;}#mermaid-svg-c0sWprRzfvhghmuc .cluster span{color:#333;}#mermaid-svg-c0sWprRzfvhghmuc div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-c0sWprRzfvhghmuc .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-c0sWprRzfvhghmuc rect.text{fill:none;stroke-width:0;}#mermaid-svg-c0sWprRzfvhghmuc .icon-shape,#mermaid-svg-c0sWprRzfvhghmuc .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-c0sWprRzfvhghmuc .icon-shape p,#mermaid-svg-c0sWprRzfvhghmuc .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-c0sWprRzfvhghmuc .icon-shape .label rect,#mermaid-svg-c0sWprRzfvhghmuc .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-c0sWprRzfvhghmuc .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-c0sWprRzfvhghmuc .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-c0sWprRzfvhghmuc :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 基本图形
矩形
椭圆
菱形
圆形
箭头
类、对象
用例、状态
聚合、组合
初始、终止点
关系方向

📦 二、类图的表示法

(一)类的表示

类的表示使用矩形,分为三个部分:类名、属性、操作。

类的表示结构:

复制代码
┌─────────────────┐
│    类名         │
├─────────────────┤
│    属性         │
├─────────────────┤
│    操作         │
└─────────────────┘

类的表示示例:
#mermaid-svg-bhBUGgLw75Wv6XQm{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-bhBUGgLw75Wv6XQm .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-bhBUGgLw75Wv6XQm .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-bhBUGgLw75Wv6XQm .error-icon{fill:#552222;}#mermaid-svg-bhBUGgLw75Wv6XQm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bhBUGgLw75Wv6XQm .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-bhBUGgLw75Wv6XQm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bhBUGgLw75Wv6XQm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bhBUGgLw75Wv6XQm .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-bhBUGgLw75Wv6XQm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bhBUGgLw75Wv6XQm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bhBUGgLw75Wv6XQm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bhBUGgLw75Wv6XQm .marker.cross{stroke:#333333;}#mermaid-svg-bhBUGgLw75Wv6XQm svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bhBUGgLw75Wv6XQm p{margin:0;}#mermaid-svg-bhBUGgLw75Wv6XQm g.classGroup text{fill:#9370DB;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-bhBUGgLw75Wv6XQm g.classGroup text .title{font-weight:bolder;}#mermaid-svg-bhBUGgLw75Wv6XQm .cluster-label text{fill:#333;}#mermaid-svg-bhBUGgLw75Wv6XQm .cluster-label span{color:#333;}#mermaid-svg-bhBUGgLw75Wv6XQm .cluster-label span p{background-color:transparent;}#mermaid-svg-bhBUGgLw75Wv6XQm .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bhBUGgLw75Wv6XQm .cluster text{fill:#333;}#mermaid-svg-bhBUGgLw75Wv6XQm .cluster span{color:#333;}#mermaid-svg-bhBUGgLw75Wv6XQm .nodeLabel,#mermaid-svg-bhBUGgLw75Wv6XQm .edgeLabel{color:#131300;}#mermaid-svg-bhBUGgLw75Wv6XQm .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-bhBUGgLw75Wv6XQm .label text{fill:#131300;}#mermaid-svg-bhBUGgLw75Wv6XQm .labelBkg{background:#ECECFF;}#mermaid-svg-bhBUGgLw75Wv6XQm .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-bhBUGgLw75Wv6XQm .classTitle{font-weight:bolder;}#mermaid-svg-bhBUGgLw75Wv6XQm .node rect,#mermaid-svg-bhBUGgLw75Wv6XQm .node circle,#mermaid-svg-bhBUGgLw75Wv6XQm .node ellipse,#mermaid-svg-bhBUGgLw75Wv6XQm .node polygon,#mermaid-svg-bhBUGgLw75Wv6XQm .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bhBUGgLw75Wv6XQm .divider{stroke:#9370DB;stroke-width:1;}#mermaid-svg-bhBUGgLw75Wv6XQm g.clickable{cursor:pointer;}#mermaid-svg-bhBUGgLw75Wv6XQm g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-bhBUGgLw75Wv6XQm g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-bhBUGgLw75Wv6XQm .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-bhBUGgLw75Wv6XQm .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-bhBUGgLw75Wv6XQm .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-bhBUGgLw75Wv6XQm .dashed-line{stroke-dasharray:3;}#mermaid-svg-bhBUGgLw75Wv6XQm .dotted-line{stroke-dasharray:1 2;}#mermaid-svg-bhBUGgLw75Wv6XQm #compositionStart,#mermaid-svg-bhBUGgLw75Wv6XQm .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-bhBUGgLw75Wv6XQm #compositionEnd,#mermaid-svg-bhBUGgLw75Wv6XQm .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-bhBUGgLw75Wv6XQm #dependencyStart,#mermaid-svg-bhBUGgLw75Wv6XQm .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-bhBUGgLw75Wv6XQm #dependencyStart,#mermaid-svg-bhBUGgLw75Wv6XQm .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-bhBUGgLw75Wv6XQm #extensionStart,#mermaid-svg-bhBUGgLw75Wv6XQm .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-bhBUGgLw75Wv6XQm #extensionEnd,#mermaid-svg-bhBUGgLw75Wv6XQm .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-bhBUGgLw75Wv6XQm #aggregationStart,#mermaid-svg-bhBUGgLw75Wv6XQm .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-bhBUGgLw75Wv6XQm #aggregationEnd,#mermaid-svg-bhBUGgLw75Wv6XQm .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-bhBUGgLw75Wv6XQm #lollipopStart,#mermaid-svg-bhBUGgLw75Wv6XQm .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-bhBUGgLw75Wv6XQm #lollipopEnd,#mermaid-svg-bhBUGgLw75Wv6XQm .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-bhBUGgLw75Wv6XQm .edgeTerminals{font-size:11px;line-height:initial;}#mermaid-svg-bhBUGgLw75Wv6XQm .classTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-bhBUGgLw75Wv6XQm .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-bhBUGgLw75Wv6XQm .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-bhBUGgLw75Wv6XQm :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Book
+book_id: String
-title: String
#author: String
~isbn: String
+borrow(reader: Reader)
-return_book()

可见性修饰符:

符号 可见性 说明
+ public 公开
- private 私有
# protected 保护
~ package 包

类的完整表示:

python 复制代码
# 类图表示
class Book:
    """图书类"""
    
    # 属性(可见性 + 名称 : 类型 = 默认值)
    # +book_id: String  (public)
    # -title: String    (private)
    # #author: String   (protected)
    # ~isbn: String     (package)
    
    def __init__(self, book_id, title, author, isbn):
        self.book_id = book_id      # +book_id
        self._title = title         # -title
        self.__author = author      # #author
        self.isbn = isbn            # ~isbn
    
    # 操作(可见性 + 名称(参数列表): 返回类型)
    # +borrow(reader: Reader): boolean
    # -return_book(): void
    
    def borrow(self, reader):
        """借阅方法"""
        pass
    
    def _return_book(self):
        """归还方法"""
        pass

(二)关系的表示

关系类型:

关系 符号 说明
关联 实线 一般关联
依赖 虚线箭头 依赖关系
泛化 实线空心三角 继承关系
实现 虚线空心三角 接口实现
聚合 实线空心菱形 聚合关系
组合 实线实心菱形 组合关系

关系表示示例:
#mermaid-svg-8YJk3nm9gXTxSQNu{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-8YJk3nm9gXTxSQNu .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-8YJk3nm9gXTxSQNu .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-8YJk3nm9gXTxSQNu .error-icon{fill:#552222;}#mermaid-svg-8YJk3nm9gXTxSQNu .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8YJk3nm9gXTxSQNu .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-8YJk3nm9gXTxSQNu .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8YJk3nm9gXTxSQNu .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8YJk3nm9gXTxSQNu .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-8YJk3nm9gXTxSQNu .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8YJk3nm9gXTxSQNu .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8YJk3nm9gXTxSQNu .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8YJk3nm9gXTxSQNu .marker.cross{stroke:#333333;}#mermaid-svg-8YJk3nm9gXTxSQNu svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8YJk3nm9gXTxSQNu p{margin:0;}#mermaid-svg-8YJk3nm9gXTxSQNu g.classGroup text{fill:#9370DB;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-8YJk3nm9gXTxSQNu g.classGroup text .title{font-weight:bolder;}#mermaid-svg-8YJk3nm9gXTxSQNu .cluster-label text{fill:#333;}#mermaid-svg-8YJk3nm9gXTxSQNu .cluster-label span{color:#333;}#mermaid-svg-8YJk3nm9gXTxSQNu .cluster-label span p{background-color:transparent;}#mermaid-svg-8YJk3nm9gXTxSQNu .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8YJk3nm9gXTxSQNu .cluster text{fill:#333;}#mermaid-svg-8YJk3nm9gXTxSQNu .cluster span{color:#333;}#mermaid-svg-8YJk3nm9gXTxSQNu .nodeLabel,#mermaid-svg-8YJk3nm9gXTxSQNu .edgeLabel{color:#131300;}#mermaid-svg-8YJk3nm9gXTxSQNu .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-8YJk3nm9gXTxSQNu .label text{fill:#131300;}#mermaid-svg-8YJk3nm9gXTxSQNu .labelBkg{background:#ECECFF;}#mermaid-svg-8YJk3nm9gXTxSQNu .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-8YJk3nm9gXTxSQNu .classTitle{font-weight:bolder;}#mermaid-svg-8YJk3nm9gXTxSQNu .node rect,#mermaid-svg-8YJk3nm9gXTxSQNu .node circle,#mermaid-svg-8YJk3nm9gXTxSQNu .node ellipse,#mermaid-svg-8YJk3nm9gXTxSQNu .node polygon,#mermaid-svg-8YJk3nm9gXTxSQNu .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8YJk3nm9gXTxSQNu .divider{stroke:#9370DB;stroke-width:1;}#mermaid-svg-8YJk3nm9gXTxSQNu g.clickable{cursor:pointer;}#mermaid-svg-8YJk3nm9gXTxSQNu g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-8YJk3nm9gXTxSQNu g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-8YJk3nm9gXTxSQNu .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-8YJk3nm9gXTxSQNu .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-8YJk3nm9gXTxSQNu .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-8YJk3nm9gXTxSQNu .dashed-line{stroke-dasharray:3;}#mermaid-svg-8YJk3nm9gXTxSQNu .dotted-line{stroke-dasharray:1 2;}#mermaid-svg-8YJk3nm9gXTxSQNu #compositionStart,#mermaid-svg-8YJk3nm9gXTxSQNu .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8YJk3nm9gXTxSQNu #compositionEnd,#mermaid-svg-8YJk3nm9gXTxSQNu .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8YJk3nm9gXTxSQNu #dependencyStart,#mermaid-svg-8YJk3nm9gXTxSQNu .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8YJk3nm9gXTxSQNu #dependencyStart,#mermaid-svg-8YJk3nm9gXTxSQNu .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8YJk3nm9gXTxSQNu #extensionStart,#mermaid-svg-8YJk3nm9gXTxSQNu .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8YJk3nm9gXTxSQNu #extensionEnd,#mermaid-svg-8YJk3nm9gXTxSQNu .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8YJk3nm9gXTxSQNu #aggregationStart,#mermaid-svg-8YJk3nm9gXTxSQNu .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8YJk3nm9gXTxSQNu #aggregationEnd,#mermaid-svg-8YJk3nm9gXTxSQNu .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8YJk3nm9gXTxSQNu #lollipopStart,#mermaid-svg-8YJk3nm9gXTxSQNu .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8YJk3nm9gXTxSQNu #lollipopEnd,#mermaid-svg-8YJk3nm9gXTxSQNu .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8YJk3nm9gXTxSQNu .edgeTerminals{font-size:11px;line-height:initial;}#mermaid-svg-8YJk3nm9gXTxSQNu .classTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-8YJk3nm9gXTxSQNu .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-8YJk3nm9gXTxSQNu .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-8YJk3nm9gXTxSQNu :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} borrowed by
borrows
extends
implements
contains
contains
contains
1
1
0..1
0..*
Book
+book_id: String
+title: String
Reader
+reader_id: String
+name: String
LibraryItem
+item_id: String
<<interface>>
Borrowable
+borrow()
+return_item()
Library
+books: List<Book>
BorrowRecord
+book: Book
+reader: Reader

关系详细说明:

python 复制代码
# 1. 关联关系 - 实线
class AssociationExample:
    """关联关系示例"""
    def __init__(self):
        self.reader = None  # 关联到Reader
    
    def set_reader(self, reader):
        self.reader = reader

# 2. 依赖关系 - 虚线箭头
class DependencyExample:
    """依赖关系示例"""
    def process(self, book):
        # 临时使用book,不持有引用
        print(book.title)

# 3. 泛化关系 - 实线空心三角
class BaseClass:
    """基类"""
    pass

class DerivedClass(BaseClass):
    """派生类"""
    pass

# 4. 实现关系 - 虚线空心三角
from abc import ABC, abstractmethod

class Borrowable(ABC):
    """接口"""
    @abstractmethod
    def borrow(self):
        pass

class Book(Borrowable):
    """实现接口"""
    def borrow(self):
        pass

# 5. 聚合关系 - 实线空心菱形
class Library:
    """聚合关系 - 整体可以独立存在"""
    def __init__(self):
        self.books = []  # 聚合:图书馆聚合图书
    
    def add_book(self, book):
        self.books.append(book)

# 6. 组合关系 - 实线实心菱形
class BorrowRecord:
    """组合关系 - 整体不能独立存在"""
    def __init__(self, book, reader):
        self.book = book      # 组合:记录组合图书
        self.reader = reader  # 组合:记录组合读者

(三)多重性的表示

多重性表示:

表示 含义
1 恰好1个
0...1 0或1个
0...* 或 * 0到多个
1...* 1到多个
0...5 0到5个

多重性示例:
#mermaid-svg-WpArSLtWTQ202MW3{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-WpArSLtWTQ202MW3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-WpArSLtWTQ202MW3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-WpArSLtWTQ202MW3 .error-icon{fill:#552222;}#mermaid-svg-WpArSLtWTQ202MW3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-WpArSLtWTQ202MW3 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-WpArSLtWTQ202MW3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-WpArSLtWTQ202MW3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-WpArSLtWTQ202MW3 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-WpArSLtWTQ202MW3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-WpArSLtWTQ202MW3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-WpArSLtWTQ202MW3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-WpArSLtWTQ202MW3 .marker.cross{stroke:#333333;}#mermaid-svg-WpArSLtWTQ202MW3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-WpArSLtWTQ202MW3 p{margin:0;}#mermaid-svg-WpArSLtWTQ202MW3 g.classGroup text{fill:#9370DB;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-WpArSLtWTQ202MW3 g.classGroup text .title{font-weight:bolder;}#mermaid-svg-WpArSLtWTQ202MW3 .cluster-label text{fill:#333;}#mermaid-svg-WpArSLtWTQ202MW3 .cluster-label span{color:#333;}#mermaid-svg-WpArSLtWTQ202MW3 .cluster-label span p{background-color:transparent;}#mermaid-svg-WpArSLtWTQ202MW3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-WpArSLtWTQ202MW3 .cluster text{fill:#333;}#mermaid-svg-WpArSLtWTQ202MW3 .cluster span{color:#333;}#mermaid-svg-WpArSLtWTQ202MW3 .nodeLabel,#mermaid-svg-WpArSLtWTQ202MW3 .edgeLabel{color:#131300;}#mermaid-svg-WpArSLtWTQ202MW3 .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-WpArSLtWTQ202MW3 .label text{fill:#131300;}#mermaid-svg-WpArSLtWTQ202MW3 .labelBkg{background:#ECECFF;}#mermaid-svg-WpArSLtWTQ202MW3 .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-WpArSLtWTQ202MW3 .classTitle{font-weight:bolder;}#mermaid-svg-WpArSLtWTQ202MW3 .node rect,#mermaid-svg-WpArSLtWTQ202MW3 .node circle,#mermaid-svg-WpArSLtWTQ202MW3 .node ellipse,#mermaid-svg-WpArSLtWTQ202MW3 .node polygon,#mermaid-svg-WpArSLtWTQ202MW3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-WpArSLtWTQ202MW3 .divider{stroke:#9370DB;stroke-width:1;}#mermaid-svg-WpArSLtWTQ202MW3 g.clickable{cursor:pointer;}#mermaid-svg-WpArSLtWTQ202MW3 g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-WpArSLtWTQ202MW3 g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-WpArSLtWTQ202MW3 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-WpArSLtWTQ202MW3 .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-WpArSLtWTQ202MW3 .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-WpArSLtWTQ202MW3 .dashed-line{stroke-dasharray:3;}#mermaid-svg-WpArSLtWTQ202MW3 .dotted-line{stroke-dasharray:1 2;}#mermaid-svg-WpArSLtWTQ202MW3 #compositionStart,#mermaid-svg-WpArSLtWTQ202MW3 .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-WpArSLtWTQ202MW3 #compositionEnd,#mermaid-svg-WpArSLtWTQ202MW3 .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-WpArSLtWTQ202MW3 #dependencyStart,#mermaid-svg-WpArSLtWTQ202MW3 .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-WpArSLtWTQ202MW3 #dependencyStart,#mermaid-svg-WpArSLtWTQ202MW3 .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-WpArSLtWTQ202MW3 #extensionStart,#mermaid-svg-WpArSLtWTQ202MW3 .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-WpArSLtWTQ202MW3 #extensionEnd,#mermaid-svg-WpArSLtWTQ202MW3 .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-WpArSLtWTQ202MW3 #aggregationStart,#mermaid-svg-WpArSLtWTQ202MW3 .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-WpArSLtWTQ202MW3 #aggregationEnd,#mermaid-svg-WpArSLtWTQ202MW3 .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-WpArSLtWTQ202MW3 #lollipopStart,#mermaid-svg-WpArSLtWTQ202MW3 .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-WpArSLtWTQ202MW3 #lollipopEnd,#mermaid-svg-WpArSLtWTQ202MW3 .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-WpArSLtWTQ202MW3 .edgeTerminals{font-size:11px;line-height:initial;}#mermaid-svg-WpArSLtWTQ202MW3 .classTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-WpArSLtWTQ202MW3 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-WpArSLtWTQ202MW3 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-WpArSLtWTQ202MW3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} has one
borrows
borrowed by
1
1
0..*
1
0..*
0..*
Reader
+reader_id: String
+name: String
Book
+book_id: String
+title: String
BorrowRecord
+record_id: String

🌐 三、对象图的表示法

(一)对象的表示

对象的表示使用矩形,包含对象名和属性值。

对象表示结构:

复制代码
┌─────────────────┐
│ 对象名:类名     │
├─────────────────┤
│ 属性 = 值       │
└─────────────────┘

对象表示示例:
#mermaid-svg-akc5DwkH37C8ZxWC{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-akc5DwkH37C8ZxWC .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-akc5DwkH37C8ZxWC .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-akc5DwkH37C8ZxWC .error-icon{fill:#552222;}#mermaid-svg-akc5DwkH37C8ZxWC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-akc5DwkH37C8ZxWC .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-akc5DwkH37C8ZxWC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-akc5DwkH37C8ZxWC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-akc5DwkH37C8ZxWC .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-akc5DwkH37C8ZxWC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-akc5DwkH37C8ZxWC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-akc5DwkH37C8ZxWC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-akc5DwkH37C8ZxWC .marker.cross{stroke:#333333;}#mermaid-svg-akc5DwkH37C8ZxWC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-akc5DwkH37C8ZxWC p{margin:0;}#mermaid-svg-akc5DwkH37C8ZxWC .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-akc5DwkH37C8ZxWC .cluster-label text{fill:#333;}#mermaid-svg-akc5DwkH37C8ZxWC .cluster-label span{color:#333;}#mermaid-svg-akc5DwkH37C8ZxWC .cluster-label span p{background-color:transparent;}#mermaid-svg-akc5DwkH37C8ZxWC .label text,#mermaid-svg-akc5DwkH37C8ZxWC span{fill:#333;color:#333;}#mermaid-svg-akc5DwkH37C8ZxWC .node rect,#mermaid-svg-akc5DwkH37C8ZxWC .node circle,#mermaid-svg-akc5DwkH37C8ZxWC .node ellipse,#mermaid-svg-akc5DwkH37C8ZxWC .node polygon,#mermaid-svg-akc5DwkH37C8ZxWC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-akc5DwkH37C8ZxWC .rough-node .label text,#mermaid-svg-akc5DwkH37C8ZxWC .node .label text,#mermaid-svg-akc5DwkH37C8ZxWC .image-shape .label,#mermaid-svg-akc5DwkH37C8ZxWC .icon-shape .label{text-anchor:middle;}#mermaid-svg-akc5DwkH37C8ZxWC .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-akc5DwkH37C8ZxWC .rough-node .label,#mermaid-svg-akc5DwkH37C8ZxWC .node .label,#mermaid-svg-akc5DwkH37C8ZxWC .image-shape .label,#mermaid-svg-akc5DwkH37C8ZxWC .icon-shape .label{text-align:center;}#mermaid-svg-akc5DwkH37C8ZxWC .node.clickable{cursor:pointer;}#mermaid-svg-akc5DwkH37C8ZxWC .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-akc5DwkH37C8ZxWC .arrowheadPath{fill:#333333;}#mermaid-svg-akc5DwkH37C8ZxWC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-akc5DwkH37C8ZxWC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-akc5DwkH37C8ZxWC .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-akc5DwkH37C8ZxWC .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-akc5DwkH37C8ZxWC .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-akc5DwkH37C8ZxWC .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-akc5DwkH37C8ZxWC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-akc5DwkH37C8ZxWC .cluster text{fill:#333;}#mermaid-svg-akc5DwkH37C8ZxWC .cluster span{color:#333;}#mermaid-svg-akc5DwkH37C8ZxWC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-akc5DwkH37C8ZxWC .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-akc5DwkH37C8ZxWC rect.text{fill:none;stroke-width:0;}#mermaid-svg-akc5DwkH37C8ZxWC .icon-shape,#mermaid-svg-akc5DwkH37C8ZxWC .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-akc5DwkH37C8ZxWC .icon-shape p,#mermaid-svg-akc5DwkH37C8ZxWC .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-akc5DwkH37C8ZxWC .icon-shape .label rect,#mermaid-svg-akc5DwkH37C8ZxWC .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-akc5DwkH37C8ZxWC .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-akc5DwkH37C8ZxWC .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-akc5DwkH37C8ZxWC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 对象图
borrowed by
borrows
book1:Book

book_id=B001

title=Python编程

is_borrowed=true
reader1:Reader

reader_id=R001

name=张三
book2:Book

book_id=B002

title=Java编程

is_borrowed=false

对象图代码示例:

python 复制代码
# 对象图示例
# 创建对象实例
book1 = {
    "对象名": "book1",
    "类名": "Book",
    "属性": {
        "book_id": "B001",
        "title": "Python编程",
        "author": "张三",
        "is_borrowed": True
    }
}

book2 = {
    "对象名": "book2",
    "类名": "Book",
    "属性": {
        "book_id": "B002",
        "title": "Java编程",
        "author": "李四",
        "is_borrowed": False
    }
}

reader1 = {
    "对象名": "reader1",
    "类名": "Reader",
    "属性": {
        "reader_id": "R001",
        "name": "王五",
        "max_books": 5
    }
}

# 对象之间的关系
links = [
    {"from": "book1", "to": "reader1", "type": "borrowed by"},
    {"from": "reader1", "to": "book1", "type": "borrows"}
]

💡 四、用例图的表示法

(一)参与者的表示

参与者使用小人形表示。

参与者表示:

复制代码
  O
 /|\
 / \

参与者示例:
#mermaid-svg-iBofbGi3JamV0LQ3{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-iBofbGi3JamV0LQ3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-iBofbGi3JamV0LQ3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-iBofbGi3JamV0LQ3 .error-icon{fill:#552222;}#mermaid-svg-iBofbGi3JamV0LQ3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-iBofbGi3JamV0LQ3 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-iBofbGi3JamV0LQ3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-iBofbGi3JamV0LQ3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-iBofbGi3JamV0LQ3 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-iBofbGi3JamV0LQ3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-iBofbGi3JamV0LQ3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-iBofbGi3JamV0LQ3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-iBofbGi3JamV0LQ3 .marker.cross{stroke:#333333;}#mermaid-svg-iBofbGi3JamV0LQ3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-iBofbGi3JamV0LQ3 p{margin:0;}#mermaid-svg-iBofbGi3JamV0LQ3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-iBofbGi3JamV0LQ3 .cluster-label text{fill:#333;}#mermaid-svg-iBofbGi3JamV0LQ3 .cluster-label span{color:#333;}#mermaid-svg-iBofbGi3JamV0LQ3 .cluster-label span p{background-color:transparent;}#mermaid-svg-iBofbGi3JamV0LQ3 .label text,#mermaid-svg-iBofbGi3JamV0LQ3 span{fill:#333;color:#333;}#mermaid-svg-iBofbGi3JamV0LQ3 .node rect,#mermaid-svg-iBofbGi3JamV0LQ3 .node circle,#mermaid-svg-iBofbGi3JamV0LQ3 .node ellipse,#mermaid-svg-iBofbGi3JamV0LQ3 .node polygon,#mermaid-svg-iBofbGi3JamV0LQ3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-iBofbGi3JamV0LQ3 .rough-node .label text,#mermaid-svg-iBofbGi3JamV0LQ3 .node .label text,#mermaid-svg-iBofbGi3JamV0LQ3 .image-shape .label,#mermaid-svg-iBofbGi3JamV0LQ3 .icon-shape .label{text-anchor:middle;}#mermaid-svg-iBofbGi3JamV0LQ3 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-iBofbGi3JamV0LQ3 .rough-node .label,#mermaid-svg-iBofbGi3JamV0LQ3 .node .label,#mermaid-svg-iBofbGi3JamV0LQ3 .image-shape .label,#mermaid-svg-iBofbGi3JamV0LQ3 .icon-shape .label{text-align:center;}#mermaid-svg-iBofbGi3JamV0LQ3 .node.clickable{cursor:pointer;}#mermaid-svg-iBofbGi3JamV0LQ3 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-iBofbGi3JamV0LQ3 .arrowheadPath{fill:#333333;}#mermaid-svg-iBofbGi3JamV0LQ3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-iBofbGi3JamV0LQ3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-iBofbGi3JamV0LQ3 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-iBofbGi3JamV0LQ3 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-iBofbGi3JamV0LQ3 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-iBofbGi3JamV0LQ3 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-iBofbGi3JamV0LQ3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-iBofbGi3JamV0LQ3 .cluster text{fill:#333;}#mermaid-svg-iBofbGi3JamV0LQ3 .cluster span{color:#333;}#mermaid-svg-iBofbGi3JamV0LQ3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-iBofbGi3JamV0LQ3 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-iBofbGi3JamV0LQ3 rect.text{fill:none;stroke-width:0;}#mermaid-svg-iBofbGi3JamV0LQ3 .icon-shape,#mermaid-svg-iBofbGi3JamV0LQ3 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-iBofbGi3JamV0LQ3 .icon-shape p,#mermaid-svg-iBofbGi3JamV0LQ3 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-iBofbGi3JamV0LQ3 .icon-shape .label rect,#mermaid-svg-iBofbGi3JamV0LQ3 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-iBofbGi3JamV0LQ3 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-iBofbGi3JamV0LQ3 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-iBofbGi3JamV0LQ3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 读者
图书管理员
系统管理员
借阅图书
管理图书
系统配置

(二)用例的表示

用例使用椭圆表示。

用例表示结构:

复制代码
┌─────────┐
│  用例名  │
└─────────┘

用例表示示例:
#mermaid-svg-RLcwtV827se1rMYM{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-RLcwtV827se1rMYM .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-RLcwtV827se1rMYM .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-RLcwtV827se1rMYM .error-icon{fill:#552222;}#mermaid-svg-RLcwtV827se1rMYM .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RLcwtV827se1rMYM .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-RLcwtV827se1rMYM .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RLcwtV827se1rMYM .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RLcwtV827se1rMYM .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-RLcwtV827se1rMYM .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RLcwtV827se1rMYM .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RLcwtV827se1rMYM .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RLcwtV827se1rMYM .marker.cross{stroke:#333333;}#mermaid-svg-RLcwtV827se1rMYM svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RLcwtV827se1rMYM p{margin:0;}#mermaid-svg-RLcwtV827se1rMYM .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-RLcwtV827se1rMYM .cluster-label text{fill:#333;}#mermaid-svg-RLcwtV827se1rMYM .cluster-label span{color:#333;}#mermaid-svg-RLcwtV827se1rMYM .cluster-label span p{background-color:transparent;}#mermaid-svg-RLcwtV827se1rMYM .label text,#mermaid-svg-RLcwtV827se1rMYM span{fill:#333;color:#333;}#mermaid-svg-RLcwtV827se1rMYM .node rect,#mermaid-svg-RLcwtV827se1rMYM .node circle,#mermaid-svg-RLcwtV827se1rMYM .node ellipse,#mermaid-svg-RLcwtV827se1rMYM .node polygon,#mermaid-svg-RLcwtV827se1rMYM .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RLcwtV827se1rMYM .rough-node .label text,#mermaid-svg-RLcwtV827se1rMYM .node .label text,#mermaid-svg-RLcwtV827se1rMYM .image-shape .label,#mermaid-svg-RLcwtV827se1rMYM .icon-shape .label{text-anchor:middle;}#mermaid-svg-RLcwtV827se1rMYM .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-RLcwtV827se1rMYM .rough-node .label,#mermaid-svg-RLcwtV827se1rMYM .node .label,#mermaid-svg-RLcwtV827se1rMYM .image-shape .label,#mermaid-svg-RLcwtV827se1rMYM .icon-shape .label{text-align:center;}#mermaid-svg-RLcwtV827se1rMYM .node.clickable{cursor:pointer;}#mermaid-svg-RLcwtV827se1rMYM .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-RLcwtV827se1rMYM .arrowheadPath{fill:#333333;}#mermaid-svg-RLcwtV827se1rMYM .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-RLcwtV827se1rMYM .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-RLcwtV827se1rMYM .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RLcwtV827se1rMYM .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-RLcwtV827se1rMYM .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RLcwtV827se1rMYM .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-RLcwtV827se1rMYM .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-RLcwtV827se1rMYM .cluster text{fill:#333;}#mermaid-svg-RLcwtV827se1rMYM .cluster span{color:#333;}#mermaid-svg-RLcwtV827se1rMYM div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-RLcwtV827se1rMYM .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-RLcwtV827se1rMYM rect.text{fill:none;stroke-width:0;}#mermaid-svg-RLcwtV827se1rMYM .icon-shape,#mermaid-svg-RLcwtV827se1rMYM .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RLcwtV827se1rMYM .icon-shape p,#mermaid-svg-RLcwtV827se1rMYM .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-RLcwtV827se1rMYM .icon-shape .label rect,#mermaid-svg-RLcwtV827se1rMYM .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RLcwtV827se1rMYM .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-RLcwtV827se1rMYM .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-RLcwtV827se1rMYM :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 读者
借阅图书
归还图书
查询图书
查看借阅记录
图书管理员
管理图书
管理读者
处理借阅

(三)用例关系的表示

用例关系类型:

关系 符号 说明
关联 实线 参与者与用例
包含 虚线箭头 + <> 必须包含
扩展 虚线箭头 + <> 可选扩展
泛化 实线空心三角 用例继承

用例关系示例:
渲染错误: Mermaid 渲染失败: Parse error on line 13: ... UC6 -.- UC5 : < > ----------------------^ Expecting 'SEMI', 'NEWLINE', 'EOF', 'AMP', 'START_LINK', 'LINK', 'LINK_ID', got 'COLON'

用例关系代码示例:

python 复制代码
# 用例关系示例
class UseCaseRelationships:
    """用例关系"""
    
    def __init__(self):
        self.use_cases = {}
        self.relationships = []
    
    def add_use_case(self, name, description):
        self.use_cases[name] = description
    
    def add_include(self, base, included):
        """包含关系 - 必须执行"""
        self.relationships.append({
            "type": "include",
            "base": base,
            "included": included
        })
    
    def add_extend(self, base, extended):
        """扩展关系 - 可选执行"""
        self.relationships.append({
            "type": "extend",
            "base": base,
            "extended": extended
        })
    
    def add_generalization(self, parent, child):
        """泛化关系 - 继承"""
        self.relationships.append({
            "type": "generalization",
            "parent": parent,
            "child": child
        })

# 使用示例
uc = UseCaseRelationships()
uc.add_use_case("借阅图书", "读者借阅图书")
uc.add_use_case("验证身份", "验证读者身份")
uc.add_use_case("预约图书", "预约已借出图书")

# 借阅图书包含验证身份
uc.add_include("借阅图书", "验证身份")

# 借阅图书扩展预约图书
uc.add_extend("借阅图书", "预约图书")

📊 五、状态图的表示法

(一)状态的表示

状态使用圆角矩形表示。

状态表示结构:

复制代码
┌─────────────────┐
│    状态名       │
├─────────────────┤
│  进入动作/      │
│  内部动作/      │
│  退出动作       │
└─────────────────┘

状态表示示例:
#mermaid-svg-NbvxZfb9ksdoDnMk{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-NbvxZfb9ksdoDnMk .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-NbvxZfb9ksdoDnMk .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-NbvxZfb9ksdoDnMk .error-icon{fill:#552222;}#mermaid-svg-NbvxZfb9ksdoDnMk .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NbvxZfb9ksdoDnMk .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-NbvxZfb9ksdoDnMk .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NbvxZfb9ksdoDnMk .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NbvxZfb9ksdoDnMk .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-NbvxZfb9ksdoDnMk .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NbvxZfb9ksdoDnMk .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NbvxZfb9ksdoDnMk .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NbvxZfb9ksdoDnMk .marker.cross{stroke:#333333;}#mermaid-svg-NbvxZfb9ksdoDnMk svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NbvxZfb9ksdoDnMk p{margin:0;}#mermaid-svg-NbvxZfb9ksdoDnMk defs #statediagram-barbEnd{fill:#333333;stroke:#333333;}#mermaid-svg-NbvxZfb9ksdoDnMk g.stateGroup text{fill:#9370DB;stroke:none;font-size:10px;}#mermaid-svg-NbvxZfb9ksdoDnMk g.stateGroup text{fill:#333;stroke:none;font-size:10px;}#mermaid-svg-NbvxZfb9ksdoDnMk g.stateGroup .state-title{font-weight:bolder;fill:#131300;}#mermaid-svg-NbvxZfb9ksdoDnMk g.stateGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-NbvxZfb9ksdoDnMk g.stateGroup line{stroke:#333333;stroke-width:1;}#mermaid-svg-NbvxZfb9ksdoDnMk .transition{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-NbvxZfb9ksdoDnMk .stateGroup .composit{fill:white;border-bottom:1px;}#mermaid-svg-NbvxZfb9ksdoDnMk .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#mermaid-svg-NbvxZfb9ksdoDnMk .state-note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-NbvxZfb9ksdoDnMk .state-note text{fill:black;stroke:none;font-size:10px;}#mermaid-svg-NbvxZfb9ksdoDnMk .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-NbvxZfb9ksdoDnMk .edgeLabel .label rect{fill:#ECECFF;opacity:0.5;}#mermaid-svg-NbvxZfb9ksdoDnMk .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-NbvxZfb9ksdoDnMk .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-NbvxZfb9ksdoDnMk .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-NbvxZfb9ksdoDnMk .edgeLabel .label text{fill:#333;}#mermaid-svg-NbvxZfb9ksdoDnMk .label div .edgeLabel{color:#333;}#mermaid-svg-NbvxZfb9ksdoDnMk .stateLabel text{fill:#131300;font-size:10px;font-weight:bold;}#mermaid-svg-NbvxZfb9ksdoDnMk .node circle.state-start{fill:#333333;stroke:#333333;}#mermaid-svg-NbvxZfb9ksdoDnMk .node .fork-join{fill:#333333;stroke:#333333;}#mermaid-svg-NbvxZfb9ksdoDnMk .node circle.state-end{fill:#9370DB;stroke:white;stroke-width:1.5;}#mermaid-svg-NbvxZfb9ksdoDnMk .end-state-inner{fill:white;stroke-width:1.5;}#mermaid-svg-NbvxZfb9ksdoDnMk .node rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NbvxZfb9ksdoDnMk .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NbvxZfb9ksdoDnMk #statediagram-barbEnd{fill:#333333;}#mermaid-svg-NbvxZfb9ksdoDnMk .statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NbvxZfb9ksdoDnMk .cluster-label,#mermaid-svg-NbvxZfb9ksdoDnMk .nodeLabel{color:#131300;}#mermaid-svg-NbvxZfb9ksdoDnMk .statediagram-cluster rect.outer{rx:5px;ry:5px;}#mermaid-svg-NbvxZfb9ksdoDnMk .statediagram-state .divider{stroke:#9370DB;}#mermaid-svg-NbvxZfb9ksdoDnMk .statediagram-state .title-state{rx:5px;ry:5px;}#mermaid-svg-NbvxZfb9ksdoDnMk .statediagram-cluster.statediagram-cluster .inner{fill:white;}#mermaid-svg-NbvxZfb9ksdoDnMk .statediagram-cluster.statediagram-cluster-alt .inner{fill:#f0f0f0;}#mermaid-svg-NbvxZfb9ksdoDnMk .statediagram-cluster .inner{rx:0;ry:0;}#mermaid-svg-NbvxZfb9ksdoDnMk .statediagram-state rect.basic{rx:5px;ry:5px;}#mermaid-svg-NbvxZfb9ksdoDnMk .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#f0f0f0;}#mermaid-svg-NbvxZfb9ksdoDnMk .note-edge{stroke-dasharray:5;}#mermaid-svg-NbvxZfb9ksdoDnMk .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-NbvxZfb9ksdoDnMk .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-NbvxZfb9ksdoDnMk .statediagram-note text{fill:black;}#mermaid-svg-NbvxZfb9ksdoDnMk .statediagram-note .nodeLabel{color:black;}#mermaid-svg-NbvxZfb9ksdoDnMk .statediagram .edgeLabel{color:red;}#mermaid-svg-NbvxZfb9ksdoDnMk #dependencyStart,#mermaid-svg-NbvxZfb9ksdoDnMk #dependencyEnd{fill:#333333;stroke:#333333;stroke-width:1;}#mermaid-svg-NbvxZfb9ksdoDnMk .statediagramTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-NbvxZfb9ksdoDnMk :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 借阅
归还
可借阅
预约
取消预约
在馆
预约中
已借出

(二)转换的表示

转换使用箭头表示,包含触发事件、守卫条件和动作。

转换表示格式:

复制代码
触发事件 [守卫条件] / 动作

转换表示示例:
#mermaid-svg-pG4RNnHBl8IBwlsy{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-pG4RNnHBl8IBwlsy .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-pG4RNnHBl8IBwlsy .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-pG4RNnHBl8IBwlsy .error-icon{fill:#552222;}#mermaid-svg-pG4RNnHBl8IBwlsy .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-pG4RNnHBl8IBwlsy .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-pG4RNnHBl8IBwlsy .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-pG4RNnHBl8IBwlsy .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-pG4RNnHBl8IBwlsy .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-pG4RNnHBl8IBwlsy .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-pG4RNnHBl8IBwlsy .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-pG4RNnHBl8IBwlsy .marker{fill:#333333;stroke:#333333;}#mermaid-svg-pG4RNnHBl8IBwlsy .marker.cross{stroke:#333333;}#mermaid-svg-pG4RNnHBl8IBwlsy svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-pG4RNnHBl8IBwlsy p{margin:0;}#mermaid-svg-pG4RNnHBl8IBwlsy defs #statediagram-barbEnd{fill:#333333;stroke:#333333;}#mermaid-svg-pG4RNnHBl8IBwlsy g.stateGroup text{fill:#9370DB;stroke:none;font-size:10px;}#mermaid-svg-pG4RNnHBl8IBwlsy g.stateGroup text{fill:#333;stroke:none;font-size:10px;}#mermaid-svg-pG4RNnHBl8IBwlsy g.stateGroup .state-title{font-weight:bolder;fill:#131300;}#mermaid-svg-pG4RNnHBl8IBwlsy g.stateGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-pG4RNnHBl8IBwlsy g.stateGroup line{stroke:#333333;stroke-width:1;}#mermaid-svg-pG4RNnHBl8IBwlsy .transition{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-pG4RNnHBl8IBwlsy .stateGroup .composit{fill:white;border-bottom:1px;}#mermaid-svg-pG4RNnHBl8IBwlsy .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#mermaid-svg-pG4RNnHBl8IBwlsy .state-note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-pG4RNnHBl8IBwlsy .state-note text{fill:black;stroke:none;font-size:10px;}#mermaid-svg-pG4RNnHBl8IBwlsy .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-pG4RNnHBl8IBwlsy .edgeLabel .label rect{fill:#ECECFF;opacity:0.5;}#mermaid-svg-pG4RNnHBl8IBwlsy .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-pG4RNnHBl8IBwlsy .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-pG4RNnHBl8IBwlsy .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-pG4RNnHBl8IBwlsy .edgeLabel .label text{fill:#333;}#mermaid-svg-pG4RNnHBl8IBwlsy .label div .edgeLabel{color:#333;}#mermaid-svg-pG4RNnHBl8IBwlsy .stateLabel text{fill:#131300;font-size:10px;font-weight:bold;}#mermaid-svg-pG4RNnHBl8IBwlsy .node circle.state-start{fill:#333333;stroke:#333333;}#mermaid-svg-pG4RNnHBl8IBwlsy .node .fork-join{fill:#333333;stroke:#333333;}#mermaid-svg-pG4RNnHBl8IBwlsy .node circle.state-end{fill:#9370DB;stroke:white;stroke-width:1.5;}#mermaid-svg-pG4RNnHBl8IBwlsy .end-state-inner{fill:white;stroke-width:1.5;}#mermaid-svg-pG4RNnHBl8IBwlsy .node rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-pG4RNnHBl8IBwlsy .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-pG4RNnHBl8IBwlsy #statediagram-barbEnd{fill:#333333;}#mermaid-svg-pG4RNnHBl8IBwlsy .statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-pG4RNnHBl8IBwlsy .cluster-label,#mermaid-svg-pG4RNnHBl8IBwlsy .nodeLabel{color:#131300;}#mermaid-svg-pG4RNnHBl8IBwlsy .statediagram-cluster rect.outer{rx:5px;ry:5px;}#mermaid-svg-pG4RNnHBl8IBwlsy .statediagram-state .divider{stroke:#9370DB;}#mermaid-svg-pG4RNnHBl8IBwlsy .statediagram-state .title-state{rx:5px;ry:5px;}#mermaid-svg-pG4RNnHBl8IBwlsy .statediagram-cluster.statediagram-cluster .inner{fill:white;}#mermaid-svg-pG4RNnHBl8IBwlsy .statediagram-cluster.statediagram-cluster-alt .inner{fill:#f0f0f0;}#mermaid-svg-pG4RNnHBl8IBwlsy .statediagram-cluster .inner{rx:0;ry:0;}#mermaid-svg-pG4RNnHBl8IBwlsy .statediagram-state rect.basic{rx:5px;ry:5px;}#mermaid-svg-pG4RNnHBl8IBwlsy .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#f0f0f0;}#mermaid-svg-pG4RNnHBl8IBwlsy .note-edge{stroke-dasharray:5;}#mermaid-svg-pG4RNnHBl8IBwlsy .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-pG4RNnHBl8IBwlsy .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-pG4RNnHBl8IBwlsy .statediagram-note text{fill:black;}#mermaid-svg-pG4RNnHBl8IBwlsy .statediagram-note .nodeLabel{color:black;}#mermaid-svg-pG4RNnHBl8IBwlsy .statediagram .edgeLabel{color:red;}#mermaid-svg-pG4RNnHBl8IBwlsy #dependencyStart,#mermaid-svg-pG4RNnHBl8IBwlsy #dependencyEnd{fill:#333333;stroke:#333333;stroke-width:1;}#mermaid-svg-pG4RNnHBl8IBwlsy .statediagramTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-pG4RNnHBl8IBwlsy :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 收到请求 有效 / 开始处理
处理完成 / 返回结果
处理失败 / 记录错误
空闲
等待请求
处理中
验证通过
验证
执行
完成
错误

转换代码示例:

python 复制代码
# 状态转换示例
class Book:
    """图书类 - 状态转换"""
    
    def __init__(self, book_id, title):
        self.book_id = book_id
        self.title = title
        self.state = "可借阅"
        self.borrower = None
    
    # 转换:可借阅 -> 已借出
    # 触发事件:借阅
    # 守卫条件:图书可借
    # 动作:设置借阅者
    def on_borrow(self, reader):
        """借阅事件"""
        if self.state == "可借阅":  # 守卫条件
            self.state = "已借出"   # 状态转换
            self.borrower = reader  # 动作
            return True
        return False
    
    # 转换:已借出 -> 可借阅
    # 触发事件:归还
    # 守卫条件:图书已借出
    # 动作:清除借阅者
    def on_return(self):
        """归还事件"""
        if self.state == "已借出":  # 守卫条件
            self.state = "可借阅"   # 状态转换
            self.borrower = None    # 动作
            return True
        return False

(三)复合状态的表示

复合状态包含子状态。

复合状态示例:
#mermaid-svg-2Kq6reX7CueeIv9l{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-2Kq6reX7CueeIv9l .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2Kq6reX7CueeIv9l .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2Kq6reX7CueeIv9l .error-icon{fill:#552222;}#mermaid-svg-2Kq6reX7CueeIv9l .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2Kq6reX7CueeIv9l .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2Kq6reX7CueeIv9l .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2Kq6reX7CueeIv9l .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2Kq6reX7CueeIv9l .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2Kq6reX7CueeIv9l .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2Kq6reX7CueeIv9l .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2Kq6reX7CueeIv9l .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2Kq6reX7CueeIv9l .marker.cross{stroke:#333333;}#mermaid-svg-2Kq6reX7CueeIv9l svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2Kq6reX7CueeIv9l p{margin:0;}#mermaid-svg-2Kq6reX7CueeIv9l defs #statediagram-barbEnd{fill:#333333;stroke:#333333;}#mermaid-svg-2Kq6reX7CueeIv9l g.stateGroup text{fill:#9370DB;stroke:none;font-size:10px;}#mermaid-svg-2Kq6reX7CueeIv9l g.stateGroup text{fill:#333;stroke:none;font-size:10px;}#mermaid-svg-2Kq6reX7CueeIv9l g.stateGroup .state-title{font-weight:bolder;fill:#131300;}#mermaid-svg-2Kq6reX7CueeIv9l g.stateGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-2Kq6reX7CueeIv9l g.stateGroup line{stroke:#333333;stroke-width:1;}#mermaid-svg-2Kq6reX7CueeIv9l .transition{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-2Kq6reX7CueeIv9l .stateGroup .composit{fill:white;border-bottom:1px;}#mermaid-svg-2Kq6reX7CueeIv9l .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#mermaid-svg-2Kq6reX7CueeIv9l .state-note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-2Kq6reX7CueeIv9l .state-note text{fill:black;stroke:none;font-size:10px;}#mermaid-svg-2Kq6reX7CueeIv9l .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-2Kq6reX7CueeIv9l .edgeLabel .label rect{fill:#ECECFF;opacity:0.5;}#mermaid-svg-2Kq6reX7CueeIv9l .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2Kq6reX7CueeIv9l .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-2Kq6reX7CueeIv9l .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2Kq6reX7CueeIv9l .edgeLabel .label text{fill:#333;}#mermaid-svg-2Kq6reX7CueeIv9l .label div .edgeLabel{color:#333;}#mermaid-svg-2Kq6reX7CueeIv9l .stateLabel text{fill:#131300;font-size:10px;font-weight:bold;}#mermaid-svg-2Kq6reX7CueeIv9l .node circle.state-start{fill:#333333;stroke:#333333;}#mermaid-svg-2Kq6reX7CueeIv9l .node .fork-join{fill:#333333;stroke:#333333;}#mermaid-svg-2Kq6reX7CueeIv9l .node circle.state-end{fill:#9370DB;stroke:white;stroke-width:1.5;}#mermaid-svg-2Kq6reX7CueeIv9l .end-state-inner{fill:white;stroke-width:1.5;}#mermaid-svg-2Kq6reX7CueeIv9l .node rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2Kq6reX7CueeIv9l .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2Kq6reX7CueeIv9l #statediagram-barbEnd{fill:#333333;}#mermaid-svg-2Kq6reX7CueeIv9l .statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2Kq6reX7CueeIv9l .cluster-label,#mermaid-svg-2Kq6reX7CueeIv9l .nodeLabel{color:#131300;}#mermaid-svg-2Kq6reX7CueeIv9l .statediagram-cluster rect.outer{rx:5px;ry:5px;}#mermaid-svg-2Kq6reX7CueeIv9l .statediagram-state .divider{stroke:#9370DB;}#mermaid-svg-2Kq6reX7CueeIv9l .statediagram-state .title-state{rx:5px;ry:5px;}#mermaid-svg-2Kq6reX7CueeIv9l .statediagram-cluster.statediagram-cluster .inner{fill:white;}#mermaid-svg-2Kq6reX7CueeIv9l .statediagram-cluster.statediagram-cluster-alt .inner{fill:#f0f0f0;}#mermaid-svg-2Kq6reX7CueeIv9l .statediagram-cluster .inner{rx:0;ry:0;}#mermaid-svg-2Kq6reX7CueeIv9l .statediagram-state rect.basic{rx:5px;ry:5px;}#mermaid-svg-2Kq6reX7CueeIv9l .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#f0f0f0;}#mermaid-svg-2Kq6reX7CueeIv9l .note-edge{stroke-dasharray:5;}#mermaid-svg-2Kq6reX7CueeIv9l .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-2Kq6reX7CueeIv9l .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-2Kq6reX7CueeIv9l .statediagram-note text{fill:black;}#mermaid-svg-2Kq6reX7CueeIv9l .statediagram-note .nodeLabel{color:black;}#mermaid-svg-2Kq6reX7CueeIv9l .statediagram .edgeLabel{color:red;}#mermaid-svg-2Kq6reX7CueeIv9l #dependencyStart,#mermaid-svg-2Kq6reX7CueeIv9l #dependencyEnd{fill:#333333;stroke:#333333;stroke-width:1;}#mermaid-svg-2Kq6reX7CueeIv9l .statediagramTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-2Kq6reX7CueeIv9l :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 长时间空闲
收到任务
活跃
任务增加
任务完成
任务过多
任务减少
正常
忙碌
过载
休眠
省电模式
收到唤醒
待机
低功耗

📝 六、活动图的表示法

(一)活动的表示

活动使用圆角矩形表示。

活动表示结构:

复制代码
┌─────────────────┐
│    活动名       │
└─────────────────┘

活动表示示例:
#mermaid-svg-hzKmLMM5xfIt0mJW{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-hzKmLMM5xfIt0mJW .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-hzKmLMM5xfIt0mJW .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-hzKmLMM5xfIt0mJW .error-icon{fill:#552222;}#mermaid-svg-hzKmLMM5xfIt0mJW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hzKmLMM5xfIt0mJW .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-hzKmLMM5xfIt0mJW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hzKmLMM5xfIt0mJW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hzKmLMM5xfIt0mJW .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-hzKmLMM5xfIt0mJW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hzKmLMM5xfIt0mJW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hzKmLMM5xfIt0mJW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hzKmLMM5xfIt0mJW .marker.cross{stroke:#333333;}#mermaid-svg-hzKmLMM5xfIt0mJW svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hzKmLMM5xfIt0mJW p{margin:0;}#mermaid-svg-hzKmLMM5xfIt0mJW .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hzKmLMM5xfIt0mJW .cluster-label text{fill:#333;}#mermaid-svg-hzKmLMM5xfIt0mJW .cluster-label span{color:#333;}#mermaid-svg-hzKmLMM5xfIt0mJW .cluster-label span p{background-color:transparent;}#mermaid-svg-hzKmLMM5xfIt0mJW .label text,#mermaid-svg-hzKmLMM5xfIt0mJW span{fill:#333;color:#333;}#mermaid-svg-hzKmLMM5xfIt0mJW .node rect,#mermaid-svg-hzKmLMM5xfIt0mJW .node circle,#mermaid-svg-hzKmLMM5xfIt0mJW .node ellipse,#mermaid-svg-hzKmLMM5xfIt0mJW .node polygon,#mermaid-svg-hzKmLMM5xfIt0mJW .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hzKmLMM5xfIt0mJW .rough-node .label text,#mermaid-svg-hzKmLMM5xfIt0mJW .node .label text,#mermaid-svg-hzKmLMM5xfIt0mJW .image-shape .label,#mermaid-svg-hzKmLMM5xfIt0mJW .icon-shape .label{text-anchor:middle;}#mermaid-svg-hzKmLMM5xfIt0mJW .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-hzKmLMM5xfIt0mJW .rough-node .label,#mermaid-svg-hzKmLMM5xfIt0mJW .node .label,#mermaid-svg-hzKmLMM5xfIt0mJW .image-shape .label,#mermaid-svg-hzKmLMM5xfIt0mJW .icon-shape .label{text-align:center;}#mermaid-svg-hzKmLMM5xfIt0mJW .node.clickable{cursor:pointer;}#mermaid-svg-hzKmLMM5xfIt0mJW .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-hzKmLMM5xfIt0mJW .arrowheadPath{fill:#333333;}#mermaid-svg-hzKmLMM5xfIt0mJW .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hzKmLMM5xfIt0mJW .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hzKmLMM5xfIt0mJW .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hzKmLMM5xfIt0mJW .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-hzKmLMM5xfIt0mJW .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hzKmLMM5xfIt0mJW .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-hzKmLMM5xfIt0mJW .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hzKmLMM5xfIt0mJW .cluster text{fill:#333;}#mermaid-svg-hzKmLMM5xfIt0mJW .cluster span{color:#333;}#mermaid-svg-hzKmLMM5xfIt0mJW div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hzKmLMM5xfIt0mJW .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-hzKmLMM5xfIt0mJW rect.text{fill:none;stroke-width:0;}#mermaid-svg-hzKmLMM5xfIt0mJW .icon-shape,#mermaid-svg-hzKmLMM5xfIt0mJW .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hzKmLMM5xfIt0mJW .icon-shape p,#mermaid-svg-hzKmLMM5xfIt0mJW .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-hzKmLMM5xfIt0mJW .icon-shape .label rect,#mermaid-svg-hzKmLMM5xfIt0mJW .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hzKmLMM5xfIt0mJW .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-hzKmLMM5xfIt0mJW .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-hzKmLMM5xfIt0mJW :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否
是
否
开始
选择图书
图书可借?
检查读者资格
提示图书已借出
读者可借?
创建借阅记录
提示达到借阅上限
更新图书状态
保存记录
结束

(二)分支与合并的表示

分支 使用菱形表示,合并也使用菱形表示。

分支与合并示例:
#mermaid-svg-kBnNQSzP7ftRaZBG{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-kBnNQSzP7ftRaZBG .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-kBnNQSzP7ftRaZBG .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-kBnNQSzP7ftRaZBG .error-icon{fill:#552222;}#mermaid-svg-kBnNQSzP7ftRaZBG .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kBnNQSzP7ftRaZBG .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-kBnNQSzP7ftRaZBG .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kBnNQSzP7ftRaZBG .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kBnNQSzP7ftRaZBG .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-kBnNQSzP7ftRaZBG .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kBnNQSzP7ftRaZBG .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kBnNQSzP7ftRaZBG .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kBnNQSzP7ftRaZBG .marker.cross{stroke:#333333;}#mermaid-svg-kBnNQSzP7ftRaZBG svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kBnNQSzP7ftRaZBG p{margin:0;}#mermaid-svg-kBnNQSzP7ftRaZBG .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-kBnNQSzP7ftRaZBG .cluster-label text{fill:#333;}#mermaid-svg-kBnNQSzP7ftRaZBG .cluster-label span{color:#333;}#mermaid-svg-kBnNQSzP7ftRaZBG .cluster-label span p{background-color:transparent;}#mermaid-svg-kBnNQSzP7ftRaZBG .label text,#mermaid-svg-kBnNQSzP7ftRaZBG span{fill:#333;color:#333;}#mermaid-svg-kBnNQSzP7ftRaZBG .node rect,#mermaid-svg-kBnNQSzP7ftRaZBG .node circle,#mermaid-svg-kBnNQSzP7ftRaZBG .node ellipse,#mermaid-svg-kBnNQSzP7ftRaZBG .node polygon,#mermaid-svg-kBnNQSzP7ftRaZBG .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kBnNQSzP7ftRaZBG .rough-node .label text,#mermaid-svg-kBnNQSzP7ftRaZBG .node .label text,#mermaid-svg-kBnNQSzP7ftRaZBG .image-shape .label,#mermaid-svg-kBnNQSzP7ftRaZBG .icon-shape .label{text-anchor:middle;}#mermaid-svg-kBnNQSzP7ftRaZBG .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-kBnNQSzP7ftRaZBG .rough-node .label,#mermaid-svg-kBnNQSzP7ftRaZBG .node .label,#mermaid-svg-kBnNQSzP7ftRaZBG .image-shape .label,#mermaid-svg-kBnNQSzP7ftRaZBG .icon-shape .label{text-align:center;}#mermaid-svg-kBnNQSzP7ftRaZBG .node.clickable{cursor:pointer;}#mermaid-svg-kBnNQSzP7ftRaZBG .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-kBnNQSzP7ftRaZBG .arrowheadPath{fill:#333333;}#mermaid-svg-kBnNQSzP7ftRaZBG .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kBnNQSzP7ftRaZBG .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kBnNQSzP7ftRaZBG .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kBnNQSzP7ftRaZBG .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-kBnNQSzP7ftRaZBG .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kBnNQSzP7ftRaZBG .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-kBnNQSzP7ftRaZBG .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kBnNQSzP7ftRaZBG .cluster text{fill:#333;}#mermaid-svg-kBnNQSzP7ftRaZBG .cluster span{color:#333;}#mermaid-svg-kBnNQSzP7ftRaZBG div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-kBnNQSzP7ftRaZBG .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-kBnNQSzP7ftRaZBG rect.text{fill:none;stroke-width:0;}#mermaid-svg-kBnNQSzP7ftRaZBG .icon-shape,#mermaid-svg-kBnNQSzP7ftRaZBG .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kBnNQSzP7ftRaZBG .icon-shape p,#mermaid-svg-kBnNQSzP7ftRaZBG .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-kBnNQSzP7ftRaZBG .icon-shape .label rect,#mermaid-svg-kBnNQSzP7ftRaZBG .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kBnNQSzP7ftRaZBG .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-kBnNQSzP7ftRaZBG .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-kBnNQSzP7ftRaZBG :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 借阅
归还
查询
是
否
开始
处理请求
请求类型?
借阅处理
归还处理
查询处理
更新记录
返回结果
处理成功?
返回成功
返回失败
结束

(三)分叉与汇合的表示

分叉 使用粗黑线表示,汇合也使用粗黑线表示。

分叉与汇合示例:
#mermaid-svg-w7jGeqKNHcCCFydV{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-w7jGeqKNHcCCFydV .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-w7jGeqKNHcCCFydV .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-w7jGeqKNHcCCFydV .error-icon{fill:#552222;}#mermaid-svg-w7jGeqKNHcCCFydV .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-w7jGeqKNHcCCFydV .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-w7jGeqKNHcCCFydV .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-w7jGeqKNHcCCFydV .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-w7jGeqKNHcCCFydV .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-w7jGeqKNHcCCFydV .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-w7jGeqKNHcCCFydV .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-w7jGeqKNHcCCFydV .marker{fill:#333333;stroke:#333333;}#mermaid-svg-w7jGeqKNHcCCFydV .marker.cross{stroke:#333333;}#mermaid-svg-w7jGeqKNHcCCFydV svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-w7jGeqKNHcCCFydV p{margin:0;}#mermaid-svg-w7jGeqKNHcCCFydV .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-w7jGeqKNHcCCFydV .cluster-label text{fill:#333;}#mermaid-svg-w7jGeqKNHcCCFydV .cluster-label span{color:#333;}#mermaid-svg-w7jGeqKNHcCCFydV .cluster-label span p{background-color:transparent;}#mermaid-svg-w7jGeqKNHcCCFydV .label text,#mermaid-svg-w7jGeqKNHcCCFydV span{fill:#333;color:#333;}#mermaid-svg-w7jGeqKNHcCCFydV .node rect,#mermaid-svg-w7jGeqKNHcCCFydV .node circle,#mermaid-svg-w7jGeqKNHcCCFydV .node ellipse,#mermaid-svg-w7jGeqKNHcCCFydV .node polygon,#mermaid-svg-w7jGeqKNHcCCFydV .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-w7jGeqKNHcCCFydV .rough-node .label text,#mermaid-svg-w7jGeqKNHcCCFydV .node .label text,#mermaid-svg-w7jGeqKNHcCCFydV .image-shape .label,#mermaid-svg-w7jGeqKNHcCCFydV .icon-shape .label{text-anchor:middle;}#mermaid-svg-w7jGeqKNHcCCFydV .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-w7jGeqKNHcCCFydV .rough-node .label,#mermaid-svg-w7jGeqKNHcCCFydV .node .label,#mermaid-svg-w7jGeqKNHcCCFydV .image-shape .label,#mermaid-svg-w7jGeqKNHcCCFydV .icon-shape .label{text-align:center;}#mermaid-svg-w7jGeqKNHcCCFydV .node.clickable{cursor:pointer;}#mermaid-svg-w7jGeqKNHcCCFydV .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-w7jGeqKNHcCCFydV .arrowheadPath{fill:#333333;}#mermaid-svg-w7jGeqKNHcCCFydV .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-w7jGeqKNHcCCFydV .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-w7jGeqKNHcCCFydV .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-w7jGeqKNHcCCFydV .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-w7jGeqKNHcCCFydV .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-w7jGeqKNHcCCFydV .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-w7jGeqKNHcCCFydV .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-w7jGeqKNHcCCFydV .cluster text{fill:#333;}#mermaid-svg-w7jGeqKNHcCCFydV .cluster span{color:#333;}#mermaid-svg-w7jGeqKNHcCCFydV div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-w7jGeqKNHcCCFydV .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-w7jGeqKNHcCCFydV rect.text{fill:none;stroke-width:0;}#mermaid-svg-w7jGeqKNHcCCFydV .icon-shape,#mermaid-svg-w7jGeqKNHcCCFydV .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-w7jGeqKNHcCCFydV .icon-shape p,#mermaid-svg-w7jGeqKNHcCCFydV .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-w7jGeqKNHcCCFydV .icon-shape .label rect,#mermaid-svg-w7jGeqKNHcCCFydV .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-w7jGeqKNHcCCFydV .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-w7jGeqKNHcCCFydV .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-w7jGeqKNHcCCFydV :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 开始
初始化
分叉
任务1
任务2
任务3
汇合
汇总结果
结束

活动图代码示例:

python 复制代码
# 活动图示例
class BorrowActivity:
    """借阅活动"""
    
    def __init__(self):
        self.state = "开始"
    
    def execute(self, reader_id, book_id):
        """执行借阅活动"""
        # 活动1:选择图书
        self.state = "选择图书"
        book = self.select_book(book_id)
        
        # 分支:图书可借?
        if not book.is_available():
            self.state = "提示图书已借出"
            return {"success": False, "message": "图书已借出"}
        
        # 活动2:检查读者资格
        self.state = "检查读者资格"
        reader = self.get_reader(reader_id)
        
        # 分支:读者可借?
        if not reader.can_borrow():
            self.state = "提示达到借阅上限"
            return {"success": False, "message": "达到借阅上限"}
        
        # 活动3:创建借阅记录
        self.state = "创建借阅记录"
        record = self.create_record(reader, book)
        
        # 活动4:更新图书状态
        self.state = "更新图书状态"
        book.borrow(reader)
        
        # 活动5:保存记录
        self.state = "保存记录"
        self.save_record(record)
        
        self.state = "结束"
        return {"success": True, "message": "借阅成功"}

🔄 七、顺序图的表示法

(一)对象的表示

对象使用矩形表示,位于图的顶部。

对象表示示例:
数据库 图书 图书服务 读者 数据库 图书 图书服务 读者 #mermaid-svg-ioL3Nf0CjFjB0N3b{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ioL3Nf0CjFjB0N3b .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ioL3Nf0CjFjB0N3b .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ioL3Nf0CjFjB0N3b .error-icon{fill:#552222;}#mermaid-svg-ioL3Nf0CjFjB0N3b .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ioL3Nf0CjFjB0N3b .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ioL3Nf0CjFjB0N3b .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ioL3Nf0CjFjB0N3b .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ioL3Nf0CjFjB0N3b .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ioL3Nf0CjFjB0N3b .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ioL3Nf0CjFjB0N3b .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ioL3Nf0CjFjB0N3b .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ioL3Nf0CjFjB0N3b .marker.cross{stroke:#333333;}#mermaid-svg-ioL3Nf0CjFjB0N3b svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ioL3Nf0CjFjB0N3b p{margin:0;}#mermaid-svg-ioL3Nf0CjFjB0N3b .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-ioL3Nf0CjFjB0N3b text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-ioL3Nf0CjFjB0N3b .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-ioL3Nf0CjFjB0N3b .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-ioL3Nf0CjFjB0N3b .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-ioL3Nf0CjFjB0N3b .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-ioL3Nf0CjFjB0N3b #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-ioL3Nf0CjFjB0N3b .sequenceNumber{fill:white;}#mermaid-svg-ioL3Nf0CjFjB0N3b #sequencenumber{fill:#333;}#mermaid-svg-ioL3Nf0CjFjB0N3b #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-ioL3Nf0CjFjB0N3b .messageText{fill:#333;stroke:none;}#mermaid-svg-ioL3Nf0CjFjB0N3b .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-ioL3Nf0CjFjB0N3b .labelText,#mermaid-svg-ioL3Nf0CjFjB0N3b .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-ioL3Nf0CjFjB0N3b .loopText,#mermaid-svg-ioL3Nf0CjFjB0N3b .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-ioL3Nf0CjFjB0N3b .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-ioL3Nf0CjFjB0N3b .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-ioL3Nf0CjFjB0N3b .noteText,#mermaid-svg-ioL3Nf0CjFjB0N3b .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-ioL3Nf0CjFjB0N3b .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-ioL3Nf0CjFjB0N3b .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-ioL3Nf0CjFjB0N3b .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-ioL3Nf0CjFjB0N3b .actorPopupMenu{position:absolute;}#mermaid-svg-ioL3Nf0CjFjB0N3b .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-ioL3Nf0CjFjB0N3b .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-ioL3Nf0CjFjB0N3b .actor-man circle,#mermaid-svg-ioL3Nf0CjFjB0N3b line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-ioL3Nf0CjFjB0N3b :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 借阅请求 查询图书 返回图书信息 检查可借 可借 借阅 借阅成功 保存记录 保存成功 借阅成功

(二)消息的表示

消息类型:

消息 符号 说明
同步消息 实线实心箭头 等待响应
异步消息 实线空心箭头 不等待响应
返回消息 虚线箭头 返回响应

消息表示示例:
对象C 对象B 对象A 对象C 对象B 对象A #mermaid-svg-Vf9BkKqEOXW0t8XO{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Vf9BkKqEOXW0t8XO .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Vf9BkKqEOXW0t8XO .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Vf9BkKqEOXW0t8XO .error-icon{fill:#552222;}#mermaid-svg-Vf9BkKqEOXW0t8XO .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Vf9BkKqEOXW0t8XO .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Vf9BkKqEOXW0t8XO .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Vf9BkKqEOXW0t8XO .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Vf9BkKqEOXW0t8XO .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Vf9BkKqEOXW0t8XO .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Vf9BkKqEOXW0t8XO .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Vf9BkKqEOXW0t8XO .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Vf9BkKqEOXW0t8XO .marker.cross{stroke:#333333;}#mermaid-svg-Vf9BkKqEOXW0t8XO svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Vf9BkKqEOXW0t8XO p{margin:0;}#mermaid-svg-Vf9BkKqEOXW0t8XO .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Vf9BkKqEOXW0t8XO text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-Vf9BkKqEOXW0t8XO .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-Vf9BkKqEOXW0t8XO .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-Vf9BkKqEOXW0t8XO .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-Vf9BkKqEOXW0t8XO .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-Vf9BkKqEOXW0t8XO #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-Vf9BkKqEOXW0t8XO .sequenceNumber{fill:white;}#mermaid-svg-Vf9BkKqEOXW0t8XO #sequencenumber{fill:#333;}#mermaid-svg-Vf9BkKqEOXW0t8XO #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-Vf9BkKqEOXW0t8XO .messageText{fill:#333;stroke:none;}#mermaid-svg-Vf9BkKqEOXW0t8XO .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Vf9BkKqEOXW0t8XO .labelText,#mermaid-svg-Vf9BkKqEOXW0t8XO .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-Vf9BkKqEOXW0t8XO .loopText,#mermaid-svg-Vf9BkKqEOXW0t8XO .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-Vf9BkKqEOXW0t8XO .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-Vf9BkKqEOXW0t8XO .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-Vf9BkKqEOXW0t8XO .noteText,#mermaid-svg-Vf9BkKqEOXW0t8XO .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-Vf9BkKqEOXW0t8XO .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Vf9BkKqEOXW0t8XO .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Vf9BkKqEOXW0t8XO .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Vf9BkKqEOXW0t8XO .actorPopupMenu{position:absolute;}#mermaid-svg-Vf9BkKqEOXW0t8XO .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-Vf9BkKqEOXW0t8XO .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Vf9BkKqEOXW0t8XO .actor-man circle,#mermaid-svg-Vf9BkKqEOXW0t8XO line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-Vf9BkKqEOXW0t8XO :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 同步消息 返回 异步消息 自调用

(三)生命线与控制焦点的表示

生命线 使用虚线表示,控制焦点使用矩形表示。

生命线与控制焦点示例:
图书服务 读者 图书服务 读者 #mermaid-svg-k9gJIcaj9h7LlJQM{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-k9gJIcaj9h7LlJQM .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-k9gJIcaj9h7LlJQM .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-k9gJIcaj9h7LlJQM .error-icon{fill:#552222;}#mermaid-svg-k9gJIcaj9h7LlJQM .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-k9gJIcaj9h7LlJQM .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-k9gJIcaj9h7LlJQM .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-k9gJIcaj9h7LlJQM .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-k9gJIcaj9h7LlJQM .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-k9gJIcaj9h7LlJQM .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-k9gJIcaj9h7LlJQM .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-k9gJIcaj9h7LlJQM .marker{fill:#333333;stroke:#333333;}#mermaid-svg-k9gJIcaj9h7LlJQM .marker.cross{stroke:#333333;}#mermaid-svg-k9gJIcaj9h7LlJQM svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-k9gJIcaj9h7LlJQM p{margin:0;}#mermaid-svg-k9gJIcaj9h7LlJQM .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-k9gJIcaj9h7LlJQM text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-k9gJIcaj9h7LlJQM .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-k9gJIcaj9h7LlJQM .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-k9gJIcaj9h7LlJQM .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-k9gJIcaj9h7LlJQM .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-k9gJIcaj9h7LlJQM #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-k9gJIcaj9h7LlJQM .sequenceNumber{fill:white;}#mermaid-svg-k9gJIcaj9h7LlJQM #sequencenumber{fill:#333;}#mermaid-svg-k9gJIcaj9h7LlJQM #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-k9gJIcaj9h7LlJQM .messageText{fill:#333;stroke:none;}#mermaid-svg-k9gJIcaj9h7LlJQM .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-k9gJIcaj9h7LlJQM .labelText,#mermaid-svg-k9gJIcaj9h7LlJQM .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-k9gJIcaj9h7LlJQM .loopText,#mermaid-svg-k9gJIcaj9h7LlJQM .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-k9gJIcaj9h7LlJQM .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-k9gJIcaj9h7LlJQM .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-k9gJIcaj9h7LlJQM .noteText,#mermaid-svg-k9gJIcaj9h7LlJQM .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-k9gJIcaj9h7LlJQM .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-k9gJIcaj9h7LlJQM .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-k9gJIcaj9h7LlJQM .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-k9gJIcaj9h7LlJQM .actorPopupMenu{position:absolute;}#mermaid-svg-k9gJIcaj9h7LlJQM .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-k9gJIcaj9h7LlJQM .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-k9gJIcaj9h7LlJQM .actor-man circle,#mermaid-svg-k9gJIcaj9h7LlJQM line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-k9gJIcaj9h7LlJQM :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 借阅请求 验证请求 检查库存 创建记录 返回结果

顺序图代码示例:

python 复制代码
# 顺序图示例
class BorrowSequence:
    """借阅顺序"""
    
    def __init__(self):
        self.messages = []
    
    def add_message(self, sender, receiver, message, msg_type="sync"):
        self.messages.append({
            "sender": sender,
            "receiver": receiver,
            "message": message,
            "type": msg_type
        })
    
    def execute_borrow(self, reader, book):
        """执行借阅顺序"""
        # 1. 读者发送借阅请求到图书服务
        self.add_message("Reader", "BookService", "借阅请求")
        
        # 2. 图书服务查询数据库
        self.add_message("BookService", "Database", "查询图书")
        
        # 3. 数据库返回图书信息
        self.add_message("Database", "BookService", "返回图书信息", "return")
        
        # 4. 图书服务检查图书可借
        self.add_message("BookService", "Book", "检查可借")
        
        # 5. 图书返回可借状态
        self.add_message("Book", "BookService", "可借", "return")
        
        # 6. 图书服务执行借阅
        self.add_message("BookService", "Book", "借阅")
        
        # 7. 图书返回借阅成功
        self.add_message("Book", "BookService", "借阅成功", "return")
        
        # 8. 图书服务保存记录
        self.add_message("BookService", "Database", "保存记录")
        
        # 9. 数据库返回保存成功
        self.add_message("Database", "BookService", "保存成功", "return")
        
        # 10. 图书服务返回结果给读者
        self.add_message("BookService", "Reader", "借阅成功", "return")
        
        return self.messages

📋 八、其他图的表示法

(一)组件图的表示

组件使用带标签的矩形表示。

组件表示示例:
#mermaid-svg-SDxGPEY86SFwXpVf{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-SDxGPEY86SFwXpVf .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-SDxGPEY86SFwXpVf .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-SDxGPEY86SFwXpVf .error-icon{fill:#552222;}#mermaid-svg-SDxGPEY86SFwXpVf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SDxGPEY86SFwXpVf .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-SDxGPEY86SFwXpVf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SDxGPEY86SFwXpVf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SDxGPEY86SFwXpVf .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-SDxGPEY86SFwXpVf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SDxGPEY86SFwXpVf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SDxGPEY86SFwXpVf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SDxGPEY86SFwXpVf .marker.cross{stroke:#333333;}#mermaid-svg-SDxGPEY86SFwXpVf svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SDxGPEY86SFwXpVf p{margin:0;}#mermaid-svg-SDxGPEY86SFwXpVf .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-SDxGPEY86SFwXpVf .cluster-label text{fill:#333;}#mermaid-svg-SDxGPEY86SFwXpVf .cluster-label span{color:#333;}#mermaid-svg-SDxGPEY86SFwXpVf .cluster-label span p{background-color:transparent;}#mermaid-svg-SDxGPEY86SFwXpVf .label text,#mermaid-svg-SDxGPEY86SFwXpVf span{fill:#333;color:#333;}#mermaid-svg-SDxGPEY86SFwXpVf .node rect,#mermaid-svg-SDxGPEY86SFwXpVf .node circle,#mermaid-svg-SDxGPEY86SFwXpVf .node ellipse,#mermaid-svg-SDxGPEY86SFwXpVf .node polygon,#mermaid-svg-SDxGPEY86SFwXpVf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-SDxGPEY86SFwXpVf .rough-node .label text,#mermaid-svg-SDxGPEY86SFwXpVf .node .label text,#mermaid-svg-SDxGPEY86SFwXpVf .image-shape .label,#mermaid-svg-SDxGPEY86SFwXpVf .icon-shape .label{text-anchor:middle;}#mermaid-svg-SDxGPEY86SFwXpVf .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-SDxGPEY86SFwXpVf .rough-node .label,#mermaid-svg-SDxGPEY86SFwXpVf .node .label,#mermaid-svg-SDxGPEY86SFwXpVf .image-shape .label,#mermaid-svg-SDxGPEY86SFwXpVf .icon-shape .label{text-align:center;}#mermaid-svg-SDxGPEY86SFwXpVf .node.clickable{cursor:pointer;}#mermaid-svg-SDxGPEY86SFwXpVf .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-SDxGPEY86SFwXpVf .arrowheadPath{fill:#333333;}#mermaid-svg-SDxGPEY86SFwXpVf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-SDxGPEY86SFwXpVf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-SDxGPEY86SFwXpVf .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SDxGPEY86SFwXpVf .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-SDxGPEY86SFwXpVf .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SDxGPEY86SFwXpVf .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-SDxGPEY86SFwXpVf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-SDxGPEY86SFwXpVf .cluster text{fill:#333;}#mermaid-svg-SDxGPEY86SFwXpVf .cluster span{color:#333;}#mermaid-svg-SDxGPEY86SFwXpVf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-SDxGPEY86SFwXpVf .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-SDxGPEY86SFwXpVf rect.text{fill:none;stroke-width:0;}#mermaid-svg-SDxGPEY86SFwXpVf .icon-shape,#mermaid-svg-SDxGPEY86SFwXpVf .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SDxGPEY86SFwXpVf .icon-shape p,#mermaid-svg-SDxGPEY86SFwXpVf .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-SDxGPEY86SFwXpVf .icon-shape .label rect,#mermaid-svg-SDxGPEY86SFwXpVf .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SDxGPEY86SFwXpVf .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-SDxGPEY86SFwXpVf .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-SDxGPEY86SFwXpVf :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 服务器组件
客户端组件
Web应用
移动应用
Web服务器
应用服务器
数据库服务器

(二)部署图的表示

节点使用三维立方体表示。

部署表示示例:
#mermaid-svg-Gn5IAbbKTWOgZvYm{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Gn5IAbbKTWOgZvYm .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Gn5IAbbKTWOgZvYm .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Gn5IAbbKTWOgZvYm .error-icon{fill:#552222;}#mermaid-svg-Gn5IAbbKTWOgZvYm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Gn5IAbbKTWOgZvYm .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Gn5IAbbKTWOgZvYm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Gn5IAbbKTWOgZvYm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Gn5IAbbKTWOgZvYm .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Gn5IAbbKTWOgZvYm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Gn5IAbbKTWOgZvYm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Gn5IAbbKTWOgZvYm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Gn5IAbbKTWOgZvYm .marker.cross{stroke:#333333;}#mermaid-svg-Gn5IAbbKTWOgZvYm svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Gn5IAbbKTWOgZvYm p{margin:0;}#mermaid-svg-Gn5IAbbKTWOgZvYm .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Gn5IAbbKTWOgZvYm .cluster-label text{fill:#333;}#mermaid-svg-Gn5IAbbKTWOgZvYm .cluster-label span{color:#333;}#mermaid-svg-Gn5IAbbKTWOgZvYm .cluster-label span p{background-color:transparent;}#mermaid-svg-Gn5IAbbKTWOgZvYm .label text,#mermaid-svg-Gn5IAbbKTWOgZvYm span{fill:#333;color:#333;}#mermaid-svg-Gn5IAbbKTWOgZvYm .node rect,#mermaid-svg-Gn5IAbbKTWOgZvYm .node circle,#mermaid-svg-Gn5IAbbKTWOgZvYm .node ellipse,#mermaid-svg-Gn5IAbbKTWOgZvYm .node polygon,#mermaid-svg-Gn5IAbbKTWOgZvYm .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Gn5IAbbKTWOgZvYm .rough-node .label text,#mermaid-svg-Gn5IAbbKTWOgZvYm .node .label text,#mermaid-svg-Gn5IAbbKTWOgZvYm .image-shape .label,#mermaid-svg-Gn5IAbbKTWOgZvYm .icon-shape .label{text-anchor:middle;}#mermaid-svg-Gn5IAbbKTWOgZvYm .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Gn5IAbbKTWOgZvYm .rough-node .label,#mermaid-svg-Gn5IAbbKTWOgZvYm .node .label,#mermaid-svg-Gn5IAbbKTWOgZvYm .image-shape .label,#mermaid-svg-Gn5IAbbKTWOgZvYm .icon-shape .label{text-align:center;}#mermaid-svg-Gn5IAbbKTWOgZvYm .node.clickable{cursor:pointer;}#mermaid-svg-Gn5IAbbKTWOgZvYm .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Gn5IAbbKTWOgZvYm .arrowheadPath{fill:#333333;}#mermaid-svg-Gn5IAbbKTWOgZvYm .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Gn5IAbbKTWOgZvYm .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Gn5IAbbKTWOgZvYm .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Gn5IAbbKTWOgZvYm .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Gn5IAbbKTWOgZvYm .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Gn5IAbbKTWOgZvYm .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Gn5IAbbKTWOgZvYm .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Gn5IAbbKTWOgZvYm .cluster text{fill:#333;}#mermaid-svg-Gn5IAbbKTWOgZvYm .cluster span{color:#333;}#mermaid-svg-Gn5IAbbKTWOgZvYm div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Gn5IAbbKTWOgZvYm .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Gn5IAbbKTWOgZvYm rect.text{fill:none;stroke-width:0;}#mermaid-svg-Gn5IAbbKTWOgZvYm .icon-shape,#mermaid-svg-Gn5IAbbKTWOgZvYm .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Gn5IAbbKTWOgZvYm .icon-shape p,#mermaid-svg-Gn5IAbbKTWOgZvYm .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Gn5IAbbKTWOgZvYm .icon-shape .label rect,#mermaid-svg-Gn5IAbbKTWOgZvYm .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Gn5IAbbKTWOgZvYm .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Gn5IAbbKTWOgZvYm .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Gn5IAbbKTWOgZvYm :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 数据库节点
Web服务器节点
客户端节点
浏览器
Nginx
Tomcat
MySQL
Redis

(三)包图的表示

包使用带标签的文件夹表示。

包表示示例:
#mermaid-svg-GTjkVpMcMhtLMXVr{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-GTjkVpMcMhtLMXVr .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-GTjkVpMcMhtLMXVr .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-GTjkVpMcMhtLMXVr .error-icon{fill:#552222;}#mermaid-svg-GTjkVpMcMhtLMXVr .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GTjkVpMcMhtLMXVr .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-GTjkVpMcMhtLMXVr .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GTjkVpMcMhtLMXVr .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GTjkVpMcMhtLMXVr .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-GTjkVpMcMhtLMXVr .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GTjkVpMcMhtLMXVr .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GTjkVpMcMhtLMXVr .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GTjkVpMcMhtLMXVr .marker.cross{stroke:#333333;}#mermaid-svg-GTjkVpMcMhtLMXVr svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GTjkVpMcMhtLMXVr p{margin:0;}#mermaid-svg-GTjkVpMcMhtLMXVr .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-GTjkVpMcMhtLMXVr .cluster-label text{fill:#333;}#mermaid-svg-GTjkVpMcMhtLMXVr .cluster-label span{color:#333;}#mermaid-svg-GTjkVpMcMhtLMXVr .cluster-label span p{background-color:transparent;}#mermaid-svg-GTjkVpMcMhtLMXVr .label text,#mermaid-svg-GTjkVpMcMhtLMXVr span{fill:#333;color:#333;}#mermaid-svg-GTjkVpMcMhtLMXVr .node rect,#mermaid-svg-GTjkVpMcMhtLMXVr .node circle,#mermaid-svg-GTjkVpMcMhtLMXVr .node ellipse,#mermaid-svg-GTjkVpMcMhtLMXVr .node polygon,#mermaid-svg-GTjkVpMcMhtLMXVr .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GTjkVpMcMhtLMXVr .rough-node .label text,#mermaid-svg-GTjkVpMcMhtLMXVr .node .label text,#mermaid-svg-GTjkVpMcMhtLMXVr .image-shape .label,#mermaid-svg-GTjkVpMcMhtLMXVr .icon-shape .label{text-anchor:middle;}#mermaid-svg-GTjkVpMcMhtLMXVr .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-GTjkVpMcMhtLMXVr .rough-node .label,#mermaid-svg-GTjkVpMcMhtLMXVr .node .label,#mermaid-svg-GTjkVpMcMhtLMXVr .image-shape .label,#mermaid-svg-GTjkVpMcMhtLMXVr .icon-shape .label{text-align:center;}#mermaid-svg-GTjkVpMcMhtLMXVr .node.clickable{cursor:pointer;}#mermaid-svg-GTjkVpMcMhtLMXVr .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-GTjkVpMcMhtLMXVr .arrowheadPath{fill:#333333;}#mermaid-svg-GTjkVpMcMhtLMXVr .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-GTjkVpMcMhtLMXVr .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-GTjkVpMcMhtLMXVr .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-GTjkVpMcMhtLMXVr .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-GTjkVpMcMhtLMXVr .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-GTjkVpMcMhtLMXVr .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-GTjkVpMcMhtLMXVr .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-GTjkVpMcMhtLMXVr .cluster text{fill:#333;}#mermaid-svg-GTjkVpMcMhtLMXVr .cluster span{color:#333;}#mermaid-svg-GTjkVpMcMhtLMXVr div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-GTjkVpMcMhtLMXVr .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-GTjkVpMcMhtLMXVr rect.text{fill:none;stroke-width:0;}#mermaid-svg-GTjkVpMcMhtLMXVr .icon-shape,#mermaid-svg-GTjkVpMcMhtLMXVr .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-GTjkVpMcMhtLMXVr .icon-shape p,#mermaid-svg-GTjkVpMcMhtLMXVr .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-GTjkVpMcMhtLMXVr .icon-shape .label rect,#mermaid-svg-GTjkVpMcMhtLMXVr .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-GTjkVpMcMhtLMXVr .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-GTjkVpMcMhtLMXVr .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-GTjkVpMcMhtLMXVr :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 数据层
业务层
表示层
用户界面
视图
业务服务
控制器
数据访问
实体

📝 总结

UML的表示法是一套标准化的图形符号和语法规则。

🎯 UML表示法概述:

  • 图形符号:矩形、椭圆、菱形、圆形、箭头
  • 语法规则:组合规则、命名规则
  • 语义定义:含义定义、约束条件

📦 类图表示法:

  • 类:矩形,分三部分(类名、属性、操作)
  • 关系:关联、依赖、泛化、实现、聚合、组合
  • 多重性:1、0...1、0...*、1...*等

💡 对象图表示法:

  • 对象:矩形,包含对象名和属性值
  • 链接:对象之间的关系

🌐 用例图表示法:

  • 参与者:小人形
  • 用例:椭圆
  • 关系:关联、包含、扩展、泛化

📊 状态图表示法:

  • 状态:圆角矩形
  • 转换:箭头,包含触发事件、守卫条件、动作
  • 复合状态:包含子状态

📝 活动图表示法:

  • 活动:圆角矩形
  • 分支与合并:菱形
  • 分叉与汇合:粗黑线

🔄 顺序图表示法:

  • 对象:矩形,位于顶部
  • 消息:同步消息、异步消息、返回消息
  • 生命线与控制焦点:虚线和矩形

核心启示:UML的表示法是一套完整的图形符号系统,用于描述系统的各个方面。掌握各种图的表示法,是正确使用UML的基础。在实际工作中,我们需要注意:第一,熟练掌握各种图的基本符号和语法规则;第二,理解各种关系的表示方法(关联、依赖、泛化、实现、聚合、组合);第三,正确使用多重性表示;第四,注意各种图的适用场景;第五,结合实际项目灵活运用。记住:规范的表示法是有效沟通的基础。


相关推荐
記億揺晃着的那天20 小时前
【Agent 架构实战】大模型长期项目开发:决策文档生命周期管理与 CI 门禁治理
软件工程·devops·架构设计·ai agent·文档管理
rolt1 天前
智能机床-06 机械 ISO 23704-4-2026-用UML表示的行业标准
软件工程·产品经理·架构师·uml
️公子1 天前
Claude Code 2.1.289 补上四个 deny 缺口:Agent 权限匹配器的规范化、分层裁决与回归语料
软件工程·ai agent·权限控制·claude code·安全工程
对讲机数码科普3 天前
数字集群对讲工程全流程拆解:DMR/ePDT 制式选型、组网落地与运维实战
运维·软件工程
硅谷秋水3 天前
EmbodiedSWE:面向长时程灵巧机器人的编程智能体
人工智能·机器学习·语言模型·机器人·软件工程
郝学胜-神的一滴3 天前
C++ Templates 03:手写一个Stack看透模板核心机制
开发语言·c++·产品运营·软件工程·产品经理
rolt3 天前
05 医学 ISO 13940-用UML表示的行业标准,健康信息学 — 支持照护连续性的概念体系
软件工程·架构师·uml
️公子3 天前
决策模型开战:Jev / Decisions API / Strands Decider 的 ClosedSet、置信度闸门与混合 Agent
人工智能·大模型·软件工程·agent·决策模型
蜗牛互联网4 天前
从Barclays扩大Claude部署看受监管软件工程的责任重分配
java·大数据·人工智能·后端·软件工程
rolt4 天前
3GPP-5G-用UML表示的行业标准-04电信移动通信
软件工程·ddd·uml·ontology