设计模式——系统数据建模设计

article/2025/6/23 9:52:56

摘要

本文主要介绍了UML在软件系统分析和设计中的应用,详细阐述了六大类关系(泛化、实现、依赖、关联、聚合、组合)及其在UML类图中的表示方法,并通过具体例子说明了这些关系在实际编程中的应用。同时,文章还概述了UML的基本元素,包括类、接口、协作、用例、组件和节点。此外,文章还介绍了软件系统建模的目的、常见建模类型、常用建模方法论、建模工具推荐以及真实项目建模建议顺序等内容。

1. 软件系统建模

软件系统建模(Software System Modeling)是指通过一套可视化方法对系统的结构、行为和交互进行表达、设计与沟通,是架构设计、需求分析、编码实现的重要中间步骤。它连接业务需求与技术实现,确保团队对系统的理解一致,降低出错率和维护成本。

1.1. 🔧 建模的目的

目的

描述

需求明确

把复杂业务需求变为清晰的模型,形成共识

架构设计

构建系统模块结构、交互关系

开发指导

为编码提供蓝图,指导模块拆分与责任划分

团队协作

提升沟通效率,减少理解偏差

演进与扩展

支撑后续架构演进与系统扩展

1.2. 🧱 常见的建模类型(UML为主)

1.2.1. 结构建模(结构图)

图类型

描述

工具意义

类图(Class Diagram)

描述类之间的继承、实现、关联、依赖等关系

表达模块结构、责任划分

包图(Package Diagram)

显示包与包之间的组织关系

架构分层设计(DDD / 分模块)

组件图(Component Diagram)

描述系统的组件、接口和依赖关系

表达微服务或模块之间依赖关系

部署图(Deployment Diagram)

显示物理部署环境和系统部署结构

表达系统运行环境部署结构

1.2.2. 行为建模(行为图)

图类型

描述

工具意义

用例图(Use Case Diagram)

展示系统与用户的交互行为

用于需求梳理

时序图(Sequence Diagram)

表达对象间消息交互的时序

分析调用链、数据流

活动图(Activity Diagram)

表示业务流程或算法过程

表达流程逻辑

状态图(State Diagram)

展示对象状态变化

表达生命周期、状态控制逻辑

1.3. 🧭 常用建模方法论(理论指导)

方法

描述

UML(统一建模语言)

最主流的建模标准,覆盖结构与行为

DDD(领域驱动设计)

按业务划分建模,聚焦业务核心复杂性

4+1 视图模型

逻辑视图、开发视图、进程视图、物理视图+用例视图

架构图(Architecture Diagram)

表达服务、模块、数据库等组成和连接

1.4. 🛠️ 建模常用工具推荐

工具

特点

PlantUML

文本生成图,适合开发者

StarUML

可视化建模,UML全支持

Visual Paradigm

商业级全面建模工具

ProcessOn / Draw.io

在线可协作,适合流程图

Archimate / C4 Model

企业架构级、云系统建模更专业

1.5. 🧪 真实项目建模建议顺序(Spring系统示例)

  1. 用例图:梳理用户角色、功能模块(业务端、运营后台、API系统等)
  2. 类图 + 包图:分层架构设计(Controller、Service、Domain、Infrastructure)
  3. 时序图:关键服务间调用链(如下单、支付、风控处理)
  4. 活动图:业务流程建模(审批流程、用户注册流程等)
  5. 状态图:状态机建模(订单、审批、还款状态等)
  6. 部署图 + 组件图:部署环境、微服务、数据库、MQ 等组件关系表达

1.6. 📝 示例:订单系统建模(核心图)

  • 状态图:订单状态变迁图
  • 时序图:下单流程时序图
  • 类图:订单聚合根、商品、用户等类关系
  • 活动图:支付流程活动图
  • 部署图:服务、Redis、MySQL、MQ、API 网关部署结构

2. 对象之间六大关系

面向对象是符合人们对现实世界的思维模式,利用面向对象设计,特别是采用各种设计模式来解决问题时,会设计多个类,然后创建多个对象,一个设计良好的类,应该是兼顾信息和行为并且高内聚。而不同的类之间,应该做到松耦合。当面对应用系统或者需要解决的问题经常是复杂的、高度抽象的,我们 创建的多个对象往往是有联系的,通常对象之间的关系可以分为以下几类:

  1. 泛化关系(继承extends)
  2. 实现关系(实现implement)
  3. 依赖关系
  4. 关联关系
  5. 聚合关系
  6. 组合关系

2.1. ✳️ 泛化关系=继承关系(extends

  • 表示父类和子类之间的关系,是一种“is-a(是一个)”关系。
  • 子类继承父类的属性和方法,可以重写父类方法。
class Animal {public void makeSound() {System.out.println("Animal sound");}
}class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("Dog barks");}
}

