软件工程:模块化

📌目录



⚖️ 模块化:软件设计的核心思想

模块化(Modularity)是软件设计的基本原则和核心思想,它将复杂的软件系统分解为若干个相对独立的模块,每个模块完成特定的功能。本文将详细介绍模块化的概念、原则、内聚性、耦合性以及模块化设计方法。

🎯 一、模块化概述

(一)模块化的定义

模块化是将一个复杂的系统分解为若干个相对独立的、具有特定功能的模块的过程。

模块化概念
#mermaid-svg-SJ84yi3QTCzgfTVr{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-SJ84yi3QTCzgfTVr .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-SJ84yi3QTCzgfTVr .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-SJ84yi3QTCzgfTVr .error-icon{fill:#552222;}#mermaid-svg-SJ84yi3QTCzgfTVr .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SJ84yi3QTCzgfTVr .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-SJ84yi3QTCzgfTVr .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SJ84yi3QTCzgfTVr .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SJ84yi3QTCzgfTVr .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-SJ84yi3QTCzgfTVr .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SJ84yi3QTCzgfTVr .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SJ84yi3QTCzgfTVr .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SJ84yi3QTCzgfTVr .marker.cross{stroke:#333333;}#mermaid-svg-SJ84yi3QTCzgfTVr svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SJ84yi3QTCzgfTVr p{margin:0;}#mermaid-svg-SJ84yi3QTCzgfTVr .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-SJ84yi3QTCzgfTVr .cluster-label text{fill:#333;}#mermaid-svg-SJ84yi3QTCzgfTVr .cluster-label span{color:#333;}#mermaid-svg-SJ84yi3QTCzgfTVr .cluster-label span p{background-color:transparent;}#mermaid-svg-SJ84yi3QTCzgfTVr .label text,#mermaid-svg-SJ84yi3QTCzgfTVr span{fill:#333;color:#333;}#mermaid-svg-SJ84yi3QTCzgfTVr .node rect,#mermaid-svg-SJ84yi3QTCzgfTVr .node circle,#mermaid-svg-SJ84yi3QTCzgfTVr .node ellipse,#mermaid-svg-SJ84yi3QTCzgfTVr .node polygon,#mermaid-svg-SJ84yi3QTCzgfTVr .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-SJ84yi3QTCzgfTVr .rough-node .label text,#mermaid-svg-SJ84yi3QTCzgfTVr .node .label text,#mermaid-svg-SJ84yi3QTCzgfTVr .image-shape .label,#mermaid-svg-SJ84yi3QTCzgfTVr .icon-shape .label{text-anchor:middle;}#mermaid-svg-SJ84yi3QTCzgfTVr .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-SJ84yi3QTCzgfTVr .rough-node .label,#mermaid-svg-SJ84yi3QTCzgfTVr .node .label,#mermaid-svg-SJ84yi3QTCzgfTVr .image-shape .label,#mermaid-svg-SJ84yi3QTCzgfTVr .icon-shape .label{text-align:center;}#mermaid-svg-SJ84yi3QTCzgfTVr .node.clickable{cursor:pointer;}#mermaid-svg-SJ84yi3QTCzgfTVr .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-SJ84yi3QTCzgfTVr .arrowheadPath{fill:#333333;}#mermaid-svg-SJ84yi3QTCzgfTVr .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-SJ84yi3QTCzgfTVr .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-SJ84yi3QTCzgfTVr .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SJ84yi3QTCzgfTVr .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-SJ84yi3QTCzgfTVr .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SJ84yi3QTCzgfTVr .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-SJ84yi3QTCzgfTVr .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-SJ84yi3QTCzgfTVr .cluster text{fill:#333;}#mermaid-svg-SJ84yi3QTCzgfTVr .cluster span{color:#333;}#mermaid-svg-SJ84yi3QTCzgfTVr 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-SJ84yi3QTCzgfTVr .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-SJ84yi3QTCzgfTVr rect.text{fill:none;stroke-width:0;}#mermaid-svg-SJ84yi3QTCzgfTVr .icon-shape,#mermaid-svg-SJ84yi3QTCzgfTVr .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SJ84yi3QTCzgfTVr .icon-shape p,#mermaid-svg-SJ84yi3QTCzgfTVr .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-SJ84yi3QTCzgfTVr .icon-shape .label rect,#mermaid-svg-SJ84yi3QTCzgfTVr .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SJ84yi3QTCzgfTVr .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-SJ84yi3QTCzgfTVr .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-SJ84yi3QTCzgfTVr :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 复杂系统
模块分解
模块A
模块B
模块C
模块D
功能1
功能2
功能3
功能4

(二)模块的定义

模块是程序中逻辑上相关的代码单元,具有明确的边界和功能。

模块特征

特征 说明
功能明确 完成特定功能
边界清晰 有明确的输入输出
相对独立 与其他模块依赖少
可替换性 可以独立替换
可复用性 可以在多处使用

(三)模块化的好处

模块化好处
#mermaid-svg-xAYBoFOXzvmz0RwZ{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-xAYBoFOXzvmz0RwZ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-xAYBoFOXzvmz0RwZ .error-icon{fill:#552222;}#mermaid-svg-xAYBoFOXzvmz0RwZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-xAYBoFOXzvmz0RwZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-xAYBoFOXzvmz0RwZ .marker.cross{stroke:#333333;}#mermaid-svg-xAYBoFOXzvmz0RwZ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-xAYBoFOXzvmz0RwZ p{margin:0;}#mermaid-svg-xAYBoFOXzvmz0RwZ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-xAYBoFOXzvmz0RwZ .cluster-label text{fill:#333;}#mermaid-svg-xAYBoFOXzvmz0RwZ .cluster-label span{color:#333;}#mermaid-svg-xAYBoFOXzvmz0RwZ .cluster-label span p{background-color:transparent;}#mermaid-svg-xAYBoFOXzvmz0RwZ .label text,#mermaid-svg-xAYBoFOXzvmz0RwZ span{fill:#333;color:#333;}#mermaid-svg-xAYBoFOXzvmz0RwZ .node rect,#mermaid-svg-xAYBoFOXzvmz0RwZ .node circle,#mermaid-svg-xAYBoFOXzvmz0RwZ .node ellipse,#mermaid-svg-xAYBoFOXzvmz0RwZ .node polygon,#mermaid-svg-xAYBoFOXzvmz0RwZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-xAYBoFOXzvmz0RwZ .rough-node .label text,#mermaid-svg-xAYBoFOXzvmz0RwZ .node .label text,#mermaid-svg-xAYBoFOXzvmz0RwZ .image-shape .label,#mermaid-svg-xAYBoFOXzvmz0RwZ .icon-shape .label{text-anchor:middle;}#mermaid-svg-xAYBoFOXzvmz0RwZ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-xAYBoFOXzvmz0RwZ .rough-node .label,#mermaid-svg-xAYBoFOXzvmz0RwZ .node .label,#mermaid-svg-xAYBoFOXzvmz0RwZ .image-shape .label,#mermaid-svg-xAYBoFOXzvmz0RwZ .icon-shape .label{text-align:center;}#mermaid-svg-xAYBoFOXzvmz0RwZ .node.clickable{cursor:pointer;}#mermaid-svg-xAYBoFOXzvmz0RwZ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-xAYBoFOXzvmz0RwZ .arrowheadPath{fill:#333333;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-xAYBoFOXzvmz0RwZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-xAYBoFOXzvmz0RwZ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xAYBoFOXzvmz0RwZ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-xAYBoFOXzvmz0RwZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-xAYBoFOXzvmz0RwZ .cluster text{fill:#333;}#mermaid-svg-xAYBoFOXzvmz0RwZ .cluster span{color:#333;}#mermaid-svg-xAYBoFOXzvmz0RwZ 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-xAYBoFOXzvmz0RwZ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-xAYBoFOXzvmz0RwZ rect.text{fill:none;stroke-width:0;}#mermaid-svg-xAYBoFOXzvmz0RwZ .icon-shape,#mermaid-svg-xAYBoFOXzvmz0RwZ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xAYBoFOXzvmz0RwZ .icon-shape p,#mermaid-svg-xAYBoFOXzvmz0RwZ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-xAYBoFOXzvmz0RwZ .icon-shape .label rect,#mermaid-svg-xAYBoFOXzvmz0RwZ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xAYBoFOXzvmz0RwZ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-xAYBoFOXzvmz0RwZ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-xAYBoFOXzvmz0RwZ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 模块化好处
可维护性
可理解性
可测试性
可复用性
可修改性
开发效率
易于维护
易于理解
易于测试
易于复用
易于修改
提高效率

