软件工程: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的基础。在实际工作中,我们需要注意:第一,熟练掌握各种图的基本符号和语法规则;第二,理解各种关系的表示方法(关联、依赖、泛化、实现、聚合、组合);第三,正确使用多重性表示;第四,注意各种图的适用场景;第五,结合实际项目灵活运用。记住:规范的表示法是有效沟通的基础。


相关推荐
电子科技圈7 小时前
IAR与东软睿驰达成战略合作,强化软件开发效率与生态协作
设计模式·开源·软件工程·软件构建·代码规范·设计规范·代码复审
皮卡丘不断更9 小时前
Vibe Coding 有了接口原型后:用智能体做一份联调差异单
软件工程·智能体·vibe coding·接口联调
Dola_Zou9 小时前
深入拆解 CmActLicense: 工业级“软授权”的架构设计与安全实践
安全·软件工程·软件加密
帅次21 小时前
Git 常用命令汇总
git·软件工程·开发工具·版本控制·git教程·代码管理·git命令
梁辰兴1 天前
软件工程:对象模型技术方法简介
软件工程·梁辰兴·方法比较·对象模型技术方法简介·omt方法定义·三个模型·omt过程
老郑聊AI业财智造1 天前
Spring AI 技术架构与源码分析
java·人工智能·后端·spring·架构·软件工程
xierui1231231 天前
AI创作工作流状态管理:为什么保存 Prompt仍然无法复现作品
人工智能·自动化·prompt·aigc·软件工程
皮卡丘不断更1 天前
Vibe Coding 做完原型后:给网页项目加上任务、验证和人工确认
人工智能·软件工程
老郑聊AI业财智造1 天前
TensorFlow 技术架构与源码分析
人工智能·python·深度学习·架构·tensorflow·软件工程