「软件设计」UML中关联,聚合和组合区别

简介: 「软件设计」UML中关联,聚合和组合区别

考虑以下对象类之间的差异和相似之处:宠物、狗、尾巴、主人。


我们可以看到以下关系:

  • 主人喂宠物,宠物感谢主人(关联)
  • 尾巴是狗和猫的一部分(聚集/组成)
  • 猫是一种宠物(遗传/概括)

下图显示了三种类型的关联连接器:关联、聚合和组合。我们将在这个UML指南中复习它们。


640.jpg

640.jpg


640.jpg


下图显示了一个概括。我们将在稍后的UML指南中讨论它。

640.jpg


关联

如果一个模型中的两个类需要彼此通信,那么它们之间必须有一个链接,并且可以通过一个关联(连接器)来表示。

关联可以用这些类之间的一条线表示,该线带有指示导航方向的箭头。如果两边都有箭头,则这种关联称为双向关联。

我们可以通过在表示关联的行中添加多重装饰来表示关联的多重性。该示例表明,一个学生有一个或多个导师:

一个学生可以与多个老师关联:


这个例子表明每个老师都有一个或多个学生:


我们还可以使用角色名指示关联中对象的行为(例如,对象的角色)。


关联vs聚合vs组合

“关联、聚合和组合之间的区别是什么”这个问题最近经常被问到。

聚合和组合是关联的子集,意味着它们是特定的关联案例。在聚合和组合中,一个类的对象“拥有”另一个类的对象。但有一个微妙的区别:

  • 聚合意味着子组件可以独立于父组件而存在。示例:班级(父类)和学生(子类)。删除类,学生仍然存在。
  • 组合意味着子元素不能独立于父元素而存在的关系。例子:房子(父母)和房间(孩子)。房间不能与房子分开。

组合的例子:

除了类A和类B之间的部分关系之外,我们还应该更具体地使用composition链接——这两个类之间存在很强的生命周期依赖关系,也就是说,当类A被删除时,类B也会被删除

640.jpg


聚合的例子:

值得注意的是,聚合链接没有以任何方式声明类A拥有类B,也没有声明两者之间存在父子关系(当父类删除时,其所有的子类也因此被删除)。事实上,恰恰相反!聚合链接通常用于强调类A实例不是类B实例的独占容器,因为实际上同一个类B实例拥有另一个容器/s。


加起来-

总而言之,关联是一个非常通用的术语,用于表示一个类使用另一个类提供的功能时的情况。如果一个父类对象拥有另一个子类对象,并且如果没有父类对象,这个子类对象就不能有意义地存在,那么我们称它为复合。如果可以,就称为聚合。

泛化和专业化

泛化是一种机制,用于将类似的对象类组合成一个更一般化的类。泛化标识一组实体之间的共性。共性可以是属性、行为,或者两者都有。换句话说,超类拥有最通用的属性、操作和可以与子类共享的关系。子类可能有更专门化的属性和操作。

专门化是泛化的反向过程,泛化意味着从现有的类创建新的子类。

例如,银行账户有两种类型——储蓄账户和信用卡账户。储蓄账户和信用卡账户从银行账户中继承了常见的/广义的属性,比如账户号、账户余额等,也有它们特有的属性,比如未结算的付款等。


泛化和继承

泛化是我们用来在UML中表示将公共属性抽象为基类的术语。UML图的泛化关联也称为继承。当我们在编程语言中实现泛化时,它通常被称为继承。泛化和继承是相同的。这些术语只是根据使用的上下文而有所不同。

相关文章
|
21小时前
|
设计模式 Java 程序员
【23种设计模式·全精解析 | 概述篇】设计模式概述、UML图、软件设计原则
本系列文章聚焦于面向对象软件设计中的设计模式,旨在帮助开发人员掌握23种经典设计模式及其应用。内容分为三大部分:第一部分介绍设计模式的概念、UML图和软件设计原则;第二部分详细讲解创建型、结构型和行为型模式,并配以代码示例;第三部分通过自定义Spring的IOC功能综合案例,展示如何将常用设计模式应用于实际项目中。通过学习这些内容,读者可以提升编程能力,提高代码的可维护性和复用性。
【23种设计模式·全精解析 | 概述篇】设计模式概述、UML图、软件设计原则
|
4月前
|
uml
UML 类图几种关系(依赖、关联、泛化、实现、聚合、组合)及其对应代码
UML 类图几种关系(依赖、关联、泛化、实现、聚合、组合)及其对应代码
585 0
|
7月前
|
设计模式 数据可视化 程序员
软件设计模式:UML类图
软件设计模式:UML类图
159 1
|
6月前
|
Java 程序员 C#
程序员必知:UML关联聚合组合关系
程序员必知:UML关联聚合组合关系
67 0
|
设计模式 数据可视化 程序员
设计模式概述、UML图、软件设计原则
设计模式概述 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。 1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造》中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。 1990年软件工程界开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。直到1995 年,艾瑞克·伽马(ErichGamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ra
78 0
|
uml
UML——同步消息和异步消息的区别(顺序图中)
UML——同步消息和异步消息的区别(顺序图中)
1571 0
|
uml C++ 容器
「软件设计」UML中关联,聚合和组合的区别是什么?
「软件设计」UML中关联,聚合和组合的区别是什么?
|
7月前
|
uml
UML之类图
UML之类图
100 1
|
7月前
|
数据可视化 Java uml
IDEA中一个被低估的功能,一键把项目代码绘制成UML类图
IDEA中一个被低估的功能,一键把项目代码绘制成UML类图
427 1
|
4月前
|
Java uml
使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实
该博客文章通过UML类图和Java代码示例,展示了如何使用工厂方法模式设计一个支持加法、减法、乘法和除法运算的计算机程序,并严格按照类图设计实现程序。