社区编辑申请
注册/登录
解析几种UML关联关系的区别
开发 架构
UML类图中有关联,依赖,聚合,泛化等几种关系,本文向大家介绍一下几种UML关联关系的区别,希望本文的介绍对你有所帮助。

本文和大家重点讨论一下几种UML关联关系的区别,结合关系(association)是一种静态结构上的关系,换言之,它偏向于数据关系。

几种UML关联关系的区别 

结合关系(association)是一种静态结构上的关系,换言之,它偏向于数据关系。所以,两类别之间放置结合关系,同时意味着这个关系必须被保存起来,这也是为何UML类别图中最常出现的是结合关系。比方说,顾客跟订单之间的关系,就会使用结合关系,因为我们希望系统可以保存两者之间的关系。

结合关系的两端通常是平等的,如果要表达整体-部分(whole-part)意涵时,就可以改用聚合关系(aggregate,空心菱形),或是组合关系(composite,实心菱形)。

特别注意的是:

1.聚合与组合都是一种结合关系,只是额外具有整体-部分的意涵。

2.聚合关系中,整件(wholeobject)不会拥有部件(partobject)的生命周期,所以整件删除时,部件不会被删除。再者,多个整件可以共享同一个部件。

3.组合关系中,整件拥有部件的生命周期,所以整件删除时,部件一定会跟着删除。而且,多个整件不可以同时间共享同一个部件。

至于,实务上倒底要采用聚合关系还是组合关系,不决定于真实,而是决定于企业规则。比方说,订单与细项之间的关系,通常采用组合关系,一旦订单被删掉时,底下的细项也会同时被删除。但是,这是比较常见的企业规则,试想,或许有些领域的交易是可以拆单的,订单被取消时,原先的细项可以被并入别的订单中,若是如此,就适合使用聚合关系了。

一般化(generalization)是两类别之间的关系,不同于上述的结合、聚合或组合关系,它是一种分类关系。或者说,针对某一概念或事物,其个体可区分为一般类(父类别)与特殊类(子类别)时,两者之间便可以放置一般化关系。举例来说,我们会说无线鼠标和有线鼠标(它们都是特殊类别/子类别)都是一种鼠标(一般类别/父类别)。

依赖关系又与上列几种关系不同,先说明为何许多UML书上会说它是短暂关系,其实这是相对于结合(聚合、组合)关系,前面有我们有提到,结合关系是一种静态结构关系,是需要被保存下来的。相较之下,依赖关系并不需要被储存起来,所以才会说它是短暂关系。

最常见的依赖关系(dependency)是一种使用关系,譬如顾客类别里头有一个计算年度交易总额操作好了,在这个操作中必须连到一群当年度的交易对象,并且呼叫交易对象取得交易金额进行累加,才能计算出年度交易总额。在这个例子中,顾客类别与交易类别就有短暂的依赖关系。

再度提醒的是,到底使用结合、聚合、组合、一般化或依赖关系,无关乎真实现象,而是与企业规则,或者与设计者想要表达什么样的设计有关,所以两类别之间具有什么样的关系并无固定答案,端看设计而定。
 

【编辑推荐】

  1. UML依赖和UML关联关系的异同点解析
  2. 几种UML关联关系的区别详解
  3. 技术分享 Eclipse和UML工具EA的连接方法
  4. 三大常用UML工具性能对比
  5. 学习笔记 UML建模要点总结

 

 

责任编辑:佚名 来源: csdn.net
相关推荐

2022-06-12 06:48:34

2022-06-20 22:37:25

Linux操作系统命令

2022-06-05 21:09:47

Python办公自动化

2022-06-27 17:46:53

PythonFlask

2022-06-29 09:19:09

静态代码C语言c代码

2022-06-16 15:42:16

攻击面管理ASM

2022-06-30 14:23:56

机器学习工具算法

2022-06-28 09:26:25

Python配置文件

2022-06-15 11:51:14

Vue3开发避坑

2022-07-01 17:19:33

网络安全零信任

2022-06-28 22:13:33

Polars数据处理与分析

2022-07-01 18:24:36

勒索软件病毒网络攻击

2022-07-01 14:25:27

机器学习人工智能工业4.0

2022-06-30 09:07:52

2022-06-27 19:01:04

Python应用程序数据

2022-06-28 10:22:00

2022-07-01 05:47:19

PyCharm插件开发

2022-06-13 14:18:39

电源管理子系统耗电量服务

2022-06-07 10:09:42

新技术人工智能5G

2022-06-27 23:44:37

云原生云存储云计算

同话题下的热门内容

全链路压测:影子库与影子表之争架构自治服务:构建数据驱动的架构洞察应该知道的RPC内核细节(值得收藏)!!!五张图带你理解 RocketMQ 顺序消息实现机制实现基于 Grafana Loki 的日志报警什么是Pulsar函数流处理应用?使用 Loki 微服务模式部署生产集群SpringBoot+Nacos+Kafka实现微服务流编排

编辑推荐

终于有人把Elasticsearch原理讲透了!花了一个星期,我终于把RPC框架整明白了!拜托!面试不要再问我Spring Cloud底层原理陌陌基于K8s和Docker容器管理平台的架构实践收藏 | 第一次有人把“分布式事务”讲的这么简单明了
我收藏的内容
点赞
收藏

51CTO技术栈公众号