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