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类图关系完整示例

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

相关推荐
专注API从业者42 分钟前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
疯狂打码的少年1 小时前
UML类图究竟是什么?—— 软件开发中的“建筑蓝图”
uml
摇滚侠1 小时前
DBeaver 导入数据库 导入 SQL 文件 MySQL 备份恢复
java·数据库·mysql
keep one's resolveY1 小时前
SpringBoot实现重试机制的四种方案
java·spring boot·后端
天空属于哈夫克32 小时前
企业微信API常见的错误和解决方案
java·数据库·企业微信
摇滚侠3 小时前
VMvare 虚拟机 Oracle19c 安装步骤,远程连接 Oracle19c,百度网盘安装包
java·oracle
梁萌3 小时前
idea报错找不到XX包的解决方法
java·intellij-idea·启动报错·缺少包
Agent产品评测局3 小时前
生产排期与MES/ERP系统打通,实操方法详解 —— 2026企业级智能体自动化选型与实战指南
java·运维·人工智能·ai·chatgpt·自动化
阿丰资源3 小时前
基于Spring Boot的电影城管理系统(直接运行)
java·spring boot·后端
呱牛do it3 小时前
企业级门户网站设计与实现:基于SpringBoot + Vue3的全栈解决方案(Day 8)
java