【JavaSE】类与类的关系--UML
类(对象/接口)之间的关系 -- UML类图展现
2019-07-14 14:37:19 by冲冲
在面向对象程序设计时,类与类之间的关系主要分为:继承,实现,依赖,关联,聚合,组合等6种关系。
各种关系的强弱顺序:泛化 = 实现 > 组合 > 聚集 > 关联 > 依赖 。其中前两种理解很简单,重点是比较容易混淆的后四种。

1. 继承 -- "a is kind of A"
继承(Generalization):亦称泛化,表示一般与特殊的关系。继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加自己的新功能。
【箭头指向】带三角箭头的实线,箭头指向父类。

1 class Athlete {...}
2 class BallAthlete extends Athlete {...}
3 class FootBallAthlete extends BallAthlete {...}
4
5 interface Action {...}
6 interface Speak extends Action {...}
2. 实现 -- "A realize Ia,Ib..."
实现(realization):指的是一个class类实现interface接口(可以是多个)的功能。
【箭头指向】带三角箭头的虚线,箭头指向接口。

1 interface Speak {...}
2 interface Run {...}
3 interface Jump {...}
4
5 class Athlete implements Speak,Run,Jump {....}
3. 依赖 -- "A use B"
依赖(dependency):指的是类A调用类B。类B的变化会影响到类A,但是类A的变化不会影响到类B。表示一种使用关系,一个类的功能实现需要另一个类协助。
【代码表现】类B是类A的局部变量、类B是类A的方法参数、类A调用类B的静态方法。
【特点】依赖关系具有偶然性,临时性,是比较弱的关系。
【例子】比如,我要过河,需要调用一只船,我和船的关系就是依赖关系。
【箭头指向】带箭头>的虚线,箭头指向被使用者。

1 class Ball {...}
2
3 class BallAthlete {
4 public void sport(Ball ball){...}
5 }
4. 关联 -- "A has B"
关联(association):指的是类B作为类A的类属性/成员变量。表示一种拥有关系,一个类知道另一个类的属性和方法。
【代码表现】类B是类A的类属性/成员变量。
【特点】关联关系属于强依赖关系,具有强烈性,长期性。
【箭头指向】带箭头>的实线,箭头指向被拥有者。
【多重性关联】关联的两端都存在一个基数,表示该关联类可以有几个实例。0..1表示可以有0或1个实例;0..*表示对实例的数目没有限制;1表示只能有一个实例;1..*表示至少有一个实例。
①单向关联--使用单箭头

1 public class BallAthlete {
2 private Price price;
3 ......
4 }
5
6 public class Price {
7 ......
8 }
②双向关联--使用双箭头或者不使用箭头

1 public class Teacher {
2 private Student students[];
3 ......
4 }
5
6 public class Student {
7 private Teacher teachers[];
8 ......
9 }
③自身关联--使用单箭头,构成自回路
特点:类的属性对象类型为该类本身。

1 public class Node {
2 private Node subNode;
3 ……
4 }
5. 聚合 -- "A has B"
聚合(Aggregation):表示整体与部分的关系,部分可以离开整体单独存在。
【代码表现】类B是类A的类属性/成员变量。
【特点】聚合关系属于关联关系的一种,但是比关联关系更强。语法上无法区分聚合关系和关联关系,必须根据具体逻辑区分。
【例子】车和车轮是整体与部分的关系,但是车轮离开车还是可以独立存在的。
【箭头指向】带空心菱形的实线,菱形指向整体。

1 public class Car {
2 private Engine engine;
3
4 //构造注入
5 public Car(Engine engine) {
6 this.engine = engine;
7 }
8
9 //设值注入
10 public void setEngine(Engine engine) {
11 this.engine = engine;
12 }
13 ……
14 }
15
16 public class Engine {
17 ……
18 }
6. 组合 -- "A contains B"
组合(Composition):表示整体与部分的关系,部分不能离开整体单独存在。
【代码表现】类B是类A的类属性/成员变量。
【特点】组合关系属于关联关系的一种,但是比聚合关系更强。它要求普通的聚合关系中代表整体的对象,负责代表部分的对象的生命周期。
【例子】公司和部门是整体和部分的关系,但是没有公司,部门也就不存在。
【箭头指向】带实心菱形的虚线,菱形指向整体。

