UML类图六种连接方式

本文介绍了UML中常见的关系类型,包括继承、实现的表示(空心三角+实线/虚线),依赖和关联的表示(角+实线/虚线),以及组合和聚合的表示(实心/空心棱形+实线)。通过图表和简要说明,帮助读者理解和记忆这些概念。

UML常用箭头 理解

主要分三类/六种:

继承、实现 :

空心三角+ 实线/虚线

依赖、关联

角+实线/虚线

组合、聚合

实心/空心棱形+ 实线

参照UML图理解、记忆

在这里插入图片描述
对👌,你总结的正是 UML 类图里最核心的 3 大类 / 6 种箭头,我帮你梳理成标准格式:


UML 箭头 3 类 6 种

① 继承 / 实现(Generalization & Realization)

  • 继承 (Generalization)

    • 符号:空心三角 + 实线
    • 含义:子类继承父类,获得父类的属性和方法。
    • 例:Dog ——▷ Animal
  • 实现 (Realization)

    • 符号:空心三角 + 虚线
    • 含义:类实现接口,接口定义行为,类给出具体实现。
    • 例:ArrayList - -▷ List

② 依赖 / 关联(Dependency & Association)

  • 关联 (Association)

    • 符号:普通箭头 + 实线(箭头可选,表示可导航方向)
    • 含义:类之间有“知道/引用”关系,通常是成员变量。
    • 例:Person ——▶ Address
  • 依赖 (Dependency)

    • 符号:普通箭头 + 虚线
    • 含义:临时使用关系,如方法参数、局部变量、方法调用。
    • 例:OrderService - -▶ Logger

③ 组合 / 聚合(Composition & Aggregation)

  • 组合 (Composition)

    • 符号:实心菱形 + 实线(菱形在整体端)
    • 含义:强拥有关系,部分随整体销毁(生命周期绑定)。
    • 例:Car ◆—— Engine
  • 聚合 (Aggregation)

    • 符号:空心菱形 + 实线(菱形在整体端)
    • 含义:弱拥有关系,部分可独立存在。
    • 例:Team ◇—— Player

📌 一句口诀帮记忆

  • 三角形 → is-a(继承/实现)
  • 箭头 → uses(依赖/关联)
  • 菱形 → has-a(聚合/组合)

**对照图(六种箭头一张图,带示例类名)
在这里插入图片描述

关联 (Association)、聚合 (Aggregation) 和 组合 (Composition) 在 UML 里很容易混淆

这个困惑很正常 👍,因为 关联 (Association)聚合 (Aggregation)组合 (Composition) 在 UML 里本来就容易混淆,尤其是实际建模时很多人直接都用关联。

我帮你梳理差别(重点放在组合 vs 关联):


1. 关联 Association

  • 语义:只是说明两个类之间“有关系”,常见是成员变量。

  • 强度:最弱,关系是否长期存在、是否生命周期绑定都没有要求。

  • 例子

    • Person —— Address (人知道地址,但地址可以独立存在)
    • Student —— Course (学生和课程有关联,但相互独立)

2. 聚合 Aggregation(空心菱形)

  • 语义:一种“整体–部分”关系(has-a),但是部分可以脱离整体独立存在。

  • 例子

    • Team ◇—— Player(队伍里有队员,队员离开队伍依旧存在)
  • 本质:比关联更强调“部分–整体”的语义,但生命周期仍不绑定。


3. 组合 Composition(实心菱形)

  • 语义:也是整体–部分关系,但更强,部分的生命周期依赖整体。整体销毁时,部分也会销毁。

  • 例子

    • Car ◆—— Engine(引擎没有车时通常也不独立存在,车没了,引擎也没意义)
    • House ◆—— Room(房子没了,房间也不存在了)

4. 总结对比口诀

  • 关联:有关系就行,随意。
  • 聚合:有整体–部分,但部分能独立。
  • 组合:强拥有,部分跟随整体。

👉 在实际软件设计里:

  • 很多人只用 关联组合(直接忽略聚合);
  • 如果关系只是“知道/引用” → 用关联;
  • 如果是严格的整体–部分关系 → 用组合。

举例

比如 我一个viewgroup中, 里面有很多子View, 子view可以在这个viewgorup 中 也可以用在其他的viewGourp中,当被viewgroup使用时 都扮演重要角色 ,用什么

场景分析

  • ViewGroup = 容器
  • View = 容器的子元素

特点:

  1. 一个 View 可以被添加到不同的 ViewGroup(虽然运行时只能在一个 parent 里,但从建模语义上,它不是依附于某个特定 ViewGroup 的生命周期)。
  2. View 的生命周期 不依赖 ViewGroupView 可以独立存在(你 new 一个 TextView,它就能存在,即使不放进任何 ViewGroup)。
  3. 当被 ViewGroup 使用时,它在结构中很重要,但并不会因为 ViewGroup 被销毁就一定销毁(View 对象依然是个普通对象,只是脱离了树结构)。

对应 UML 关系

👉 这明显符合 聚合 (Aggregation)

  • 整体–部分关系:ViewGroup 是整体,View 是部分。
  • 但部分可以独立存在,也能被别的整体使用。
  • UML 表示:空心菱形 + 实线

如果是组合 (Composition) 的情况?

举个对比:

  • 比如 Car ◆—— Engine,Engine 完全依赖 Car 的生命周期,Car 没了 Engine 就没意义。
  • 在 Android 里,如果有一个自定义控件,它 内部固定创建 子控件,并且这些子控件绝不可能被其他地方复用 → 那就更像组合。

结论

  • ViewGroup–View:用 聚合 (Aggregation) 更合适。
  • 自定义控件–内部固定子控件:可以用 组合 (Composition)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值