Java 对象间关系以及 UML 类图表示方法

UML 类图可以更好的帮助我们理解源码组织结构,在 浅析 UML 类图关系 中我们大致描述 UML 类图中常见的 Java 对象间关系,在这里具体化每种关系的具体场景。

一、依赖关系

1、概念

  • 概念: 依赖关系描述了一种,类与类之间 一种 使用 与 被使用 的关系

  • 具体表现: 依赖关系在 Java 中的具体代码表现形式为:

    • B 为 A 的构造器或方法中的局部变量
    • B 为 A方法或构造器的参数
    • B 为 A方法的返回值
    • A 调用 B 的静态方法

    简单来说,就是 A 类中, 出现了 B 类

2、UML 图表示

UML 类图:通过 虚线依赖类 指向 被依赖类
UML 类图

3、具体场景代码

依据 UML 类图关系,我们可以实现如下场景代码:

public class Pen{
	public void write(){
	  System.out.println("write");
	}
	
	public static void fun1(){
	  System.out.println("static");
	}
}
public class People{
	private Pen mPen;
	//构造器方法参数
	public People(Pen mPen){
	  this.mPen = mPen;
	  mPen.write();
	}
	//方法的参数
	public void fun1(Pen mPen){
	  mPen.write();
	}
	//构造器的局部参数
	public People(){
	  Pen mPen = new Pen();
	  mPen.write();
	}
	//方法的局部参数
	public void fun1(){
	  Pen mPen = new Pen();
	  mPen.write();
	}
	//方法的返回值
	public Pen fun3(){
	  return mPen;
	}
	//调用静态方法
	public void fun4(){
	  Pen.fun1();
	}	
}

二、关联关系

1、概念

关联(Association)关系是类与类之间的联接,它使一个类知道另一个类的属性和方法,也就是说给你两个具有关联关系的类,你可以从一个类的对象得到另外一个类的对象。关联可以是双向的,也可以是单向的。

在 Java 语言中,关联关系一般使用 成员变量 来实现

2、UML 图表示

UML 类图表示方法: 通过实线由关联类指向被关联类
UML 类图

3、具体场景代码

a、单向关联
public class People{
	private Pen mPen;
	public People(Pen mPen){
      this.mPen = mPen;
	}
	public void fun1(){
	  Log.e("People",mPen.getColor());
	}
	public void fun2(){
	  mPen.write();
	}
}

public class Pen{
	private String mColor;
	public void setColor(String mColor){
	  this.mColor = mColor;
	}
	
	public void getColor(){
	  return mColor;
	}
	public void write(){
	  Log.e("TAG","I can write")
	}
}
b、双向关联
 public class Peole{
   private Pen mPen;
   ....
 }
public class Pen{
  private People mPeople;
  .....
}
c、自关联
public class People{
  private People mPeople;
  ....
}

注意: 依赖和关联的区别: 依赖是使用关联是拥有

三、聚合关系

###1、概念

  • 关联关系的一种,是一种强关联关系(has-a)
  • 聚合关系是 整体部分 之间的关系
  • 关联关系的两个类处于同一个层次上,而聚合关系的两个类处于不同的层次上,一个是整体,一个是个体/部分;
  • 在聚合关系中,代表个体/部分的对象有可能会被多个代表整体的对象所共享;

2、UML 类图表示

UML 类图表示方法::实心菱形 + 实线 + 箭头;箭头指向代表个体/部分的对象,也就是被合成/组合的类的对象;
UML 类图

3、具体场景代码


public class Group{
 private Student mStudent;
 ....
}

public class Student{
 ....
}

四、组合关系

1、概念

  • 关联关系的一种,但是这种关系比聚合关系更强 (contains-a)
  • 组合关系不能共享
  • 在组合关系中,如果代表整体的对象被销毁或破坏,那么代表个体/部分的对象也一定会被销毁或破坏,而聚在合关系中,代表个体/部分的对象则有可能被多个代表整体的对象所共享,而不一定会随着某个代表整体的对象被销毁或破坏而被销毁或破坏;
  • 具体体现:在Java 中,组合关系是通过成员变量来实现的

2、 UML 类图

UML 类图表示方法:实心菱形 + 实线 + 箭头,箭头指向代表个体/部分的对象
UML 类图

3、具体场景代码

public class Bird{
  private Leg mLeg;
  public Bird(){
    mLeg = new Leg();
  }
}
public class Leg{
 
}

聚合和组合的区别:

  • 聚合是个体离开了整体,依然可以存在。
  • 组合是个体和整体不可以分开,个体不能离开整体单独存在。

依赖,关联 和聚合,组合的区别:

  • 依赖,关联 : 类之间的关系是在同一层次上。
  • *聚合,组合: 类之间的关系表现为整体和部分.

Java 中 组合和继承的区别,在这里就不具体表名了,参看下文链接 – 深入理解Java中的组合和继承

参考资料

Java 的组合关系
深入理解 Java 中的组合和继承
Java 对象间的关系(依赖,关联,组合,聚合)

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值