好处详解

好处 说明
可维护性 模块独立,易于定位和修复问题
可理解性 模块功能明确,易于理解
可测试性 模块可以独立测试
可复用性 模块可以在多个系统中复用
可修改性 修改一个模块不影响其他模块
开发效率 可以并行开发不同模块

📦 二、模块化的基本原则

(一)分解原则

分解原则

原则 说明
模块化分解 将系统分解为模块
层次化分解 按层次逐步分解
功能分解 按功能进行分解
数据分解 按数据进行分解

(二)设计原则

设计原则
#mermaid-svg-7it8rhCgDCt3caVY{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-7it8rhCgDCt3caVY .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-7it8rhCgDCt3caVY .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-7it8rhCgDCt3caVY .error-icon{fill:#552222;}#mermaid-svg-7it8rhCgDCt3caVY .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7it8rhCgDCt3caVY .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-7it8rhCgDCt3caVY .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7it8rhCgDCt3caVY .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7it8rhCgDCt3caVY .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-7it8rhCgDCt3caVY .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7it8rhCgDCt3caVY .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7it8rhCgDCt3caVY .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7it8rhCgDCt3caVY .marker.cross{stroke:#333333;}#mermaid-svg-7it8rhCgDCt3caVY svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7it8rhCgDCt3caVY p{margin:0;}#mermaid-svg-7it8rhCgDCt3caVY .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-7it8rhCgDCt3caVY .cluster-label text{fill:#333;}#mermaid-svg-7it8rhCgDCt3caVY .cluster-label span{color:#333;}#mermaid-svg-7it8rhCgDCt3caVY .cluster-label span p{background-color:transparent;}#mermaid-svg-7it8rhCgDCt3caVY .label text,#mermaid-svg-7it8rhCgDCt3caVY span{fill:#333;color:#333;}#mermaid-svg-7it8rhCgDCt3caVY .node rect,#mermaid-svg-7it8rhCgDCt3caVY .node circle,#mermaid-svg-7it8rhCgDCt3caVY .node ellipse,#mermaid-svg-7it8rhCgDCt3caVY .node polygon,#mermaid-svg-7it8rhCgDCt3caVY .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7it8rhCgDCt3caVY .rough-node .label text,#mermaid-svg-7it8rhCgDCt3caVY .node .label text,#mermaid-svg-7it8rhCgDCt3caVY .image-shape .label,#mermaid-svg-7it8rhCgDCt3caVY .icon-shape .label{text-anchor:middle;}#mermaid-svg-7it8rhCgDCt3caVY .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-7it8rhCgDCt3caVY .rough-node .label,#mermaid-svg-7it8rhCgDCt3caVY .node .label,#mermaid-svg-7it8rhCgDCt3caVY .image-shape .label,#mermaid-svg-7it8rhCgDCt3caVY .icon-shape .label{text-align:center;}#mermaid-svg-7it8rhCgDCt3caVY .node.clickable{cursor:pointer;}#mermaid-svg-7it8rhCgDCt3caVY .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-7it8rhCgDCt3caVY .arrowheadPath{fill:#333333;}#mermaid-svg-7it8rhCgDCt3caVY .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7it8rhCgDCt3caVY .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7it8rhCgDCt3caVY .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7it8rhCgDCt3caVY .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-7it8rhCgDCt3caVY .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7it8rhCgDCt3caVY .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-7it8rhCgDCt3caVY .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7it8rhCgDCt3caVY .cluster text{fill:#333;}#mermaid-svg-7it8rhCgDCt3caVY .cluster span{color:#333;}#mermaid-svg-7it8rhCgDCt3caVY 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-7it8rhCgDCt3caVY .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-7it8rhCgDCt3caVY rect.text{fill:none;stroke-width:0;}#mermaid-svg-7it8rhCgDCt3caVY .icon-shape,#mermaid-svg-7it8rhCgDCt3caVY .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7it8rhCgDCt3caVY .icon-shape p,#mermaid-svg-7it8rhCgDCt3caVY .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-7it8rhCgDCt3caVY .icon-shape .label rect,#mermaid-svg-7it8rhCgDCt3caVY .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7it8rhCgDCt3caVY .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-7it8rhCgDCt3caVY .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-7it8rhCgDCt3caVY :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 设计原则
模块化
抽象
信息隐藏
高内聚
低耦合
模块独立
分解为模块
抽象本质
隐藏细节
内部紧密
间依赖少
功能独立

原则详解

原则 说明
模块化 将系统分解为模块
抽象 抽取本质特征,忽略细节
信息隐藏 模块内部信息对外隐藏
高内聚 模块内部元素紧密相关
低耦合 模块间依赖关系简单
模块独立 模块功能独立

🌐 三、模块的内聚性

(一)内聚性的定义

内聚性(Cohesion)衡量模块内部各元素之间的关联程度。

