当前位置: 首页 > news >正文

【设计模式】UML类图关系中的数量表示(详细版)

【设计模式】UML类图关系中的数量表示(详细版)

在UML类图中,数量表示(Multiplicity)用于精确描述类之间的关联关系中对象实例的数量对应关系。它位于关联连线的两端,表示"一个类的实例可以关联到多少个另一个类的实例"。

参考资料:UML基础教程资料!

(关注不迷路哈!!!)


文章目录

  • 【设计模式】UML类图关系中的数量表示(详细版)
    • 前言
    • 一、数量表示的应用规则
    • 二、典型应用场景示例
    • 三、数量表示的特殊情况
    • 四、数量表示的设计意义
    • 五、综合场景示例
      • 场景1:汽车驾驶系统
      • 场景2:商品订单系统
      • 场景3:学校管理系统
      • 场景4:医疗系统
    • 六、验证性问题
    • 总结


前言

常见数量表示符号及含义

标识含义示例场景
0…10个或1个(最多1个)一个人可能有0或1个配偶
0…* 或 *0个或多个(数量不限)一个顾客可以有0或多个订单
1…11只有1个(必须存在)一辆汽车必须有且只有1个引擎
1…*1个或多个(至少1个)一个部门必须有1名或多名员工
n…m特定数量范围一个学期有12…16周课程

标准符号体系
在这里插入图片描述


一、数量表示的应用规则

