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

UML-类图详解

UML中基本概念说明

UML类图中关系连接线说明

UML类图说明

+号表示public、-表示表示private、#表示protected

UML类关系详解

泛化(Generalization)关系

简单的讲就是类之间的继承关系。在UML中,泛化关系用空心三角形+实线来表示,箭头指向为父类。

实现关系

实现是一种类与接口的关系,表示类是接口所有特征和行为的实现,在程序中一般通过类实现接口来描述

依赖(dependence)关系

是一种使用关系,即一个类的实现需要另一个的协助,Java中,方法参数需要传入另一个类的对象,就表示依赖这个类。

关联关系

是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

Java中一个类的全局变量引用了另一个类就表示关联了这个类(如下图:Techer关联了Course)

聚合关系

聚合关系表示的是一种弱的拥有关系。聚合是整体和个体之间的关系,即has-a的关系,体现了A对象可以包含B对象,但是B对象不是A对象一部分;换句话说,部分对象可以存在独立于整体对象的上下文中,整体对象的生命周期不直接决定部分对象的生命周期。

举个例子,考虑一个图书馆和书籍之间的聚合关系。图书馆是整体对象,书籍是部分对象。图书馆包含多本书,但这并不意味着每一本书都必须属于某个特定的图书馆。书籍可以被共享或者被多个图书馆包含。当某个图书馆被关闭时,书籍不一定会被销毁,它们可以被移到其他图书馆或者存在于其他上下文中。

总体来说,聚合关系强调了整体对象和部分对象之间的松散关联,部分对象在某种程度上是独立的。这与强关联的组合关系不同,组合关系中部分对象是整体对象的一部分,其生命周期直接受整体对象的管理。

eg:雁群和大雁的关系,每一只大雁都属于一个雁群,每一个雁群又有很多只大雁。它们之间构成了聚合关系

组合关系

组合也是关联关系的一种特例。组合是一种整体与部分的关系,即contains-a的关系,比聚合强。部分与整体的生命周期一致,整体的生命周期结束也就意味着部分的生命周期结束,组合关系不能共享。程序中组合和关联关系是一致的,只能从语义级别来区分。eg:鸟儿和翅膀的关系

聚合关系与组合关系区分

在UML(Unified Modeling Language)中,组合关系和聚合关系都表示类之间的关联,但它们在语义上有一些区别:

  1. 组合关系(Composition)
  • 组合关系表示一种强烈的“整体与部分”的关系,部分对象的生命周期依赖于整体对象的生命周期。
  • 整体对象拥有部分对象,而部分对象没有独立存在的意义。
  • 在代码实现中,通常体现为整体对象负责创建和管理部分对象的生命周期,当整体对象被销毁时,部分对象也会被销毁。
  • 在UML中,组合关系通常用实心菱形箭头来表示。
  1. 聚合关系(Aggregation)
  • 聚合关系表示一种“整体与部分”的关系,但部分对象的生命周期不受整体对象的影响。
  • 被聚合的对象可以独立存在,它们之间的关系更像是一种拥有关系,而不是生命周期依赖关系。
  • 在代码实现中,聚合关系通常体现为整体对象包含对部分对象的引用,但整体对象的销毁并不会导致部分对象的销毁。
  • 在UML中,聚合关系通常用空心菱形箭头来表示。

举个例子,假设有一个学校和学生的关系:

  • 如果学生和学校之间是组合关系,那么学生对象的生命周期会受学校对象的管理,即学生对象只能存在于一个学校中,并且随着学校的销毁而销毁。
  • 如果学生和学校之间是聚合关系,那么学生对象可以存在于多个学校中,它们之间的关系更像是一种包含关系,而学生对象的生命周期不受学校对象的影响。

UML类图关系完整示例

【参考】:《大话设计模式》

http://www.lryc.cn/news/312566.html

相关文章:

  • Python 快速获取PDF文件的页数
  • uniapp开发小程序使用x-www-form-urlencoded; charset=UTF-8 编码格式请求案例
  • 酷开科技服务升级,酷开系统给消费者更好的使用体验!
  • 【leetcode热题】单词拆分
  • 【论文阅读】MC:用于语义图像分割的深度卷积网络弱监督和半监督学习
  • 读书·基于RISC-V和FPGA的嵌入式系统设计·第3章
  • 本地项目推送到腾讯云轻量应用服务器教程(并实现本地推送远程自动更新)
  • MacOS安装反编译工具JD-GUI 版本需要1.8+
  • 计算机大数据毕业设计-基于Flask的旅游推荐可视化系统的设计与实现
  • java实现pdf转word
  • 【操作系统概念】 第4章:线程
  • STM32/GD32——I2C通信协议
  • Apache Paimon 使用之Creating Catalogs
  • IntelliJ IDEA分支svn
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • Vue开发实例(七)Axios的安装与使用
  • 2024.3.6
  • 抖音视频批量采集软件|视频评论下载工具
  • 苹果 Vision Pro零售部件成本价格分析
  • Seurat 中的数据可视化方法
  • ImportError: cannot import name ‘InterpolationMode‘
  • HSRP和VRRP
  • C及C++每日练习(1)
  • Oracle 12c dataguard查看主备库同步情况的新变化
  • 时间序列-AR MA ARIMA
  • Spring Boot(六十六):集成Alibaba Druid 连接池
  • leetcode 经典题目42.接雨水
  • 高防服务器的主要作用有哪些?
  • 【30 天 JavaScript 挑战】学习笔记
  • 生成 Linux/ubuntu/Debian 上已安装软件包的列表