首页 > 其他分享 >UML之组合与聚合

UML之组合与聚合

时间:2024-12-30 09:23:21浏览次数:1  
标签:封面 聚合 组合 Cover 多重性 Book UML

关联和链接关系在很多情况下是对称的,即被关联的两个类都有以自己为源端对方为目标端的角色存在,而且角色与源端类的属性是等价的,即在关联一端的关联端(角色)等价于另外一端的属性。例如,在下图中,我们可以认为author:Person是类Book的一个属性,而myBooks:Person是类Person的一个属性。

关于关联的详细信息,可参阅《UML之关联》一文。
如果希望表达一种非对称的关系,可以使用“组合”或“聚合”关系进行建模。UML使用实心菱形(组合)或空心菱形(聚合)表达这种关系,菱形放置在关联线上并靠近关系中的占主导地位的元素。
1.组合
组合表达整体与部分的关系,表示组合的实心菱形放置于表示整体的元素的那一端,如下图所示。

在上图表示的组合关系中,靠近Cover的一端给出了多重性值2,而靠近Book的一端未给出多重性,此时它的多重性值将默认为1。这张图描画的模型表明封面(Cover)是书(Book)的一部分,并且一本书包含有两个封面(封面和封底)。
使用组合关系时,“整体”的生命周期将决定“部分”的生命周期。例如在上例建模的场景下,如果我们删除(或者在现实世界中我们焚毁)一本书(Book),则封面(Cover)也将被删除(或焚毁)。
“整体”端一侧的多重性值只能是[1]或者[0..1](注意:在组合关系建模时多重性不需要前后的中括号[ ],参见上图)。例如在上例中,首先一个封面(Cover)不能被用于多本书(Book);其次,如果封面(Cover)不可以从书(Book)中移除,则菱形所在一侧的多重性值只能为[1],如果允许封面(Cover)从书(Book)中移除,则菱形所在一侧的多重性值只能为[0..1]。
“部分”端一侧的多重性允许是任意的合法值,上例中的封面(Cover)是两个,即封面和封底。上述多重性也可以使用独立的组合关系替代,即在Book与Cover之间分别为封面与封底建立组合关系,如下图所示。

组合作为关联的一种类型,理论上关联的所有修饰符都可以应用于组合,不过通常不需要给出组合的名称,而在理解或描述组合时允许有类似以下的说法:
一本书由两个封面组成。
一本书有两个部分是封面。
一个封面是一本书的一部分。
组合是一种非对称的关系:一本书(Book)可以有封面(Cover)作为它的一部分,而一个封面(Cover)不能将同一本书(Book)作为它的一部分。
组合具有传递性,这意味着如果类C是类B的一部分,而类B是类A的一部分,则类C也是类A的一部分。例如某个类(Class)由名称(Name)和属性(Attribute)组成,而属性(Attribute)又有它的组成部分。如果删除类(Class),则不只是名称(Name)和属性(Attribute)会被删除,组成属性(Attribute)的Name、Type、Mult也将被删除。

使用类似上图的树形结构在描述组合或聚合关系非常常见,例如对材料清单、元模型或过程分解建模时都可以使用树形结构。
2.聚合
聚合是组合的一种较弱形式,或者说是关联的一种较强形式。
相对于组合,聚合的目标端可以与多个源端建立关联,即目标端是可以“共享”的。例如在下图中,一本书(Book)可以有多名作为作者(author)的人(Person),而一个人(Person)也可能是多本书(Book)的作者(author)。

此外,组合的“整体“决定了”部分“的生命周期,而聚合不存在这种约束。当聚合的”整体“消失时,”部分“依旧存在,它并不随”整体”而消失。例如当一本书(Book)被销毁时(甚至所有已印刷的书都被销毁时),作为这本书(Book)作者(author)的人(Person)依然健在;反之,当作为作者(author)的一个人(Person)死亡后,并不会影响这本书(Book)的完整性。
可以看到,聚合的语义与常规关联的语义几乎相同。当我们使用聚合时,通常可以直接使用关联来替代它。如果需要强调类似部分的关系而它又不像组合那样紧密与强烈时,则可以选择使用聚合。
最后,特别补充一点,从UML技术角度来说,关联有一个名为AggregationKind的属性,普通关联其值为None,对于组合其值为Composite,对于聚合,其值为Shared。