关系含义:DogAnimal 的一种 —— “Dog is-a Animal”。

2.2. ✳️ 实现关系= 接口实现(implements

  • 表示接口与类之间的关系,类提供接口中定义方法的具体实现。
  • 也是“is-a”的一种,但更偏向行为契约。
interface Runnable {void run();
}class Car implements Runnable {public void run() {System.out.println("Car is running");}
}

关系含义:Car 实现了 Runnable 行为规范。

2.3. ✳️ 依赖关系(Dependency)

  • 表示一个类临时使用到另一个类,常出现在方法的参数、局部变量中。
  • 是一种“uses-a”关系(使用)。

示例:

class OrderService {public void process(Payment payment) {payment.pay();}
}
class Payment {public void pay() {System.out.println("Paying...");}
}

关系含义:OrderService 依赖 Payment 执行操作,但不直接拥有它。

2.4. ✳️ 关联关系(Association)

  • 表示两个类之间存在某种联系,一个类持有另一个类的引用
  • 是一种“has-a”关系。

示例:

class Teacher {private Student student;
}

关系含义:TeacherStudent 存在关联,一个老师可以教多个学生。

2.5. ✳️ 聚合关系(Aggregation)

  • 是一种特殊的关联关系,表示整体与部分之间的关系,部分可以脱离整体单独存在
  • 类似“弱拥有”关系。

示例:

class Team {private List<Player> players;
}class Player {private String name;
}

关系含义:Team 拥有 Player,但 Player 也可以脱离 Team 独立存在。

2.6. ✳️ 组合关系(Composition)

  • 是更强的聚合关系,表示整体与部分的关系,部分不能脱离整体单独存在
  • 类似“强拥有”关系。

示例:

class House {private Room room = new Room();  // 生命周期绑定
}class Room {...
}

关系含义:RoomHouse 的一部分,House 消失,Room 也不复存在。

2.7. ✳️ 对象的六种关系对总结

关系类型

关键字/形式

含义

示例

泛化(继承)

extends

is-a

Dog is an Animal

实现

implements

is-a (行为)

Car implements Runnable

依赖

参数/方法调用

uses-a

Service uses DAO

关联

引用字段

has-a

Teacher has Student

聚合

引用字段(弱)

whole-part(可独立)

Team has Players

组合

引用字段(强)

whole-part(生命周期一致)

House has Rooms

3. UML基本元素

UML(Unified Modeling Language,统一建模语言)是一种面向对象系统建模的标准语言,它通过一套图形符号描述系统的结构与行为。在实际建模中,掌握 UML 的基本元素 是构建各类模型图的基础。

3.1. 🧩 UML 的三类基本建模元素

类别

说明

示例元素

结构元素(Structural Things)

表示系统中的静态部分(如类、对象、组件等)

类、接口、组件、节点、用例、角色

行为元素(Behavioral Things)

表示系统中的动态行为

交互、状态、活动、消息

分组元素(Grouping Things)

对模型元素进行逻辑组织

包(Package)

注释元素(Annotational Things)

对模型元素进行说明

备注(Note)

3.2. 🧱 结构元素(静态)

元素

图标(简化描述)

含义

类(Class)

矩形分为三部分:类名、属性、方法

描述一组具有相同属性与行为的对象集合

接口(Interface)

椭圆/类图中加«interface»

描述一组没有实现的方法供类实现

用例(Use Case)

椭圆形

描述系统的一个功能点

参与者(Actor)

小人图标

与系统交互的用户或系统

组件(Component)

带两个凸齿矩形

代表系统中的模块或服务

节点(Node)

立方体或服务器形状

表示硬件或运行环境

3.3. 🔁 行为元素(动态)

元素

图标(简化描述)

含义

状态(State)

圆角矩形

对象在生命周期中的某个阶段

事件(Event)

箭头/消息线

引起状态转换的行为或信号

活动(Activity)

椭圆/矩形表示动作

描述系统的业务流程

消息(Message)

带箭头的线

对象间的调用行为

交互(Interaction)

多个对象之间按照时间发送的消息

表达行为协作逻辑

3.4. 📦 分组元素

元素

含义

示例

包(Package)

用于将类、接口、组件等组织成逻辑分组,方便管理和层次结构设计

典型用于模块划分,如:com.example.user

3.5. 📝 注释元素

元素

图标

含义

备注(Note)

右上角折角的矩形

为模型元素添加说明和解释性文字

3.6. 🔗 关系元素(连接符号)

UML 中有 6 种基本的关系用于表示结构或行为之间的连接:

关系

图示描述

用途

示例说明

关联(Association)

实线(可带箭头)

表示类与类之间有联系

用户和订单之间的关系

依赖(Dependency)

虚线 + 箭头

A 依赖 B,B 改变影响 A

Service 依赖 DAO

泛化(Generalization)

实线 + 空心三角箭头

表示继承(类)或实现(接口)

人 <- 学生

实现(Realization)

虚线 + 空心三角箭头

类实现接口

UserServiceImpl implements UserService

聚合(Aggregation)

实线 + 空心菱形

表示“整体-部分”关系,弱依赖

部门 包含 员工

组合(Composition)

实线 + 实心菱形

表示“强拥有”关系,生命周期一致

House 包含 Room

3.7. 🧠 UML 九大图(分类)

图类型

分类

描述

类图

结构图

展示类与类之间的静态结构关系

对象图

结构图

类图的实例快照

用例图

行为图

展示用户和系统的功能交互

时序图

行为图

对象之间消息交互的时间顺序

活动图

行为图

展示系统的控制流程

状态图

行为图

展示对象状态的变化

组件图

结构图

描述系统模块与接口

部署图

结构图

描述硬件与系统部署结构

通信图

行为图

强调对象间消息传递顺序

博文参考

UML类图中符号定义,作用及区别总结 | 一线攻城狮


http://www.hkcw.cn/article/CuAebxNArM.shtml

相关文章

37. Sudoku Solver

题目描述 37. Sudoku Solver 回溯 class Solution {vector<vector<bool>> row_used;vector<vector<bool>> col_used;vector<vector<bool>> box_used;public:void solveSudoku(vector<vector<char>>& board) {row_used.r…

【Java开发日记】基于 Spring Cloud 的微服务架构分析

目录 1、Spring Cloud 2、Spring Cloud 的核心组件 1. Eureka&#xff08;注册中心&#xff09; 2. Zuul&#xff08;服务网关&#xff09; 3. Ribbon&#xff08;负载均衡&#xff09; 4. Hystrix&#xff08;熔断保护器&#xff09; 5. Feign&#xff08;REST转换器&a…

进程间通信IV System V 系列(linux)

目录 消息队列 原理 操作 补充概念 信号量 (原子性计数器) 原理 操作 (和共享内存相似) 总结 小知识 消息队列 原理 在内核中建立一个队列&#xff0c;进程可以相互进行通信&#xff0c;通过队列进行IPC&#xff0c;就是进程之间发送带类型的数据块。 操作 接口和共享…

【MySQL】索引(B+树详解)

MySQL(五)索引 一、索引的减I/O设计 1.读取量 2.搜索树 2.1方向 2.2有序 3.分多叉 3.1B树 弊端: 3.2B树 3.2.1非叶子-搜索字段 3.2.1.1海量分叉 3.2.1.1.1最大式 3.2.1.1.2最快式 3.2.1.2缓存内存 3.2.1.2.1字段总量小 3.2.1.2.2时间复杂度 3.2.1.3区间搜索向…

2025年全国青少年信息素养大赛复赛C++算法创意实践挑战赛真题模拟强化训练(试卷4:共计6题带解析)

2025年全国青少年信息素养大赛复赛C++算法创意实践挑战赛真题模拟强化训练(试卷4:共计6题带解析) 第1题:最佳情侣身高差(题目及解析) 题目描述 专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高) 1.09 =(男方的身高)。如果符合,你俩的身…

5.31 day33

知识点回顾&#xff1a; PyTorch和cuda的安装 查看显卡信息的命令行命令&#xff08;cmd中使用&#xff09; cuda的检查 简单神经网络的流程 数据预处理&#xff08;归一化、转换成张量&#xff09; 模型的定义 继承nn.Module类 定义每一个层 定义前向传播流程 定义损失函数和优…

【C++】模板

目录 1、函数模板 基本用法 函数模板的实现原理 函数模板的实例化 模板参数的匹配原则 2、类模板 类模板的定义格式 类模板的实例化 1、函数模板 基本用法 template < typename T >返回值类型 函数名(参数列表){} template 是模板的意思&#xff0c;typename是…

第六十二节:深度学习-加载 TensorFlow/PyTorch/Caffe 模型

在计算机视觉领域,OpenCV的DNN(深度神经网络)模块正逐渐成为轻量级模型部署的利器。本文将深入探讨如何利用OpenCV加载和运行三大主流框架(TensorFlow、PyTorch、Caffe)训练的模型,并提供完整的代码实现和优化技巧。 一、OpenCV DNN模块的核心优势 OpenCV的DNN模块自3.3…

Linux系统下安装配置 Nginx

Windows Nginx https://nginx.org/en/download.htmlLinux Nginx https://nginx.org/download/nginx-1.24.0.tar.gz解压 tar -zxvf tar -zxvf nginx-1.18.0.tar.gz #解压安装依赖&#xff08;如未安装&#xff09; yum groupinstall "Development Tools" -y yum…

qwen3解读

1. 模型架构 重点&#xff1a; 思维模式和非思维模式这两种不同的操作模式集成到一个模型中。这样可以让用户在这些模式间切换&#xff0c;而不是在不同模型间切换。多阶段的后培训方法&#xff1a;增强推理和非推理模式。将基础模型和人的偏好结合。 预训练阶段&#xff1a…

用127.0.0.1访问VMware虚拟机中间件

文章目录 前言一、虚拟机安装、插件安装二、改虚拟机配置1.更改虚拟机使用的是 NAT 模式2.编辑 VMware 的 NAT 设置并添加端口转发 总结至此大功告成了&#xff01;&#xff01;&#xff01; 前言 docker 安装中间件很方便,平时使用windows作开发,如果想快速安装中间件,那么首…

【大模型部署】mac m1本地部署 ChatGLM3-6B 超详细教程

本人环境&#xff1a;macOS 15.5 (Sonoma) - Apple M1 / 16 G 目标&#xff1a;在 mac m1 16G 上 完全离线 的本地模型目录上&#xff0c;跑通官方 ChatGLM3-6B 目录 背景 & 踩坑记录 准备工作 新建 Conda 环境并安装依赖 关键环境变量 运行 composite_demo 常见报错与…

评标专家随机抽选系统-建设方案——仙盟创梦IDE

政策要求 抽选记录保存 专辑库管理 系统统计 抽选打印 系统分级管理 项目管理 系统分级管理 集团公司管理 专家补抽 评标专家随机抽选 1、系统分级管理合规 符合《数据安全法》第二十一条&#xff08;分类分级制度&#xff09;&#xff0c;安全按照不同职级&#xff0c;配置权…

2.5/Q2,Charls最新文章解读

文章题目&#xff1a;Trajectories of depressive symptoms and risk of chronic liver disease: evidence from CHARLS DOI&#xff1a;10.1186/s12876-025-03943-7 中文标题&#xff1a;抑郁症状的轨迹和慢性肝病风险&#xff1a;来自 CHARLS 的证据 发表杂志&#xff1a;BM…

win1011安装WinGet和Windows Terminal

前言 winget是微软推出的类似Ubuntu apt 的包管理器。安装winget建议一同安装微软推出的代替conhost.exe的新版命令提示符工具Windows Terminal。 安装 Windows Terminal 微软商店 github 安装后以管理员打开老版命令提示符&#xff0c;上方任务栏右键-默认值-终端-默认终端…

深 入 剖 析 单 链 表:从 原 理 到 实 战 应 用

深 入 剖 析 单 链 表&#xff1a;从 原 理 到 实 战 应 用 顺 序 表 的 问 题单 链 表单 链 表 与 顺 序 表 区 别相 关 概 念链 表 定 义单 链 表 定 义存 储 结 构 单 链 表 的 操 作 实 现代 码 全 貌 与 功 能 介 绍单 链 表 的 功 能 说 明代 码 效 果 展 示代 码 详 解S…

【LLM相关知识点】关于LLM项目实施流程的简单整理(一)

【LLM相关知识点】关于LLM项目实施流程的简单整理&#xff08;一&#xff09; 文章目录 【LLM相关知识点】关于LLM项目实施流程的简单整理&#xff08;一&#xff09;零、学习计划梳理&#xff1a;结合ChatGPT从零开始学习LLM & 多模态大模型一、大模型相关应用场景和头部企…

Vue 核心技术与实战day07

1. vuex概述 2. 构建 vuex [多组件数据共享] 环境 <template><div id"app"><h1>根组件- {{ title }}- {{ count }}</h1><input :value"count" input"handleInput" type"text"><Son1></Son1>…

【android bluetooth 案例分析 04】【Carplay 详解 3】【Carplay 连接之车机主动连手机】

1. 背景 在前面的文章中&#xff0c;我们已经介绍了 carplay 在车机中的角色划分&#xff0c; 并实际分析了 手机主动连接车机的案例。 感兴趣可以 查看如下文章介绍。 【android bluetooth 案例分析 04】【Carplay 详解 1】【CarPlay 在车机侧的蓝牙通信原理与角色划分详解】…

【stm32开发板】单片机最小系统原理图设计

一、批量添加网络标签 可以选择浮动工具中的N&#xff0c;单独为引脚添加网络标签。 当芯片引脚非常多的时候&#xff0c;选中芯片&#xff0c;右键选择扇出网络标签/非连接标识 按住ctrl键即可选中多个引脚 点击将引脚名称填入网络名 就完成了引脚标签的批量添加 二、电源引…