1 public class Head {
2 private Mouth mouth;
3 public Head() {
4 mouth = new Mouth(); //实例化成员类
5 }
6 ……
7 }
8
9 public class Mouth {
10 ……
11 }
【JavaSE】类与类的关系--UML的更多相关文章
- UML类图符号 各种关系说明以及举例
UML中描述对象和类之间相互关系的方式包括:依赖,关联,聚合,组合,泛化,实现等. 表示关系的强弱:组合>聚合>关联>依赖 相互间关系 聚合是表明对象之间的整体与部分关系的关联,而组 ...
- 初识UML类图--类之间关系
前言 最近有打算学习一下设计模式,所以就去看了园子里面左潇龙大哥的设计模式文章,看完之后只有一个感觉,我啥时候也能写出来这么牛逼的文章啊,但是我这语文老师死的早的人还是算了,但是设计模式还是要学的,这 ...
- 设计模式之UML类图的常见关系
设计模式之UML类图的常见关系 本文来自转载 烧点饭博客 本篇会讲解在UML类图中,常见几种关系: 泛化(Generalization),依赖(Dependency),关联(Association), ...
- UML类图五种关系与代码的对应关系
转: UML类图中的五种关系的耦合强弱比较:依赖<关联<聚合<组合<继承 一.依赖关系: (一)说明 虚线+箭头 可描述为:Uses a 依赖是类的五种关系中耦合最小的一种关系 ...
- [UML][转]UML类图符号 各种关系说明以及举例
修改自:http://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.html UML中描述类和类之间相互关系的方式包括:依赖(Dependency ...
- 转 UML类图几种关系的总结
UML类图几种关系的总结 在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregati ...
- [转发]UML类图符号 各种关系说明以及举例
UML中描述对象和类之间相互关系的方式包括:依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition),泛化(Generalizati ...
- 设计模式之UML类图的常见关系(一)
本篇会讲解在UML类图中,常见几种关系: 泛化(Generalization),依赖(Dependency),关联(Association),聚合(Aggregation),组合(Compositio ...
- UML类图中类与类的四种关系图解
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
随机推荐
- NX二次开发 克隆
NXOpen.UF.UFSession theUfSession = NXOpen.UF.UFSession.GetUFSession(); try { //初始化 NXOpen.UF.UFClone ...
- D:\Software\Keil5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include\stm32f10x.h(483): error: #5: cannot open source input file "core_cm3.h": No such file or directory
1. 错误提示信息: D:\Software\Keil5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include\stm32f10x.h(483): erro ...
- Pycharm无法打开,双击没反应
以下方案皆为引用,仅供参考. 方案一: 1.先声明一下,这种解决方法适用于任何版本的永久破解启动不了的情况(包括:2019版本的)2.下面直接切入正题之所以我们破解之后,不能正常启动的原因有两种:① ...
- Java:反射小记
Java:反射小记 对 Java 中的 反射,做一个微不足道的小小小小记 概念 Java 反射指的是在 Java 程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法:对于给定的一个对象, ...
- [火星补锅] 非确定性有穷状态决策自动机练习题Vol.1 T3 第K大区间 题解
前言: 老火星人了 解析: 很妙的二分题.如果没想到二分答案.. 很容易想到尝试用双指针扫一下,看看能不能统计答案. 首先,tail指针右移时很好处理,因为tail指针右移对区间最大值的影响之可能作用 ...
- stm32中的串口通信你了解多少
在基础实验成功的基础上,对串口的调试方法进行实践.硬件代码顺利完成之后,对日后调试需要用到的printf重定义进行调试,固定在自己的库函数中. b) 初始化函数定义: void USART_Confi ...
- 洛谷 P4587 [FJOI2016]神秘数
大鸽子 llmmkk 正在补8.3号咕掉的题 时隔两个月,再看到这道题,我又是一脸懵,这种思维的培养太重要了 链接: P4587 题意: 给出 \(n\) 个点的序列,\(m\) 次询问区间神秘数. ...
- 写一段java程序来执行linux命令
摘要 在日常开发中,程序员需要经常查询服务器日志来排查问题和调试程序.如果是本地调试还好,但项目一旦发布到服务器上,每次查日志就很麻烦,而且日志量巨大,有时我们无法找到我们需要的信息.经常需要借助第三 ...
- hdu 2147 kiki's game(DP(SG)打表找规律)
题意: n*m的棋盘,一枚硬币右上角,每人每次可将硬币移向三个方向之一(一格单位):左边,下边,左下边. 无法移动硬币的人负. 给出n和m,问,先手胜还是后手胜. 数据范围: n, m (0<n ...
- hdu 5055 Bob and math problem (很简单贪心)
给N个数字(0-9),让你组成一个数. 要求:1.这个数是奇数 2.这个数没有前导0 问这个数最大是多少. 思路&解法: N个数字从大到小排序,将最小的奇数与最后一位交换,把剩下前N-1位从大 ...