标签:封面,聚合,组合,Cover,多重性,Book,UML
From: https://www.cnblogs.com/gtyan/p/18640036

相关文章

  • UML类图
    在UML(统一建模语言)中,类是最基本的构造块之一,用于描述系统中的实体以及它们之间的关系。类图(ClassDiagram)展示了系统中类的结构,包括类名、属性、操作(方法)以及类之间的关系。一个典型的类在UML中的表示通常如下所示:+------------------+|类名|+------------------+|......
  • 从家谱的层级结构 - 组合模式(Composite Pattern)
    组合模式(CompositePattern)组合模式(CompositePattern)组合模式概述组合模式涉及的角色talkischeap,showyoumycode总结组合模式(CompositePattern)组合模式(CompositePattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次关系。组......
  • 2024-12-12《UML类图》
    UML九图  1.类图类图(ClassDiagram)是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。类图不仅用于可视化描述和记录系统的不同方面,也为构建可执行代码的软件应用程序。类图描述......
  • UML之关联
    关联指两个类之间的各种联系。UML使用各种单实线表示关联,这个单实线可以是直线(垂直的、水平的或者倾斜的)、折线甚至曲线。事实上,关联也是展示类的属性的另一外的一种形式。例如在下图中,我们通过一条实线连接类Book和类Person,表示它们之间存在关联。在关联的末端,标出多重性[*]和关......
  • 聚合电商API接口平台:让数据成为生产力
    聚合电商API接口平台通过整合多个电商平台的API接口,为商家和开发者提供一站式的数据服务,旨在帮助商家和开发者将数据转化为生产力,从而推动业务的发展。以下是对聚合电商API接口平台的详细解析:一、平台概述聚合电商API接口平台的核心价值在于整合多个电商平台的API接口,实现数......
  • 记一个itertools排列组合和列表随机排序的例子
    朋友不知道哪里弄来了一长串单词列表,一定要搞个单词不重复的组合。那么这个时候我们就可以想到读书时所学的排列组合知识了,而这个在Python中可以怎么实现呢?我记录如下:使用itertools模块实现排列组合在Python中,排列组合可以通过itertools模块来实现。以下是两个主要函......
  • UML之集合类型
    无论何时当我们要使用一个多值对象时,我们必须要清楚两个问题,一是这些值的顺序重要吗?二是允许重复值的存在吗?在编程语言中还会有其他的明确的信息,在UML中,只需明确这两个问题的答案即可确定对应的集合类型。1.SetSet是一个不允许存在重复值且未排序的集合。例如一个骑行活动中,有......
  • 计算机组成原理的学习笔记(10)-- CPU·其二 组合逻辑控制器和微程序
    学习笔记前言​本文主要是对于b站尚硅谷的计算机组成原理的学习笔记,仅用于学习交流。一、组合逻辑控制器定义:利用组合逻辑电路生成控制信号,无存储功能,直接通过硬件实现控制逻辑。基本原理:通过输入信号和逻辑电路生成输出控制信号,主要用于控制器中控制特定操作的执行......
  • uml类图总结
    类图用于描述系统的静态结构,通过展示类、接口及其之间的关系,以便理解和设计系统类图的基本元素1.类(Class):类通常使用矩形框表示,其中包含三部分:类名、属性和方法。示例: 2.接口(Interface):表示方法类似类,但是会在矩形框顶部加上<<interface>>标识示例: 3.......
  • uml上机实验 4
    一实验目的 理解顺序图、协作图、活动图、状态机图的概念及其在系统分析设计中的作用; 了解和掌握软件工程中用例逻辑时序的分析方法; 掌握两种交互图(顺序图和协作图)的差别; 掌握描述一个操作执行过程中所完成工作(动作)的方法; 掌握描述对象内部工作的具体步骤; 掌握使用Rational......