内聚性概念
#mermaid-svg-Q1azD9FCO51msdK5{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-Q1azD9FCO51msdK5 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Q1azD9FCO51msdK5 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Q1azD9FCO51msdK5 .error-icon{fill:#552222;}#mermaid-svg-Q1azD9FCO51msdK5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Q1azD9FCO51msdK5 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Q1azD9FCO51msdK5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Q1azD9FCO51msdK5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Q1azD9FCO51msdK5 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Q1azD9FCO51msdK5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Q1azD9FCO51msdK5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Q1azD9FCO51msdK5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Q1azD9FCO51msdK5 .marker.cross{stroke:#333333;}#mermaid-svg-Q1azD9FCO51msdK5 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Q1azD9FCO51msdK5 p{margin:0;}#mermaid-svg-Q1azD9FCO51msdK5 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Q1azD9FCO51msdK5 .cluster-label text{fill:#333;}#mermaid-svg-Q1azD9FCO51msdK5 .cluster-label span{color:#333;}#mermaid-svg-Q1azD9FCO51msdK5 .cluster-label span p{background-color:transparent;}#mermaid-svg-Q1azD9FCO51msdK5 .label text,#mermaid-svg-Q1azD9FCO51msdK5 span{fill:#333;color:#333;}#mermaid-svg-Q1azD9FCO51msdK5 .node rect,#mermaid-svg-Q1azD9FCO51msdK5 .node circle,#mermaid-svg-Q1azD9FCO51msdK5 .node ellipse,#mermaid-svg-Q1azD9FCO51msdK5 .node polygon,#mermaid-svg-Q1azD9FCO51msdK5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Q1azD9FCO51msdK5 .rough-node .label text,#mermaid-svg-Q1azD9FCO51msdK5 .node .label text,#mermaid-svg-Q1azD9FCO51msdK5 .image-shape .label,#mermaid-svg-Q1azD9FCO51msdK5 .icon-shape .label{text-anchor:middle;}#mermaid-svg-Q1azD9FCO51msdK5 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Q1azD9FCO51msdK5 .rough-node .label,#mermaid-svg-Q1azD9FCO51msdK5 .node .label,#mermaid-svg-Q1azD9FCO51msdK5 .image-shape .label,#mermaid-svg-Q1azD9FCO51msdK5 .icon-shape .label{text-align:center;}#mermaid-svg-Q1azD9FCO51msdK5 .node.clickable{cursor:pointer;}#mermaid-svg-Q1azD9FCO51msdK5 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Q1azD9FCO51msdK5 .arrowheadPath{fill:#333333;}#mermaid-svg-Q1azD9FCO51msdK5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Q1azD9FCO51msdK5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Q1azD9FCO51msdK5 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Q1azD9FCO51msdK5 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Q1azD9FCO51msdK5 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Q1azD9FCO51msdK5 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Q1azD9FCO51msdK5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Q1azD9FCO51msdK5 .cluster text{fill:#333;}#mermaid-svg-Q1azD9FCO51msdK5 .cluster span{color:#333;}#mermaid-svg-Q1azD9FCO51msdK5 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-Q1azD9FCO51msdK5 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Q1azD9FCO51msdK5 rect.text{fill:none;stroke-width:0;}#mermaid-svg-Q1azD9FCO51msdK5 .icon-shape,#mermaid-svg-Q1azD9FCO51msdK5 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Q1azD9FCO51msdK5 .icon-shape p,#mermaid-svg-Q1azD9FCO51msdK5 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Q1azD9FCO51msdK5 .icon-shape .label rect,#mermaid-svg-Q1azD9FCO51msdK5 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Q1azD9FCO51msdK5 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Q1azD9FCO51msdK5 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Q1azD9FCO51msdK5 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 内聚性
模块内部
元素关联程度
高内聚
低内聚
元素紧密相关
元素松散关联

(二)内聚性类型

内聚性类型

内聚类型 说明 强度 示例
偶然内聚 模块内元素无关联 最弱 随意组合的代码
逻辑内聚 执行逻辑相关的功能 多功能选择模块
时间内聚 在同一时间段执行 初始化模块
过程内聚 按特定顺序执行 中等 流程处理模块
通信内聚 使用相同数据 较强 数据处理模块
顺序内聚 前一元素输出是后一元素输入 流水线模块
功能内聚 共同完成单一功能 最强 单一功能模块

(三)内聚性示例

偶然内聚示例

复制代码
模块A:
  - 计算员工工资
  - 打印报表
  - 读取配置文件

功能内聚示例

复制代码
模块B:计算员工工资
  - 读取员工数据
  - 计算基本工资
  - 计算奖金
  - 计算扣款
  - 计算总工资

(四)内聚性比较

内聚性比较
#mermaid-svg-8GBghgyUqGFLfRtZ{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-8GBghgyUqGFLfRtZ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-8GBghgyUqGFLfRtZ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-8GBghgyUqGFLfRtZ .error-icon{fill:#552222;}#mermaid-svg-8GBghgyUqGFLfRtZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8GBghgyUqGFLfRtZ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-8GBghgyUqGFLfRtZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8GBghgyUqGFLfRtZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8GBghgyUqGFLfRtZ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-8GBghgyUqGFLfRtZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8GBghgyUqGFLfRtZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8GBghgyUqGFLfRtZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8GBghgyUqGFLfRtZ .marker.cross{stroke:#333333;}#mermaid-svg-8GBghgyUqGFLfRtZ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8GBghgyUqGFLfRtZ p{margin:0;}#mermaid-svg-8GBghgyUqGFLfRtZ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-8GBghgyUqGFLfRtZ .cluster-label text{fill:#333;}#mermaid-svg-8GBghgyUqGFLfRtZ .cluster-label span{color:#333;}#mermaid-svg-8GBghgyUqGFLfRtZ .cluster-label span p{background-color:transparent;}#mermaid-svg-8GBghgyUqGFLfRtZ .label text,#mermaid-svg-8GBghgyUqGFLfRtZ span{fill:#333;color:#333;}#mermaid-svg-8GBghgyUqGFLfRtZ .node rect,#mermaid-svg-8GBghgyUqGFLfRtZ .node circle,#mermaid-svg-8GBghgyUqGFLfRtZ .node ellipse,#mermaid-svg-8GBghgyUqGFLfRtZ .node polygon,#mermaid-svg-8GBghgyUqGFLfRtZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8GBghgyUqGFLfRtZ .rough-node .label text,#mermaid-svg-8GBghgyUqGFLfRtZ .node .label text,#mermaid-svg-8GBghgyUqGFLfRtZ .image-shape .label,#mermaid-svg-8GBghgyUqGFLfRtZ .icon-shape .label{text-anchor:middle;}#mermaid-svg-8GBghgyUqGFLfRtZ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-8GBghgyUqGFLfRtZ .rough-node .label,#mermaid-svg-8GBghgyUqGFLfRtZ .node .label,#mermaid-svg-8GBghgyUqGFLfRtZ .image-shape .label,#mermaid-svg-8GBghgyUqGFLfRtZ .icon-shape .label{text-align:center;}#mermaid-svg-8GBghgyUqGFLfRtZ .node.clickable{cursor:pointer;}#mermaid-svg-8GBghgyUqGFLfRtZ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-8GBghgyUqGFLfRtZ .arrowheadPath{fill:#333333;}#mermaid-svg-8GBghgyUqGFLfRtZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-8GBghgyUqGFLfRtZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-8GBghgyUqGFLfRtZ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8GBghgyUqGFLfRtZ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-8GBghgyUqGFLfRtZ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8GBghgyUqGFLfRtZ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-8GBghgyUqGFLfRtZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8GBghgyUqGFLfRtZ .cluster text{fill:#333;}#mermaid-svg-8GBghgyUqGFLfRtZ .cluster span{color:#333;}#mermaid-svg-8GBghgyUqGFLfRtZ 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-8GBghgyUqGFLfRtZ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-8GBghgyUqGFLfRtZ rect.text{fill:none;stroke-width:0;}#mermaid-svg-8GBghgyUqGFLfRtZ .icon-shape,#mermaid-svg-8GBghgyUqGFLfRtZ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8GBghgyUqGFLfRtZ .icon-shape p,#mermaid-svg-8GBghgyUqGFLfRtZ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-8GBghgyUqGFLfRtZ .icon-shape .label rect,#mermaid-svg-8GBghgyUqGFLfRtZ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8GBghgyUqGFLfRtZ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-8GBghgyUqGFLfRtZ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-8GBghgyUqGFLfRtZ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 偶然内聚
逻辑内聚
时间内聚
过程内聚
通信内聚
顺序内聚
功能内聚
最弱
最强

📊 四、模块的耦合性

(一)耦合性的定义

耦合性(Coupling)衡量模块之间相互依赖的程度。

