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

【需求工程】统一建模语言UML类图中关联、多样性和角色


UML类图:关联、多样性、角色 完整解读

这是UML类图的基础知识点,分为图示样例 + 文字定义两部分,我拆开逐点讲清楚。

一、先看懂上面的建模样例(人 ↔ 车辆)

1. 两个「类」

  • :属性 = 姓名、出生日期
  • 车辆:属性 = 车辆ID、生产年份
    中间实线代表两个类之间的关联关系,关联名称是「拥有」。

2. 多样性(多重度,图上数字10..*

多样性写在关联线的两端,描述一端的1个实例,可以对应另一端多少个实例

  1. 靠近「人」这端标注 1
    含义:1台车辆,只能属于1个人,一辆车不能有多个车主。
  2. 靠近「车辆」这端标注 0…*
    0= 可以没有,*= 任意多台
    含义:1个人,可以0台、1台、多台车辆(有人没买车,有人有多辆车)。
    整体关系:一对多(1对0或多)
    一个人 → 0/多辆车;一辆车 → 仅一个人。

3. 角色(图中虚线标注的文字)

角色写在对应类的一侧,用来定义这个类在本次关联里的身份:

  • 人这边角色:所有者
    人在“拥有车辆”这件事里,身份是车主、所有者。
  • 车辆这边角色:自身拥有的
    车辆在关联里,是被人所拥有的物品。

4. 关联名称「拥有」

写在两根多样性标注中间,代表这条关联的业务语义:人和车辆之间的关系动作是“拥有”。


二、下方文字逐句翻译解释

类之间的关联是通过边界来描述的。可选择性地为关联定义一个名称。

  1. 两个矩形(类)之间的实线就是关联,用来表达两个事物存在业务联系;
  2. 关联名称(本例“拥有”)是可选加的,不加也合法,加了方便看懂业务含义。

另外,多样性可以被注释在每一个关联的末端。多样性是关于类的实例层级的声明,并且描述一个类中可以以一种特定的方式与另外一个类中所定义实例数量进行关联的实例数量。

  1. 多样性(多重度)写在关联线两头;
  2. 它描述实例数量对应规则:不是类与类的关系,是真实数据行的对应关系;
    举例子:
    类“人”、类“车辆”,实例就是张三、奔驰车、宝马车;
    多样性10..*规定:一条车辆数据,只能绑定一条人数据;一条人数据可以绑定0/多条车辆数据。

在关联的一端或两端注释可选择性的角色,能够进一步精炼出与关联相关的这个类的实例含义。

  1. 角色是可选项,两端可以都写、只写一端,也可以不写;
  2. 作用:区分同一个类在不同关联里的身份。
    拓展举例:
    “人”既可以是车辆的「所有者」,也可以是订单里的「购买人」,用角色就能区分同一类在不同关系里的身份。

三、补充关键知识点

1. 常见多样性符号含义

标注含义
1有且仅有1个
0..10个或1个(可选,最多一个)
0..*/*0个、1个、多个(无上限)
1..*至少1个,最多无限多

2. 关联、多样性、角色三者分工

  1. 关联线:说明两个类有关系;
  2. 关联名:说明是什么关系(拥有、购买、租用);
  3. 多样性:两边实例数量对应规则(一对多、多对多、一对一);
  4. 角色:这个类在关系里是什么身份(所有者、商品、买家)。

3. 套回样例总结一句话

一个所有者(人),可以拥有0台或多台自身拥有的(车辆);而每一台车辆,只能归属1位所有者。

回答2

第一步:先看这张图(图一)画了什么

这张图描述了“人”“车辆”在现实世界中的归属关系。

  • 两个对象(类)
    • :关注他的姓名出生日期
    • 车辆:关注它的车辆ID生产年份
  • 一条关系线(关联):叫做“拥有”
  • 两个“身份标签”(角色)
    • 站在“人”这边,角色叫“所有者”(说明这个人是以车主的身份参与关系的)。
    • 站在“车辆”这边,角色叫“自身拥有的”(说明这辆车是被拥有的资产,而不是租的或借的)。
  • 两串数字(多样性 / 多重性):图中标注了0.(虽然有点模糊,但结合上下文,它通常是0..*0..1这类符号的简写或OCR识别偏差)。我们重点理解它的含义。

第二步:用图二的“规则”来解读这张图

图二告诉我们,类图上的线条、数字和标签分别有什么用。结合图一:

1. 什么是“关联”?(就是那条连线)
  • 图二说:类之间通过边界(连线)来描述关系。
  • 图一实例车辆之间画了一条线,名字叫“拥有”。这明确表示:这两个类在业务上是有联系的,不是孤立存在的。
2. 什么是“角色”?(就是线两端的身份标签)
  • 图二说:在关联的一端或两端注释角色,能进一步精炼类的实例含义。
  • 图一实例:如果没有角色,你只知道“人和车有关系”,但具体是车主?司机?还是代驾?说不清。
    • 在人的那一端标上“所有者”,说明人在这段关系里是“车主”
    • 在车的那一端标上“自身拥有的”,说明车在这段关系里是“被拥有的财产”
  • 作用消除歧义。明确告诉你,这里的“拥有”是“所有权归属”,而不是“临时使用权”。
3. 什么是“多样性(多重性)”?(就是线两端的数字)
  • 图二说:多样性是关于实例层级的声明,描述“这一端的一个实例,能关联到另一端多少个实例”
  • 图一实例(假设数字是0..*1,我们按标准逻辑推演):
    • 看“人”这一端:如果写的是0..*,意思是“一辆车可以被 0 到多个 人拥有吗?”不,通常一辆车只有一个法定车主。所以更合理的解读是,这里的数字在约束“人的数量”。
    • 正确的看图方法:数字写在哪一端,就约束哪一端的数量。
      • 假设写在车辆那端是0..*(零到多),写在这端是0..1(零或一)。
      • 翻译成业务规则
        • 一个人(所有者)可以拥有 0 辆或多辆(0…*)车。(有人没车,有人是土豪有多辆)。
        • 一辆车(自身拥有的)只能被0 个或 1 个(0…1)人所拥有。(新车未售出时是0个主人,卖出后是1个主人,杜绝了一辆车登记在两个人名下的歧义)。

第三步:三者合体,起到什么作用?

关联(线)+角色(标签)+多样性(数字)结合起来,就能精准地定义出一条“业务铁律”,不需要再用大段文字描述。

这张图最终想表达的唯一、精准含义是:

在这个系统中,我们只关心“所有权”关系。一个人(作为所有者)可以拥有任意多辆车(包括零辆);而一辆车(作为被拥有的资产)最多只能归属于一个人(也可能暂时没主人)。


总结:为什么要费劲画这个?

如果没有角色和多样性,只用一条线写个“拥有”,程序员可能会懵:

  • 是“父子关系”的拥有?(继承)
  • 是“司机开车”的拥有?(使用)
  • 是“车主”的拥有?(所有权)

加上角色,明确了是“所有者/资产”;加上数字(多样性),明确了是一对多还是多对多。这样,后续建数据库表(比如外键怎么放)、写代码逻辑(比如校验一个人名下最多几辆车)就有了绝对精确的依据,产品经理和开发就不会吵架了。😊

多样性 - 示例


由上图判断一下描述是否正确:三名导演可以合作导演一部影片。

判断:该描述不正确(错误)。

根据你提供的 UML 类图(或领域模型),“三名导演合作导演一部影片”是不被允许的

为了帮你彻底看懂这张图,我们分三步来拆解图中的“多重性(多样性)”约束:

1. 复习 UML 多重性的读法(关键)

在 UML 中,靠近哪个类的数字,就约束“这个类的实例”能关联对方“多少个”实例

  • 例如:A ——— B,如果 A 旁边写着1,B 旁边写着0..*,含义是:一个 A 实例可以关联 0 到多个 B 实例;而一个 B 实例必须且只能关联 1 个 A 实例

2. 针对“导演”与“电影”的关联(重点)

图里关于“由某某执导”这条关联线的约束是:

  • 靠近“导演”这一端写的是1

    • 含义:一部电影(即一个电影实例)必须恰好关联 1 位导演
    • 这是强制性的一对一(或严格的一对一上限)约束,这意味着系统规定“一部电影只能有唯一的导演”。
  • 靠近“电影”这一端写的是1..3

    • 含义:一位导演可以执导 1 到 3 部电影
    • 这约束的是“一位导演名下可以挂几部电影”,而不是“一部电影可以有几位导演”。

3. 结论与陷阱提示

  • 你的描述是“三名导演合作拍一部电影”,这意味着“一部电影”对应“3 个导演”。
  • 这在逻辑上违反了导演端写的1(上限为 1)的强制性约束。
  • 正确的解读是:在这个模型里,一部电影只能由 1 位导演执导;但反过来,这 1 位导演可以同时执导 1 到 3 部不同的电影

特别提示(帮你避免混淆):
图中电影端也写着1..3,它可能让你误以为“一部电影可以有 1 到 3 个导演”。但请一定看准数字所在的位置——1..3写在电影的对面(靠近导演一侧),它是在说导演的能力上限,而不是电影的名额上限。如果想让“三位导演合拍一部电影”成立,导演那一端的数字必须改成1..3(或*,而不是现在的1。😊

http://www.jsqmd.com/news/1190055/

相关文章:

  • 输入一个关键词,AI 拍完整条短视频——项目开源,整合包一键运行
  • 2026年7月最新苏州雷达官方售后服务网点地址及客服电话一览 - 亨得利钟表维修中心
  • 雪山牧城黄金变现指南|2026 肃北蒙古族自治县合规贵金属回收全维度测评 - 福金阁黄金回收
  • 2026年7月最新昆明卡地亚官方售后维修服务网点地址与客服电话 - 卡地亚服务中心
  • 庄浪县黄金回收市场实测测评|计价透明、无损检测、全城网点全覆盖,卖黄金避坑指南 - 福金阁黄金回收
  • PIC18F85J50与CMT-8540S-SMT组合在嵌入式音频方案中的应用
  • Keyboard Chatter Blocker:3步解决机械键盘连击问题的智能方案
  • 推荐系统中时间分布迁移的ELBO自监督学习实践
  • 2026 沈阳浑南区管道疏通、下水改造、马桶地漏返水维修 靠谱疏通服务推荐前三名 (7 月本地调研参考榜单) - 资讯纵览
  • 影刀RPA实现天猫千牛店铺装修自动化实战指南
  • Claude Code接入DeepSeek API:终端AI编程助手配置指南
  • 上海地坪漆品牌排行:5家合规企业实测对比 - 互联网科技品牌测评
  • 2026精密伺服模组力矩传感器品牌榜单发布,广东犸力高端十大品牌首选 - 品牌速递
  • 2026 抖店自动拍单软件推荐 合规与风险说明 - 抖大侠
  • JavaSE初学---运算符
  • 【P3397地毯】二维地毯覆盖计数
  • 合肥瑶海区公司变更哪家专业?2026靠谱机构推荐 - 小柏云
  • ComfyUI面部修复不翻车:零代码调参法+权重衰减公式(附17组实测Lora融合参数)
  • 国内清水砼厂家实力排行:从性能到场景适配 - 互联网科技品牌测评
  • 低采样率ISAR成像的稀疏重建方法及其实时实现
  • 2026年7月最新扬州积家官方售后热线及客户服务网点地址 - 积家官方售后服务中心
  • 多开手游用什么模拟器最好?MuMu 模拟器 6.0 多开硬核测评
  • 6华亭黄金回收避坑攻略!本地实测3家靠谱门店,高位变现不亏一分钱 - 福金阁黄金回收
  • C++坐标系统实现指南:从原理到工程实践
  • 为什么你的Figma AI转代码项目上线即崩溃:基于Chrome DevTools Performance Timeline的11ms级渲染阻塞根因分析
  • 阿克塞金价持续走高,卖金总被压价?本地三家正规回收门店全维度实测避坑 - 福金阁黄金回收
  • 2026 年新发布:宝兴热门的凉亭防腐木企业怎么联系,明明花了大价钱,为何你家院子三个月就烂成一堆柴火? - 行业鉴选官
  • U++ USTRUCT结构体基本用法
  • 上海微水泥厂家排行:5家合规品牌的实测参数对比 - 互联网科技品牌测评
  • 上海5家主流地坪企业实测排行 聚焦性能与服务 - 互联网科技品牌测评