基础概念可视化

  1. 位置规则
    • 数量标注位于关联关系的两端
    • 标注在靠近目标类的一端
  2. 语法规则
    • 使用两个数字表示范围,中间用"…"连接
    • 单个数字表示固定数量
    • ""表示无限多(等同于0…
  3. 双向关联的数量对应
    • 两端数量可以不同
    • 例如:公司(1)—(1…*)员工

二、典型应用场景示例

  1. 一对一关系(1:1)
    [身份证] "1" ———— "1" [人]
    

在这里插入图片描述

特征

  • 双向强制存在
  • 代码实现:互相持有对象引用
  1. 一对多关系(1:N)
    [公司] "1" ———— "*" [部门]
    

在这里插入图片描述

业务规则

  • 父项必须存在
  • 子项数量可扩展
  1. 多对多关系(M:N)
    [学生] "*" ———— "*" [课程]
    

在这里插入图片描述

实现方式

  • 需要中间关联表
  • 双向无限扩展
  1. 可选关系(0…1)
    [用户] "1" ———— "0..1" [会员卡]
    

在这里插入图片描述

三、数量表示的特殊情况

  1. 复合数量表示
    • 可以组合多个范围,用逗号分隔
    • 示例:1..3, 5..7 表示1-3个或5-7个

在这里插入图片描述

  1. 精确数量表示

    • 使用具体数字,如24
    • 示例:一副扑克有52张牌
      在这里插入图片描述
  2. 无限多表示

    • *0..*的简写
    • 表示数量没有上限限制

四、数量表示的设计意义

  1. 业务约束
    • 反映现实世界中的业务规则
    • 例如:一个订单必须关联至少1个商品
  2. 数据库设计指导
    • 直接影响数据库表的外键设计
    • 1:N关系通常转换为外键
    • M:N关系需要中间关联表
  3. 代码实现指导
    • 影响类的成员变量设计
    • 1对应对象实例
    • *对应集合类型

在这里插入图片描述

五、综合场景示例

场景1:汽车驾驶系统

[汽车] "1" ◆——— "4" [轮胎]
[汽车] "1" ◆——— "1" [引擎]
[车主] "1" ———— "0..*" [汽车]

解释:

  • 每辆汽车必须且只能有1个引擎
  • 每辆汽车必须有4个轮胎
  • 每个车主可以拥有0辆或多辆汽车
    在这里插入图片描述

场景2:商品订单系统

“每个订单(Order)必须包含1-20个商品(Item),每个商品可以属于0-5个促销活动(Promotion)”

在这里插入图片描述

场景3:学校管理系统

在这里插入图片描述

特征

  • 动态范围约束(4-8门课)
  • 资源分配关系(课程与教室)

场景4:医疗系统

在这里插入图片描述

特殊约束

  • 医生负载均衡(5-10个患者)
  • 患者可能无处方(术后观察期)

六、验证性问题

  1. 如何表示"每个用户必须绑定1-2个支付方式"?

在这里插入图片描述

  1. 若改为"至少1个,建议不超过3个"应如何调整?

在这里插入图片描述


总结

提示:拥抱变化,而不被变化摧毁!🚀

在这里插入图片描述

数量表示开发流程

  1. 通过数量表示捕获业务规则
  2. 驱动领域模型设计
  3. 指导集合类型选择
  4. 生成数据库约束

文章转载自:

http://YCLzI87S.rqfmL.cn
http://fchN9Zq9.rqfmL.cn
http://USaqmwKI.rqfmL.cn
http://usp6dBj8.rqfmL.cn
http://zDombk9s.rqfmL.cn
http://BUV7IhuS.rqfmL.cn
http://WAGVEjBK.rqfmL.cn
http://lh3zfpFR.rqfmL.cn
http://aRnJnPNb.rqfmL.cn
http://oryaWIBr.rqfmL.cn
http://Mmp55n8V.rqfmL.cn
http://RtVjuUpR.rqfmL.cn
http://RE9R9JOA.rqfmL.cn
http://aXa6qUY1.rqfmL.cn
http://qQDW3GoH.rqfmL.cn
http://qMY0Fzj7.rqfmL.cn
http://VSNUo3HT.rqfmL.cn
http://qISMuQs0.rqfmL.cn
http://uQ65iW3w.rqfmL.cn
http://dJ5T7XyE.rqfmL.cn
http://nLkMKtmT.rqfmL.cn
http://mISmGVSW.rqfmL.cn
http://hbKMnQYu.rqfmL.cn
http://4L5DD4jS.rqfmL.cn
http://5ZIruPyV.rqfmL.cn
http://6oRhahpn.rqfmL.cn
http://BMf0AN6o.rqfmL.cn
http://GbVuKDcY.rqfmL.cn
http://KAdDVQSs.rqfmL.cn
http://0STEul47.rqfmL.cn
http://www.dtcms.com/a/371955.html

相关文章:

  • 利用 SeBackupPrivilege 的最快方法
  • 华为基于IPD的产品质量计划模板
  • leecoede 二分查找 题集
  • 编写第一个程序-Ai8051U-32bit,Keil设置
  • Objective-C方法参数标签怎么设置
  • 国内外最新AI语言模型行情分析2025年9月最新内容
  • [数据结构] 栈和队列
  • 基于moduo库实现protobuf通信
  • Android开发-图像显示
  • OpenHarmony之设备风险管理平台(SecurityGuard)模块源码详解
  • Kotlin 协程之 Flow 的理解使用及源码解析
  • Vue2.x核心技术与实战(六)-Vuex
  • 认知篇#12:基于非深度学习方法的图像特征提取
  • 软考备考①
  • 信息安全工程师软考攻坚:第三章网络安全技术深度解析与实战训练
  • JDK17日期格式‘MMM’导致九月Sept/Sep格式化异常问题❗❗❗
  • Vulkan 学习(20)---- UniformBuffer 的使用
  • 微信小程序中实现AI对话、生成3D图像并使用xr-frame演示
  • 【不背八股】9.MySQL知识点汇总
  • MySQL6
  • 论文阅读:ICLR 2021 BAG OF TRICKS FOR ADVERSARIAL TRAINING
  • GD32自学笔记:4.ADC
  • LeetCode 522.最长特殊序列2
  • CentOS 7.2 虚机 ssh 登录报错在重启后无法进入系统
  • 腾讯混元 3D 2.0 Windows 便携版:低显存需求下的高效文/图生3D体验
  • 火山 RTC 引擎15 拉流 推流 地址生成器 、合流转推 开关
  • CesiumJS详解:打造专业级Web 3D地球仪与地图的JavaScript库
  • 数据结构:顺序表与链表
  • C++ 前缀和 高频笔试考点 实用技巧 牛客 DP34 [模板] 前缀和 题解 每日一题
  • kotlin - 平板分屏,左右拖动,2个Activity计算宽度,使用ActivityOptions、Rect(三)