耦合性概念
#mermaid-svg-7f2owYRd9IjbB8fV{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-7f2owYRd9IjbB8fV .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-7f2owYRd9IjbB8fV .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-7f2owYRd9IjbB8fV .error-icon{fill:#552222;}#mermaid-svg-7f2owYRd9IjbB8fV .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7f2owYRd9IjbB8fV .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-7f2owYRd9IjbB8fV .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7f2owYRd9IjbB8fV .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7f2owYRd9IjbB8fV .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-7f2owYRd9IjbB8fV .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7f2owYRd9IjbB8fV .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7f2owYRd9IjbB8fV .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7f2owYRd9IjbB8fV .marker.cross{stroke:#333333;}#mermaid-svg-7f2owYRd9IjbB8fV svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7f2owYRd9IjbB8fV p{margin:0;}#mermaid-svg-7f2owYRd9IjbB8fV .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-7f2owYRd9IjbB8fV .cluster-label text{fill:#333;}#mermaid-svg-7f2owYRd9IjbB8fV .cluster-label span{color:#333;}#mermaid-svg-7f2owYRd9IjbB8fV .cluster-label span p{background-color:transparent;}#mermaid-svg-7f2owYRd9IjbB8fV .label text,#mermaid-svg-7f2owYRd9IjbB8fV span{fill:#333;color:#333;}#mermaid-svg-7f2owYRd9IjbB8fV .node rect,#mermaid-svg-7f2owYRd9IjbB8fV .node circle,#mermaid-svg-7f2owYRd9IjbB8fV .node ellipse,#mermaid-svg-7f2owYRd9IjbB8fV .node polygon,#mermaid-svg-7f2owYRd9IjbB8fV .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7f2owYRd9IjbB8fV .rough-node .label text,#mermaid-svg-7f2owYRd9IjbB8fV .node .label text,#mermaid-svg-7f2owYRd9IjbB8fV .image-shape .label,#mermaid-svg-7f2owYRd9IjbB8fV .icon-shape .label{text-anchor:middle;}#mermaid-svg-7f2owYRd9IjbB8fV .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-7f2owYRd9IjbB8fV .rough-node .label,#mermaid-svg-7f2owYRd9IjbB8fV .node .label,#mermaid-svg-7f2owYRd9IjbB8fV .image-shape .label,#mermaid-svg-7f2owYRd9IjbB8fV .icon-shape .label{text-align:center;}#mermaid-svg-7f2owYRd9IjbB8fV .node.clickable{cursor:pointer;}#mermaid-svg-7f2owYRd9IjbB8fV .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-7f2owYRd9IjbB8fV .arrowheadPath{fill:#333333;}#mermaid-svg-7f2owYRd9IjbB8fV .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7f2owYRd9IjbB8fV .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7f2owYRd9IjbB8fV .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7f2owYRd9IjbB8fV .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-7f2owYRd9IjbB8fV .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7f2owYRd9IjbB8fV .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-7f2owYRd9IjbB8fV .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7f2owYRd9IjbB8fV .cluster text{fill:#333;}#mermaid-svg-7f2owYRd9IjbB8fV .cluster span{color:#333;}#mermaid-svg-7f2owYRd9IjbB8fV 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-7f2owYRd9IjbB8fV .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-7f2owYRd9IjbB8fV rect.text{fill:none;stroke-width:0;}#mermaid-svg-7f2owYRd9IjbB8fV .icon-shape,#mermaid-svg-7f2owYRd9IjbB8fV .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7f2owYRd9IjbB8fV .icon-shape p,#mermaid-svg-7f2owYRd9IjbB8fV .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-7f2owYRd9IjbB8fV .icon-shape .label rect,#mermaid-svg-7f2owYRd9IjbB8fV .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7f2owYRd9IjbB8fV .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-7f2owYRd9IjbB8fV .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-7f2owYRd9IjbB8fV :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 耦合性
模块之间
相互依赖程度
高耦合
低耦合
依赖紧密
依赖松散

(二)耦合性类型

耦合性类型

耦合类型 说明 强度 示例
内容耦合 直接访问另一模块内部 最强 跳转到另一模块内部
公共耦合 通过公共数据区交互 共享全局变量
外部耦合 共享外部环境 较强 共享外部文件
控制耦合 传递控制信息 中等 传递标志位
标记耦合 传递数据结构 较弱 传递结构体
数据耦合 传递数据参数 最弱 传递简单参数
无直接耦合 无直接关系 独立模块

(三)耦合性示例

内容耦合示例

复制代码
模块A:
  goto 模块B的内部标签

数据耦合示例

复制代码
模块A:
  调用 模块B(参数1, 参数2)

(四)耦合性比较

耦合性比较
#mermaid-svg-kRmK1FDQJP4JF0nn{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-kRmK1FDQJP4JF0nn .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-kRmK1FDQJP4JF0nn .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-kRmK1FDQJP4JF0nn .error-icon{fill:#552222;}#mermaid-svg-kRmK1FDQJP4JF0nn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kRmK1FDQJP4JF0nn .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-kRmK1FDQJP4JF0nn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kRmK1FDQJP4JF0nn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kRmK1FDQJP4JF0nn .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-kRmK1FDQJP4JF0nn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kRmK1FDQJP4JF0nn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kRmK1FDQJP4JF0nn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kRmK1FDQJP4JF0nn .marker.cross{stroke:#333333;}#mermaid-svg-kRmK1FDQJP4JF0nn svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kRmK1FDQJP4JF0nn p{margin:0;}#mermaid-svg-kRmK1FDQJP4JF0nn .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-kRmK1FDQJP4JF0nn .cluster-label text{fill:#333;}#mermaid-svg-kRmK1FDQJP4JF0nn .cluster-label span{color:#333;}#mermaid-svg-kRmK1FDQJP4JF0nn .cluster-label span p{background-color:transparent;}#mermaid-svg-kRmK1FDQJP4JF0nn .label text,#mermaid-svg-kRmK1FDQJP4JF0nn span{fill:#333;color:#333;}#mermaid-svg-kRmK1FDQJP4JF0nn .node rect,#mermaid-svg-kRmK1FDQJP4JF0nn .node circle,#mermaid-svg-kRmK1FDQJP4JF0nn .node ellipse,#mermaid-svg-kRmK1FDQJP4JF0nn .node polygon,#mermaid-svg-kRmK1FDQJP4JF0nn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kRmK1FDQJP4JF0nn .rough-node .label text,#mermaid-svg-kRmK1FDQJP4JF0nn .node .label text,#mermaid-svg-kRmK1FDQJP4JF0nn .image-shape .label,#mermaid-svg-kRmK1FDQJP4JF0nn .icon-shape .label{text-anchor:middle;}#mermaid-svg-kRmK1FDQJP4JF0nn .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-kRmK1FDQJP4JF0nn .rough-node .label,#mermaid-svg-kRmK1FDQJP4JF0nn .node .label,#mermaid-svg-kRmK1FDQJP4JF0nn .image-shape .label,#mermaid-svg-kRmK1FDQJP4JF0nn .icon-shape .label{text-align:center;}#mermaid-svg-kRmK1FDQJP4JF0nn .node.clickable{cursor:pointer;}#mermaid-svg-kRmK1FDQJP4JF0nn .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-kRmK1FDQJP4JF0nn .arrowheadPath{fill:#333333;}#mermaid-svg-kRmK1FDQJP4JF0nn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kRmK1FDQJP4JF0nn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kRmK1FDQJP4JF0nn .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kRmK1FDQJP4JF0nn .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-kRmK1FDQJP4JF0nn .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kRmK1FDQJP4JF0nn .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-kRmK1FDQJP4JF0nn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kRmK1FDQJP4JF0nn .cluster text{fill:#333;}#mermaid-svg-kRmK1FDQJP4JF0nn .cluster span{color:#333;}#mermaid-svg-kRmK1FDQJP4JF0nn 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-kRmK1FDQJP4JF0nn .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-kRmK1FDQJP4JF0nn rect.text{fill:none;stroke-width:0;}#mermaid-svg-kRmK1FDQJP4JF0nn .icon-shape,#mermaid-svg-kRmK1FDQJP4JF0nn .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kRmK1FDQJP4JF0nn .icon-shape p,#mermaid-svg-kRmK1FDQJP4JF0nn .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-kRmK1FDQJP4JF0nn .icon-shape .label rect,#mermaid-svg-kRmK1FDQJP4JF0nn .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kRmK1FDQJP4JF0nn .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-kRmK1FDQJP4JF0nn .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-kRmK1FDQJP4JF0nn :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 内容耦合
公共耦合
外部耦合
控制耦合
标记耦合
数据耦合
无直接耦合
最强
无耦合

