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

UML类与类之间的关系

目录

  • 一、简介
  • 二、UML类关系
    • 1、依赖关系
    • 2、关联关系
    • 3、聚合关系
    • 4、组合关系
    • 5、泛化关系
    • 6、实现关系
  • 三、总结


一、简介

类与类之间的关系有:

  • 依赖(Dependency)

  • 关联(Association)

  • 聚合(Aggregation)

  • 组合(Composition)

  • 泛化(Generalization)

  • 实现(Implement)

关系的强弱顺序:(由强到弱)

实现 = 泛化 > 组合 > 聚合 > 关联 > 依赖

关系越弱,耦合度越低,关于耦合度可以简单的理解为,当一个类发生变更时,对其他类造成的影响程度,影响越小则耦合度越弱,影响越大耦合度越强。


二、UML类关系

下面我们由弱到强的顺序来讲解UML类关系。

1、依赖关系

依赖关系,使用虚线加箭头表示:

Student
+ field : type
+method(type) : type
Computer
+ field : type
+method(type) : type

依赖关系 是类关系中 耦合最小 的一种关系,类A要完成某个功能引用了类B,则类A依赖类B。

依赖在代码中主要体现为类A的 某个成员函数返回值方法参数局部变量静态方法的调用,则表示类A引用了类B。

Student 类和 Computer 类为例,示例代码如下:

public class Computer{
	public void start(){
	}
}

public class Student{
	public void playGame(Computer computer){
		computer.start();
	}
}

学生玩电脑游戏需要传入一个电脑对象,因此我们说Student类依赖Computer类。

2、关联关系

关联关系指的是,一个类与另一个类之间有某种关联,这种关联关系可以使用HAS-A表示。

关联关系如果进行详细的划分,又可进一步分为 单向关联双向关联自关联

单向关联,使用实线加箭头表示:

Student
+ field : type
+method(type) : type
Teacher
+ field : type
+method(type) : type

双向关联 就是双方各自持有对方类型的成员变量,使用不带箭头的实线表示:

Student
+ field : type
+method(type) : type
Teacher
+ field : type
+method(type) : type

自身关联,使用不带箭头的实线指向自身表示:

Student
+ field : type
+method(type) : type

关联暗示了依赖,二者都用来表示无法用聚合和组合表示的关系。

依赖关系两个类都不会增加属性。其中的一个类作为另一个类的方法的参数或者返回值,或者是某个方法的变量而已。

发生关联关系的两个类,类A成为类B的属性,而属性是一种更为紧密的耦合,更为长久的持有关系。 在代码中的表现如下:

public class Teacher{
}

public class Student{
	public Teacher teacher;
}

从关系的生命周期来看:

  • 依赖关系是仅当类的方法被调用时而产生,伴随着方法的结束而结束。

  • 关联关系当类实例化的时候产生,当类对象销毁的时候关系结束。相比依赖,关联关系的生存期更长。

3、聚合关系

聚合关系,使用空心菱形加实线表示:

Classes
+ field : type
+method(type) : type
Student
+ field : type
+method(type) : type

聚合关系描述的是 整体和部分 的关系,是一种比较特殊的关联关系。

在聚合关系中,整体的生命周期,不会决定部分的生命周期,强调 “整体” 包含 “部分”,但是 “部分” 可以脱离 “整体” 而单独存在。

如图中班级和学生的关系就是整体和部分的关系。


4、组合关系

组合关系,使用 实心菱形加实线 表示:

Person
+ field : type
+method(type) : type
Heart
+ field : type
+method(type) : type

组合关系也可以看作是一种 特殊的聚合关系,是一种比聚合关系还要强的关系。

组合关系与聚合关系最大的不同在于: 组合关系这里的“部分”脱离了“整体”是无法存活的,部分就不复存在,整体的生命周期决定部分的生命周期,部分是依附在整体上面的,有时候也有人称为合成关系。

5、泛化关系

泛化关系,就是指 类和类接口与接口 之间的继承关系,就是一个类继承另一个类所有的描述,并且可以根据需要对父类进行拓展,是面向对象的重要特征之一。

泛化关系,使用实线加三角形箭头表示:

Human
+ field : type
+method(type) : type
Student
+ field : type
+method(type) : type
Teacher
+ field : type
+method(type) : type

6、实现关系

实现关系,主要针对接口和抽象类而言,实现接口和抽象类的类必须要实现他们的方法。

实现关系,使用虚线加三角形箭头表示:

«interface»
IHuman
+method(type) : type
Student
+ field : type
+method(type) : type
Teacher
+ field : type
+method(type) : type

三、总结

  • 依赖关系比较好区分,它是耦合度最弱的一种,在编码中表现为类成员函数的局部变量、方法参数、返回值或对静态方法的调用;

  • 关联聚合组合 在编码形式上都以类成员变量的形式来表示,所以只给出一段代码我们很难判断出是关联、聚合还是组合关系,我们需要从上下文语境中来判别;

  • 关联关系 表示类之间存在联系,不存在集体与个体、个体与组成部分之间的关系;

  • 聚合关系 表示类之间存在集体与个体的关系;

  • 组合关系 表示个体与组成部分之间的关系;

  • 依赖关联聚合组合逻辑上的关联泛化物理上的关联。物理上的关联指的是类体的耦合,所以类间耦合性最强。


http://www.kler.cn/a/3121.html

相关文章:

  • 大模型知识蒸馏技术(2)——蒸馏技术发展简史
  • C动态库的生成与在Python和QT中的调用方法
  • 【美】H1B、F1、CPT、Day 1 CPT、OPT、B1/B2转F1 的核心区别及适用场景
  • 【C语言练习题】整数和实数在计算机中的二进制表示
  • 正则表达式入门
  • 大屏 UI 设计风格的未来趋势
  • 内存操作函数
  • Portainer堪称最优秀的容器化管理平台
  • 条件判断 逻辑运算符
  • Visual chatgpt多模态大模型的前菜
  • 平板触控笔哪些品牌好?ipad触控笔推荐平价
  • 第十三届蓝桥杯省赛 python B组复盘
  • Spring Boot 自定义应用开发框架九——基本增删改查“低代码”框架初设计2 未完待续
  • MySQL的COUNT语句,竟然都能被面试官虐的这么惨!?
  • 如何实现一个 APM watchdog
  • 通信工程考研英语复试专有名词翻译
  • 【数据结构入门】-二叉树的基本概念
  • Linux系统编程 - 基础IO(IO操作)
  • 【Linux】进程理解与学习(Ⅰ)
  • Vue项目实战 —— 后台管理系统( pc端 ) —— Pro最终版本
  • 【Selenium自动化测试】滑动解锁与窗口截图、关闭
  • Spring Boot 实现多文件上传
  • “提效”|教你用ChatGPT玩数据
  • Android 基础功能例子
  • 智能零售柜商品检测软件(Python+YOLOv5深度学习模型+清新界面)
  • 自定义类型 (结构体)