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

news2025/7/25 9:53:22

摘要

本文主要介绍了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 {
    @Override
    public 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.coloradmin.cn/o/2400905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决docker运行zentao 报错:ln: failed to create symbolic link ‘/opt/zbox/tmp/mysq

1 背景描述 禅道使用docker部署运行过一段&#xff0c;服务正常。 后因服务器断电重启&#xff0c;禅道服务也随docker一起启动&#xff0c;但是服务却无法访问。如下如&#xff1a; 2 查看日志&#xff0c;定位原因 查看禅道日志&#xff1a; # docker logs zentao容器di…

OA工程自动化办公系统 – 免费Java源码

概述 功能完备的OA工程自动化办公系统Java源码&#xff0c;采用主流技术栈开发&#xff0c;无论是学习SpringBoot框架还是开发企业级应用&#xff0c;都是不可多得的优质资源。 主要内容 技术架构 ​​后端技术栈​​&#xff1a; 核心框架&#xff1a;SpringBoot 2.xORM框…

Apache IoTDB V2.0.3 发布|新增元数据导入导出脚本适配表模型功能

Release Announcement Version 2.0.3 Apache IoTDB V2.0.3 已经发布&#xff01; V2.0.3 作为树表双模型正式版本&#xff0c;主要新增元数据导入导出脚本适配表模型、Spark 生态集成&#xff08;表模型&#xff09;、AINode 返回结果新增时间戳&#xff0c;表模型新增部分聚…

某校体育场馆结构自动化监测

1. 项目简介 某小学学校成立于2020年&#xff0c;是一所公办小学&#xff0c;以高起点定位为该区优质教育新增长极&#xff0c;依托当地学院及教师进修学院附属小学资源&#xff0c;注重学生综合素质培养&#xff0c;近年来&#xff0c;该小学聚焦“五育” 领域&#xff0c;不…

Android 3D球形水平圆形旋转,旋转动态更换图片

看效果图 1、事件监听类 OnItemClickListener&#xff1a;3D旋转视图项点击监听器接口 public interface OnItemClickListener {/*** 当旋转视图中的项被点击时调用** param view 被点击的视图对象* param position 被点击项在旋转视图中的位置索引&#xff08;从0开始&a…

数据结构与算法学习笔记(Acwing 提高课)----动态规划·树形DP

数据结构与算法学习笔记----动态规划树形DP author: 明月清了个风 first publish time: 2025.6.4 ps⭐️树形动态规划&#xff08;树形DP&#xff09;是处理树结构问题的一种动态规划方法&#xff0c;特征也很明显&#xff0c;会有一个树形结构&#xff0c;其实是DFS的优化。…

leetcode hot100刷题日记——36.最长连续序列

解答&#xff1a; 实际上在哈希表中存储不重复的数字。 然后遍历哈希表&#xff0c;找间隔&#xff0c;更新最大间隔。 class Solution { public:int longestConsecutive(vector<int>& nums) {unordered_set<int>hash;for(int num:nums){hash.insert(num);}in…

CentOS7关闭防火墙、Linux开启关闭防火墙

文章目录 一、firewalld开启、关闭防火墙1、查看防火墙状态 一、firewalld开启、关闭防火墙 以下命令在linux系统CentOS7中操作开启关闭防火墙 # 查询防火墙状态 systemctl status firewalld.service # 开启防火墙 systemctl start firewalld.service # 开机自启动防火墙 syste…

PyTorch——搭建小实战和Sequential的使用(7)

import torch from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linearclass TY(nn.Module):def __init__(self):"""初始化TY卷积神经网络模型模型结构&#xff1a;3层卷积池化&#xff0c;2层全连接设计目标&#xff1a;处理32x32像素的…

Python 开发效率秘籍:PyCharm、VS Code 与 Anaconda 配置与实战全解

目录 一、IDE(集成开发环境)是什么?二、Python IDE有哪些&#xff0c;哪款适合初学者&#xff1f;三、Visual Studio Code下载和安装教程3.1 VS Code下载和安装3.2 VS Code运行Python程序 四、PyCharm下载和安装教程4.1 PyCharm下载4.2 PyCharm安装4.3 运行PyCharm4.4 创建工程…

大话软工笔记—组合要素1之要素

1. 要素来源 对象是要素的来源&#xff0c;要素是从对象分解而来的。可将对象分为优化类和非优化类&#xff0c;如下图所示。 对象分类图 2. 要素的概念 2.1 要素的定义 要素&#xff0c;是构成事物必不可少的因素&#xff0c;要素的集合体构成了对象。 2.2 要素的内容 要…

平台化 LIMS 系统架构 跨行业协同与资源共享的实现路径

在科技快速发展的今天&#xff0c;质检行业正面临着效率、合规和数据安全的多重挑战。新一代质检 LIMS 系统以智能化与平台化为核心&#xff0c;为实验室管理提供了全新的解决方案。 一、智能化&#xff1a;从数据采集到分析的全流程升级 传统质检流程中&#xff0c;人工数据录…

RedisTemplate查询不到redis中的数据问题(序列化)

RedisTemplate查询不到redis中的数据问题(序列化) 一.问题描述 存入Redis中的值取出来却为null,问题根本原因就是RedisTemplate和StringRedisTemplate的序列化问题、代码示例&#xff1a; SpringBootTest class Redis02SpringbootApplicationTests {Autowiredprivate RedisTe…

SkyWalking如何实现跨线程Trace传递

一、概述 SkyWalking 的中构建 Trace 信息时会借助 ThreadLocal来存储一些上下文信息&#xff0c;当遇到跨线程的时候&#xff0c;如果 Trace 的上下文信息没有传递到新线程的ThreadLocal 中&#xff0c;那么链路就断开了。那么SkyWalking是如何解决这个问题的呢&#xff1f; …

使用 Spring Boot 3.3 和 JdbcTemplate 操作 MySQL 数据库

在现代的 Java 应用开发中&#xff0c;Spring Boot 提供了强大的工具来简化数据库操作。JdbcTemplate 是 Spring 提供的一个核心类&#xff0c;用于简化 JDBC 操作&#xff0c;减少样板代码。本文将介绍如何在 Spring Boot 3.3 项目中使用 JdbcTemplate 来操作 MySQL 数据库&am…

Axure高保真LayUI框架 V2.6.8元件库

点击下载《Axure高保真LayUI框架 V2.6.8元件库》 原型效果&#xff1a;https://axhub.im/ax9/bf36e6dd89bc4c9f/#g1 摘要 本文详细阐述了在 Axure 环境下打造的一套高度还原 LayUI 框架的组件元件集。通过对 LayUI 框架组件的深入剖析&#xff0c;结合 Axure 的强大功能&…

通讯录实现(Linux+Cpp)

通讯录实现&#xff08;LinuxCpp&#xff09; 产品底层思考&#xff1a; 人员如何存储 -> 链表 &#xff08;增删改 但是排序不适合&#xff09; 文件存储 -> 人员数据的格式 name:xxx,phone:xxx 人员信息 -> 姓名、电话 引出2 name: xxx,phone: xxx,age: xxx,addr…

质检 LIMS 系统数据防护指南 三级等保认证与金融级加密方案设计

面对频发的数据泄露事件&#xff0c;企业亟需构建一套 “防得住、追得回、打得赢” 的防护体系。质检 LIMS 系统通过三级等保认证与金融级加密的结合&#xff0c;为这一目标提供了可行路径。 一、金融级加密&#xff1a;构建数据防护的 “铜墙铁壁” 金融级加密技术通过协议加密…

Spring Boot 从Socket 到Netty网络编程(上):SOCKET 基本开发(BIO)与改进(NIO)

前言 无论是软件还是硬件的本质都是要解决IO问题&#xff08;输入、输出&#xff09;&#xff0c;再说回网络编程本质上都是基于TCP/UP的开发&#xff0c;socket是在此基础上做的扩展与封装&#xff0c;而Netty又是对socket做的封装。本文旨在通过相关案例对socket进行探讨。 一…

79. Word Search

题目描述 79. Word Search 回溯 代码一&#xff0c;使用used数组 class Solution {vector<pair<int,int>> directions{{0,1},{0,-1},{1,0},{-1,0}};vector<vector<bool>> used; public:bool exist(vector<vector<char>>& board, st…