💡 五、模块独立性

(一)模块独立性的定义

模块独立性是指模块完成独立功能,与其他模块接口简单。

模块独立性概念
#mermaid-svg-oBz9v4csfVIHItbc{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-oBz9v4csfVIHItbc .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-oBz9v4csfVIHItbc .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-oBz9v4csfVIHItbc .error-icon{fill:#552222;}#mermaid-svg-oBz9v4csfVIHItbc .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-oBz9v4csfVIHItbc .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-oBz9v4csfVIHItbc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-oBz9v4csfVIHItbc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-oBz9v4csfVIHItbc .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-oBz9v4csfVIHItbc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-oBz9v4csfVIHItbc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-oBz9v4csfVIHItbc .marker{fill:#333333;stroke:#333333;}#mermaid-svg-oBz9v4csfVIHItbc .marker.cross{stroke:#333333;}#mermaid-svg-oBz9v4csfVIHItbc svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-oBz9v4csfVIHItbc p{margin:0;}#mermaid-svg-oBz9v4csfVIHItbc .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-oBz9v4csfVIHItbc .cluster-label text{fill:#333;}#mermaid-svg-oBz9v4csfVIHItbc .cluster-label span{color:#333;}#mermaid-svg-oBz9v4csfVIHItbc .cluster-label span p{background-color:transparent;}#mermaid-svg-oBz9v4csfVIHItbc .label text,#mermaid-svg-oBz9v4csfVIHItbc span{fill:#333;color:#333;}#mermaid-svg-oBz9v4csfVIHItbc .node rect,#mermaid-svg-oBz9v4csfVIHItbc .node circle,#mermaid-svg-oBz9v4csfVIHItbc .node ellipse,#mermaid-svg-oBz9v4csfVIHItbc .node polygon,#mermaid-svg-oBz9v4csfVIHItbc .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-oBz9v4csfVIHItbc .rough-node .label text,#mermaid-svg-oBz9v4csfVIHItbc .node .label text,#mermaid-svg-oBz9v4csfVIHItbc .image-shape .label,#mermaid-svg-oBz9v4csfVIHItbc .icon-shape .label{text-anchor:middle;}#mermaid-svg-oBz9v4csfVIHItbc .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-oBz9v4csfVIHItbc .rough-node .label,#mermaid-svg-oBz9v4csfVIHItbc .node .label,#mermaid-svg-oBz9v4csfVIHItbc .image-shape .label,#mermaid-svg-oBz9v4csfVIHItbc .icon-shape .label{text-align:center;}#mermaid-svg-oBz9v4csfVIHItbc .node.clickable{cursor:pointer;}#mermaid-svg-oBz9v4csfVIHItbc .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-oBz9v4csfVIHItbc .arrowheadPath{fill:#333333;}#mermaid-svg-oBz9v4csfVIHItbc .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-oBz9v4csfVIHItbc .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-oBz9v4csfVIHItbc .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oBz9v4csfVIHItbc .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-oBz9v4csfVIHItbc .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oBz9v4csfVIHItbc .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-oBz9v4csfVIHItbc .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-oBz9v4csfVIHItbc .cluster text{fill:#333;}#mermaid-svg-oBz9v4csfVIHItbc .cluster span{color:#333;}#mermaid-svg-oBz9v4csfVIHItbc 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-oBz9v4csfVIHItbc .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-oBz9v4csfVIHItbc rect.text{fill:none;stroke-width:0;}#mermaid-svg-oBz9v4csfVIHItbc .icon-shape,#mermaid-svg-oBz9v4csfVIHItbc .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oBz9v4csfVIHItbc .icon-shape p,#mermaid-svg-oBz9v4csfVIHItbc .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-oBz9v4csfVIHItbc .icon-shape .label rect,#mermaid-svg-oBz9v4csfVIHItbc .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oBz9v4csfVIHItbc .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-oBz9v4csfVIHItbc .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-oBz9v4csfVIHItbc :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 模块独立性
高内聚
低耦合
模块内部紧密
模块间依赖少
模块独立

(二)模块独立性度量

度量指标

指标 说明 目标
内聚性 模块内部关联程度 高内聚
耦合性 模块间依赖程度 低耦合

(三)提高模块独立性

提高方法

方法 说明
提高内聚性 使模块功能单一
降低耦合性 减少模块间依赖
信息隐藏 隐藏模块内部细节
接口简化 简化模块接口

📋 六、模块的分解方法

(一)功能分解

功能分解
#mermaid-svg-RhTttAweHULDxrvn{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-RhTttAweHULDxrvn .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-RhTttAweHULDxrvn .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-RhTttAweHULDxrvn .error-icon{fill:#552222;}#mermaid-svg-RhTttAweHULDxrvn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RhTttAweHULDxrvn .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-RhTttAweHULDxrvn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RhTttAweHULDxrvn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RhTttAweHULDxrvn .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-RhTttAweHULDxrvn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RhTttAweHULDxrvn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RhTttAweHULDxrvn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RhTttAweHULDxrvn .marker.cross{stroke:#333333;}#mermaid-svg-RhTttAweHULDxrvn svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RhTttAweHULDxrvn p{margin:0;}#mermaid-svg-RhTttAweHULDxrvn .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-RhTttAweHULDxrvn .cluster-label text{fill:#333;}#mermaid-svg-RhTttAweHULDxrvn .cluster-label span{color:#333;}#mermaid-svg-RhTttAweHULDxrvn .cluster-label span p{background-color:transparent;}#mermaid-svg-RhTttAweHULDxrvn .label text,#mermaid-svg-RhTttAweHULDxrvn span{fill:#333;color:#333;}#mermaid-svg-RhTttAweHULDxrvn .node rect,#mermaid-svg-RhTttAweHULDxrvn .node circle,#mermaid-svg-RhTttAweHULDxrvn .node ellipse,#mermaid-svg-RhTttAweHULDxrvn .node polygon,#mermaid-svg-RhTttAweHULDxrvn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RhTttAweHULDxrvn .rough-node .label text,#mermaid-svg-RhTttAweHULDxrvn .node .label text,#mermaid-svg-RhTttAweHULDxrvn .image-shape .label,#mermaid-svg-RhTttAweHULDxrvn .icon-shape .label{text-anchor:middle;}#mermaid-svg-RhTttAweHULDxrvn .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-RhTttAweHULDxrvn .rough-node .label,#mermaid-svg-RhTttAweHULDxrvn .node .label,#mermaid-svg-RhTttAweHULDxrvn .image-shape .label,#mermaid-svg-RhTttAweHULDxrvn .icon-shape .label{text-align:center;}#mermaid-svg-RhTttAweHULDxrvn .node.clickable{cursor:pointer;}#mermaid-svg-RhTttAweHULDxrvn .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-RhTttAweHULDxrvn .arrowheadPath{fill:#333333;}#mermaid-svg-RhTttAweHULDxrvn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-RhTttAweHULDxrvn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-RhTttAweHULDxrvn .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RhTttAweHULDxrvn .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-RhTttAweHULDxrvn .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RhTttAweHULDxrvn .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-RhTttAweHULDxrvn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-RhTttAweHULDxrvn .cluster text{fill:#333;}#mermaid-svg-RhTttAweHULDxrvn .cluster span{color:#333;}#mermaid-svg-RhTttAweHULDxrvn 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-RhTttAweHULDxrvn .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-RhTttAweHULDxrvn rect.text{fill:none;stroke-width:0;}#mermaid-svg-RhTttAweHULDxrvn .icon-shape,#mermaid-svg-RhTttAweHULDxrvn .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RhTttAweHULDxrvn .icon-shape p,#mermaid-svg-RhTttAweHULDxrvn .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-RhTttAweHULDxrvn .icon-shape .label rect,#mermaid-svg-RhTttAweHULDxrvn .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RhTttAweHULDxrvn .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-RhTttAweHULDxrvn .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-RhTttAweHULDxrvn :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 系统功能
子功能1
子功能2
子功能3
功能1.1
功能1.2
功能2.1
功能2.2
功能3.1
功能3.2

