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

摘要

本文主要介绍了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(是一个) "关系。
  • 子类继承父类的属性和方法,可以重写父类方法。
scala 复制代码
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"的一种,但更偏向行为契约。
csharp 复制代码
interface Runnable {
    void run();
}

class Car implements Runnable {
    public void run() {
        System.out.println("Car is running");
    }
}

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

2.3. ✳️ 依赖关系(Dependency)

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

示例:

typescript 复制代码
class OrderService {
    
    public void process(Payment payment) {
        payment.pay();
    }
}
csharp 复制代码
class Payment {
    
    public void pay() {
        System.out.println("Paying...");
    }
}

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

2.4. ✳️ 关联关系(Association)

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

示例:

kotlin 复制代码
class Teacher {

    private Student student;
}

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

2.5. ✳️ 聚合关系(Aggregation)

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

示例:

kotlin 复制代码
class Team {
    private List<Player> players;
}

class Player {
    private String name;
}

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

2.6. ✳️ 组合关系(Composition)

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

示例:

java 复制代码
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 九大图(分类)

图类型 分类 描述
类图 结构图 展示类与类之间的静态结构关系
对象图 结构图 类图的实例快照
用例图 行为图 展示用户和系统的功能交互
时序图 行为图 对象之间消息交互的时间顺序
活动图 行为图 展示系统的控制流程
状态图 行为图 展示对象状态的变化
组件图 结构图 描述系统模块与接口
部署图 结构图 描述硬件与系统部署结构
通信图 行为图 强调对象间消息传递顺序

博文参考

researchlab.github.io/2016/11/23/...

相关推荐
zeijiershuai1 小时前
SpringBoot Controller接收参数方式, @RequestMapping
java·spring boot·后端
zybsjn1 小时前
后端项目中静态文案国际化语言包构建选型
java·后端·c#
L2ncE1 小时前
ES101系列07 | 分布式系统和分页
java·后端·elasticsearch
无限大62 小时前
《计算机“十万个为什么”》之前端与后端
前端·后端·程序员
初次见面我叫泰隆2 小时前
Golang——2、基本数据类型和运算符
开发语言·后端·golang
南风lof2 小时前
ReentrantLock与AbstractQueuedSynchronizer源码解析,一文读懂底层原理
后端
写bug写bug3 小时前
彻底搞懂 RSocket 协议
java·后端
就是我3 小时前
轻松管理Linux定时任务:Cron实用教程
linux·后端
橘子青衫3 小时前
深入理解Callable与Future:实现Java多线程中的异步任务处理
java·后端
bobz9653 小时前
libvirt 相关 sock 整理
后端