(二)数据流分解

数据流分解
#mermaid-svg-E0oNWVFJqwgZFxhZ{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-E0oNWVFJqwgZFxhZ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-E0oNWVFJqwgZFxhZ .error-icon{fill:#552222;}#mermaid-svg-E0oNWVFJqwgZFxhZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-E0oNWVFJqwgZFxhZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-E0oNWVFJqwgZFxhZ .marker.cross{stroke:#333333;}#mermaid-svg-E0oNWVFJqwgZFxhZ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-E0oNWVFJqwgZFxhZ p{margin:0;}#mermaid-svg-E0oNWVFJqwgZFxhZ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-E0oNWVFJqwgZFxhZ .cluster-label text{fill:#333;}#mermaid-svg-E0oNWVFJqwgZFxhZ .cluster-label span{color:#333;}#mermaid-svg-E0oNWVFJqwgZFxhZ .cluster-label span p{background-color:transparent;}#mermaid-svg-E0oNWVFJqwgZFxhZ .label text,#mermaid-svg-E0oNWVFJqwgZFxhZ span{fill:#333;color:#333;}#mermaid-svg-E0oNWVFJqwgZFxhZ .node rect,#mermaid-svg-E0oNWVFJqwgZFxhZ .node circle,#mermaid-svg-E0oNWVFJqwgZFxhZ .node ellipse,#mermaid-svg-E0oNWVFJqwgZFxhZ .node polygon,#mermaid-svg-E0oNWVFJqwgZFxhZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-E0oNWVFJqwgZFxhZ .rough-node .label text,#mermaid-svg-E0oNWVFJqwgZFxhZ .node .label text,#mermaid-svg-E0oNWVFJqwgZFxhZ .image-shape .label,#mermaid-svg-E0oNWVFJqwgZFxhZ .icon-shape .label{text-anchor:middle;}#mermaid-svg-E0oNWVFJqwgZFxhZ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-E0oNWVFJqwgZFxhZ .rough-node .label,#mermaid-svg-E0oNWVFJqwgZFxhZ .node .label,#mermaid-svg-E0oNWVFJqwgZFxhZ .image-shape .label,#mermaid-svg-E0oNWVFJqwgZFxhZ .icon-shape .label{text-align:center;}#mermaid-svg-E0oNWVFJqwgZFxhZ .node.clickable{cursor:pointer;}#mermaid-svg-E0oNWVFJqwgZFxhZ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-E0oNWVFJqwgZFxhZ .arrowheadPath{fill:#333333;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-E0oNWVFJqwgZFxhZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-E0oNWVFJqwgZFxhZ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-E0oNWVFJqwgZFxhZ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-E0oNWVFJqwgZFxhZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-E0oNWVFJqwgZFxhZ .cluster text{fill:#333;}#mermaid-svg-E0oNWVFJqwgZFxhZ .cluster span{color:#333;}#mermaid-svg-E0oNWVFJqwgZFxhZ 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-E0oNWVFJqwgZFxhZ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-E0oNWVFJqwgZFxhZ rect.text{fill:none;stroke-width:0;}#mermaid-svg-E0oNWVFJqwgZFxhZ .icon-shape,#mermaid-svg-E0oNWVFJqwgZFxhZ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-E0oNWVFJqwgZFxhZ .icon-shape p,#mermaid-svg-E0oNWVFJqwgZFxhZ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-E0oNWVFJqwgZFxhZ .icon-shape .label rect,#mermaid-svg-E0oNWVFJqwgZFxhZ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-E0oNWVFJqwgZFxhZ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-E0oNWVFJqwgZFxhZ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-E0oNWVFJqwgZFxhZ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入数据
处理1
处理2
处理3
输出数据

(三)事务分解

事务分解
#mermaid-svg-1VFg1rK1s5zKCssm{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-1VFg1rK1s5zKCssm .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-1VFg1rK1s5zKCssm .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-1VFg1rK1s5zKCssm .error-icon{fill:#552222;}#mermaid-svg-1VFg1rK1s5zKCssm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1VFg1rK1s5zKCssm .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-1VFg1rK1s5zKCssm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1VFg1rK1s5zKCssm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1VFg1rK1s5zKCssm .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-1VFg1rK1s5zKCssm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1VFg1rK1s5zKCssm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1VFg1rK1s5zKCssm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1VFg1rK1s5zKCssm .marker.cross{stroke:#333333;}#mermaid-svg-1VFg1rK1s5zKCssm svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1VFg1rK1s5zKCssm p{margin:0;}#mermaid-svg-1VFg1rK1s5zKCssm .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-1VFg1rK1s5zKCssm .cluster-label text{fill:#333;}#mermaid-svg-1VFg1rK1s5zKCssm .cluster-label span{color:#333;}#mermaid-svg-1VFg1rK1s5zKCssm .cluster-label span p{background-color:transparent;}#mermaid-svg-1VFg1rK1s5zKCssm .label text,#mermaid-svg-1VFg1rK1s5zKCssm span{fill:#333;color:#333;}#mermaid-svg-1VFg1rK1s5zKCssm .node rect,#mermaid-svg-1VFg1rK1s5zKCssm .node circle,#mermaid-svg-1VFg1rK1s5zKCssm .node ellipse,#mermaid-svg-1VFg1rK1s5zKCssm .node polygon,#mermaid-svg-1VFg1rK1s5zKCssm .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1VFg1rK1s5zKCssm .rough-node .label text,#mermaid-svg-1VFg1rK1s5zKCssm .node .label text,#mermaid-svg-1VFg1rK1s5zKCssm .image-shape .label,#mermaid-svg-1VFg1rK1s5zKCssm .icon-shape .label{text-anchor:middle;}#mermaid-svg-1VFg1rK1s5zKCssm .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-1VFg1rK1s5zKCssm .rough-node .label,#mermaid-svg-1VFg1rK1s5zKCssm .node .label,#mermaid-svg-1VFg1rK1s5zKCssm .image-shape .label,#mermaid-svg-1VFg1rK1s5zKCssm .icon-shape .label{text-align:center;}#mermaid-svg-1VFg1rK1s5zKCssm .node.clickable{cursor:pointer;}#mermaid-svg-1VFg1rK1s5zKCssm .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-1VFg1rK1s5zKCssm .arrowheadPath{fill:#333333;}#mermaid-svg-1VFg1rK1s5zKCssm .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1VFg1rK1s5zKCssm .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1VFg1rK1s5zKCssm .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1VFg1rK1s5zKCssm .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-1VFg1rK1s5zKCssm .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1VFg1rK1s5zKCssm .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-1VFg1rK1s5zKCssm .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1VFg1rK1s5zKCssm .cluster text{fill:#333;}#mermaid-svg-1VFg1rK1s5zKCssm .cluster span{color:#333;}#mermaid-svg-1VFg1rK1s5zKCssm 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-1VFg1rK1s5zKCssm .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-1VFg1rK1s5zKCssm rect.text{fill:none;stroke-width:0;}#mermaid-svg-1VFg1rK1s5zKCssm .icon-shape,#mermaid-svg-1VFg1rK1s5zKCssm .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1VFg1rK1s5zKCssm .icon-shape p,#mermaid-svg-1VFg1rK1s5zKCssm .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-1VFg1rK1s5zKCssm .icon-shape .label rect,#mermaid-svg-1VFg1rK1s5zKCssm .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1VFg1rK1s5zKCssm .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-1VFg1rK1s5zKCssm .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-1VFg1rK1s5zKCssm :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 类型1
类型2
类型3
事务
事务类型
处理1
处理2
处理3

📝 七、模块化设计方法

(一)自顶向下设计

自顶向下设计
#mermaid-svg-DAf9F0Bb1VdQ6uzt{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-DAf9F0Bb1VdQ6uzt .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .error-icon{fill:#552222;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .marker.cross{stroke:#333333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DAf9F0Bb1VdQ6uzt p{margin:0;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .cluster-label text{fill:#333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .cluster-label span{color:#333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .cluster-label span p{background-color:transparent;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .label text,#mermaid-svg-DAf9F0Bb1VdQ6uzt span{fill:#333;color:#333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .node rect,#mermaid-svg-DAf9F0Bb1VdQ6uzt .node circle,#mermaid-svg-DAf9F0Bb1VdQ6uzt .node ellipse,#mermaid-svg-DAf9F0Bb1VdQ6uzt .node polygon,#mermaid-svg-DAf9F0Bb1VdQ6uzt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .rough-node .label text,#mermaid-svg-DAf9F0Bb1VdQ6uzt .node .label text,#mermaid-svg-DAf9F0Bb1VdQ6uzt .image-shape .label,#mermaid-svg-DAf9F0Bb1VdQ6uzt .icon-shape .label{text-anchor:middle;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .rough-node .label,#mermaid-svg-DAf9F0Bb1VdQ6uzt .node .label,#mermaid-svg-DAf9F0Bb1VdQ6uzt .image-shape .label,#mermaid-svg-DAf9F0Bb1VdQ6uzt .icon-shape .label{text-align:center;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .node.clickable{cursor:pointer;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .arrowheadPath{fill:#333333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DAf9F0Bb1VdQ6uzt .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-DAf9F0Bb1VdQ6uzt .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .cluster text{fill:#333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .cluster span{color:#333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt 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-DAf9F0Bb1VdQ6uzt .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt rect.text{fill:none;stroke-width:0;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .icon-shape,#mermaid-svg-DAf9F0Bb1VdQ6uzt .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .icon-shape p,#mermaid-svg-DAf9F0Bb1VdQ6uzt .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .icon-shape .label rect,#mermaid-svg-DAf9F0Bb1VdQ6uzt .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DAf9F0Bb1VdQ6uzt .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-DAf9F0Bb1VdQ6uzt :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 系统
子系统1
子系统2
模块1.1
模块1.2
模块2.1
模块2.2

(二)逐步求精

逐步求精
#mermaid-svg-hJXchT2MelJyhH2a{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-hJXchT2MelJyhH2a .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-hJXchT2MelJyhH2a .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-hJXchT2MelJyhH2a .error-icon{fill:#552222;}#mermaid-svg-hJXchT2MelJyhH2a .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hJXchT2MelJyhH2a .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-hJXchT2MelJyhH2a .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hJXchT2MelJyhH2a .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hJXchT2MelJyhH2a .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-hJXchT2MelJyhH2a .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hJXchT2MelJyhH2a .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hJXchT2MelJyhH2a .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hJXchT2MelJyhH2a .marker.cross{stroke:#333333;}#mermaid-svg-hJXchT2MelJyhH2a svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hJXchT2MelJyhH2a p{margin:0;}#mermaid-svg-hJXchT2MelJyhH2a .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hJXchT2MelJyhH2a .cluster-label text{fill:#333;}#mermaid-svg-hJXchT2MelJyhH2a .cluster-label span{color:#333;}#mermaid-svg-hJXchT2MelJyhH2a .cluster-label span p{background-color:transparent;}#mermaid-svg-hJXchT2MelJyhH2a .label text,#mermaid-svg-hJXchT2MelJyhH2a span{fill:#333;color:#333;}#mermaid-svg-hJXchT2MelJyhH2a .node rect,#mermaid-svg-hJXchT2MelJyhH2a .node circle,#mermaid-svg-hJXchT2MelJyhH2a .node ellipse,#mermaid-svg-hJXchT2MelJyhH2a .node polygon,#mermaid-svg-hJXchT2MelJyhH2a .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hJXchT2MelJyhH2a .rough-node .label text,#mermaid-svg-hJXchT2MelJyhH2a .node .label text,#mermaid-svg-hJXchT2MelJyhH2a .image-shape .label,#mermaid-svg-hJXchT2MelJyhH2a .icon-shape .label{text-anchor:middle;}#mermaid-svg-hJXchT2MelJyhH2a .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-hJXchT2MelJyhH2a .rough-node .label,#mermaid-svg-hJXchT2MelJyhH2a .node .label,#mermaid-svg-hJXchT2MelJyhH2a .image-shape .label,#mermaid-svg-hJXchT2MelJyhH2a .icon-shape .label{text-align:center;}#mermaid-svg-hJXchT2MelJyhH2a .node.clickable{cursor:pointer;}#mermaid-svg-hJXchT2MelJyhH2a .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-hJXchT2MelJyhH2a .arrowheadPath{fill:#333333;}#mermaid-svg-hJXchT2MelJyhH2a .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hJXchT2MelJyhH2a .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hJXchT2MelJyhH2a .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hJXchT2MelJyhH2a .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-hJXchT2MelJyhH2a .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hJXchT2MelJyhH2a .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-hJXchT2MelJyhH2a .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hJXchT2MelJyhH2a .cluster text{fill:#333;}#mermaid-svg-hJXchT2MelJyhH2a .cluster span{color:#333;}#mermaid-svg-hJXchT2MelJyhH2a 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-hJXchT2MelJyhH2a .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-hJXchT2MelJyhH2a rect.text{fill:none;stroke-width:0;}#mermaid-svg-hJXchT2MelJyhH2a .icon-shape,#mermaid-svg-hJXchT2MelJyhH2a .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hJXchT2MelJyhH2a .icon-shape p,#mermaid-svg-hJXchT2MelJyhH2a .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-hJXchT2MelJyhH2a .icon-shape .label rect,#mermaid-svg-hJXchT2MelJyhH2a .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hJXchT2MelJyhH2a .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-hJXchT2MelJyhH2a .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-hJXchT2MelJyhH2a :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 抽象描述
第一层细化
第二层细化
第三层细化
具体实现

(三)模块化设计步骤

设计步骤

步骤 任务 产出
1. 需求分析 分析系统需求 需求规格
2. 功能分解 分解系统功能 功能树
3. 模块划分 划分模块 模块列表
4. 接口设计 设计模块接口 接口规格
5. 模块设计 设计模块内部 模块设计
6. 评审优化 评审和优化 优化设计

📊 八、模块化设计实例

(一)实例背景

项目:学生成绩管理系统

系统功能

  • 学生信息管理
  • 课程信息管理
  • 成绩管理
  • 统计分析

(二)模块划分

模块结构图
#mermaid-svg-JG5eGbdm66xU2hdf{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-JG5eGbdm66xU2hdf .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-JG5eGbdm66xU2hdf .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-JG5eGbdm66xU2hdf .error-icon{fill:#552222;}#mermaid-svg-JG5eGbdm66xU2hdf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-JG5eGbdm66xU2hdf .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-JG5eGbdm66xU2hdf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-JG5eGbdm66xU2hdf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-JG5eGbdm66xU2hdf .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-JG5eGbdm66xU2hdf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-JG5eGbdm66xU2hdf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-JG5eGbdm66xU2hdf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-JG5eGbdm66xU2hdf .marker.cross{stroke:#333333;}#mermaid-svg-JG5eGbdm66xU2hdf svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-JG5eGbdm66xU2hdf p{margin:0;}#mermaid-svg-JG5eGbdm66xU2hdf .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-JG5eGbdm66xU2hdf .cluster-label text{fill:#333;}#mermaid-svg-JG5eGbdm66xU2hdf .cluster-label span{color:#333;}#mermaid-svg-JG5eGbdm66xU2hdf .cluster-label span p{background-color:transparent;}#mermaid-svg-JG5eGbdm66xU2hdf .label text,#mermaid-svg-JG5eGbdm66xU2hdf span{fill:#333;color:#333;}#mermaid-svg-JG5eGbdm66xU2hdf .node rect,#mermaid-svg-JG5eGbdm66xU2hdf .node circle,#mermaid-svg-JG5eGbdm66xU2hdf .node ellipse,#mermaid-svg-JG5eGbdm66xU2hdf .node polygon,#mermaid-svg-JG5eGbdm66xU2hdf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-JG5eGbdm66xU2hdf .rough-node .label text,#mermaid-svg-JG5eGbdm66xU2hdf .node .label text,#mermaid-svg-JG5eGbdm66xU2hdf .image-shape .label,#mermaid-svg-JG5eGbdm66xU2hdf .icon-shape .label{text-anchor:middle;}#mermaid-svg-JG5eGbdm66xU2hdf .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-JG5eGbdm66xU2hdf .rough-node .label,#mermaid-svg-JG5eGbdm66xU2hdf .node .label,#mermaid-svg-JG5eGbdm66xU2hdf .image-shape .label,#mermaid-svg-JG5eGbdm66xU2hdf .icon-shape .label{text-align:center;}#mermaid-svg-JG5eGbdm66xU2hdf .node.clickable{cursor:pointer;}#mermaid-svg-JG5eGbdm66xU2hdf .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-JG5eGbdm66xU2hdf .arrowheadPath{fill:#333333;}#mermaid-svg-JG5eGbdm66xU2hdf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-JG5eGbdm66xU2hdf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-JG5eGbdm66xU2hdf .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JG5eGbdm66xU2hdf .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-JG5eGbdm66xU2hdf .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JG5eGbdm66xU2hdf .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-JG5eGbdm66xU2hdf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-JG5eGbdm66xU2hdf .cluster text{fill:#333;}#mermaid-svg-JG5eGbdm66xU2hdf .cluster span{color:#333;}#mermaid-svg-JG5eGbdm66xU2hdf 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-JG5eGbdm66xU2hdf .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-JG5eGbdm66xU2hdf rect.text{fill:none;stroke-width:0;}#mermaid-svg-JG5eGbdm66xU2hdf .icon-shape,#mermaid-svg-JG5eGbdm66xU2hdf .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JG5eGbdm66xU2hdf .icon-shape p,#mermaid-svg-JG5eGbdm66xU2hdf .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-JG5eGbdm66xU2hdf .icon-shape .label rect,#mermaid-svg-JG5eGbdm66xU2hdf .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JG5eGbdm66xU2hdf .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-JG5eGbdm66xU2hdf .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-JG5eGbdm66xU2hdf :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 学生成绩管理系统
学生管理模块
课程管理模块
成绩管理模块
统计分析模块
学生信息录入
学生信息查询
学生信息修改
学生信息删除
课程信息录入
课程信息查询
课程信息修改
成绩录入
成绩查询
成绩修改
成绩统计
成绩分析
报表生成

(三)模块设计

学生管理模块设计

子模块 功能 输入 输出
学生信息录入 录入学生信息 学生信息 录入结果
学生信息查询 查询学生信息 查询条件 学生信息
学生信息修改 修改学生信息 修改信息 修改结果
学生信息删除 删除学生信息 学生ID 删除结果

(四)接口设计

接口设计示例

复制代码
接口名称:addStudent
功能描述:添加学生信息
输入参数:
  - studentId: String, 学生ID
  - name: String, 姓名
  - age: Integer, 年龄
  - major: String, 专业
输出参数:
  - result: Boolean, 操作结果
  - message: String, 操作消息

📝 总结

模块化是软件设计的核心思想,是构建高质量软件系统的基础。

🎯 模块化定义:将复杂系统分解为相对独立的、具有特定功能的模块。模块具有功能明确、边界清晰、相对独立、可替换、可复用等特征。

📦 设计原则:模块化------将系统分解为模块;抽象------抽取本质特征;信息隐藏------隐藏模块内部细节;高内聚------模块内部元素紧密相关;低耦合------模块间依赖关系简单。

🌐 内聚性:从低到高分为偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚。追求功能内聚,避免偶然内聚。

💡 耦合性:从强到弱分为内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合、无直接耦合。追求数据耦合,避免内容耦合。

📋 设计方法:自顶向下设计、逐步求精、功能分解、数据流分解、事务分解。


核心启示:模块化是软件设计的基石,"分而治之"是解决复杂问题的有效策略。良好的模块化设计能够显著提高软件的可维护性、可理解性、可测试性和可复用性。在实际工作中,我们需要注意:第一,遵循高内聚低耦合的原则,这是模块化设计的核心;第二,模块功能要单一,一个模块只做一件事;第三,模块接口要简单,减少模块间的依赖;第四,重视信息隐藏,保护模块内部实现;第五,模块大小要适中,既不要太大也不要太小。模块化设计是一项需要经验和技巧的工作,需要设计师具备良好的抽象能力和分解能力。通过合理的模块化设计,我们可以将复杂的软件系统分解为可管理的模块,从而提高软件质量和开发效率。


相关推荐
郝学胜-神的一滴13 小时前
Qt 高级编程 040:按钮悬浮弹出滑块弹窗的完整攻略
开发语言·c++·qt·软件工程·用户界面
rolt1 天前
《软件方法》强化自测题-分析(12)
软件工程·架构师·uml
lanfordxb2 天前
从 Markdown 到图片卡片:MarkCard Studio 的功能设计与官网实现记录
rust·软件工程·ai工具
郝学胜-神的一滴2 天前
[简化版 GAMES 104] 现代游戏引擎 04:从0到1构建你的游戏世界
c++·游戏·unity·游戏引擎·软件工程·unreal engine
Dr.kangder2 天前
嵌入式处理器架构解析(七)——SPARC
架构·嵌入式·软件工程
智造ERP规划2 天前
项目型制造成本核算:WBS成本归集、变更冲击量、完工百分比,三个逻辑讲透
数据库·系统架构·软件工程·制造
智造ERP规划2 天前
项目型制造财务核算全流程:收入什么时候确认、成本怎么归集、开票≠收款,一条链讲透
大数据·系统架构·软件工程·制造
梁辰兴3 天前
软件工程:概要设计的任务
软件工程·设计原则·设计方法·梁辰兴·关键要点·概要设计的任务·主要任务
Dr.kangder3 天前
AI4SE:AI赋能软件工程——从自动化到智能化的演进之路
人工智能·自动化·软件工程