UML类图中的各种关系

泛化

简单说明&从代码角度讲

父类与子类间的继承关系.

泛化

实现

简单说明&从代码角度讲

借口于类之间的联系.

接口

组合

简单说明

同样为整体与部分的关系,但部分不可脱离整体单独存在

从代码角度讲

  1. 部分类的对象只会在整理类中被new出.
  2. 当整体类无对象存在时,部分类一定不会存在

整体:大雁(Goose) 部分:翅膀(Wings)

public class Goose
{
    public Wings wings;
    public Goose()
    {
        wings=new Wings();
    }
}

组合

聚合

简单说明

整体与部分的关系,部分可以脱离与整体单独存在.

从代码角度讲

  1. 部分在整体外部new出对象,在传入整体作为整体的一部分进行工作.
  2. 可能会有整体类不存在,但部分类却有其对象存在.

整体:大雁群(GooseGroup) 部分:大雁(Goose)

 public  class GooseGroup
{
    public Goose goose;
    public GooseGroup(Goose goose)
    {
        this.goose = goose;
    }
}

聚合

关联

简单说明

  1. 一个类知道另一个类的存在,并且可以调用另一个类的公共属性和方法,并没有生命周期上的关系.
  2. 关联可为但相关联和双向关联.(例如学生和每人每科的成绩为单向关联,老师和学生为双向关联)

从代码角度讲

在一个类中会用到另一个类作为变量存在

关联

依赖

简单说明

一个类使用另一个类中的一些方法才能完成自身功能,一个类需要另一个类协助,说明这个类依赖于另一个类

从代码角度讲

  1. 一个类恰好(偶然)用到了另一个类中的某个或某些方法,只是恰好某个功能需要用到另一个类的方法作为某一步过程.
  2. 依赖为所有关系中最松散的!

依赖

各关联的耦合程度排序

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

参考

  1. http://www.uml.org.cn/oobject/201210081.asp
  2. http://www.uml.org.cn/oobject/201409232.asp
  3. http://www.uml.org.cn/oobject/201610282.asp
  4. https://www.ibm.com/developerworks/cn/rational/rationaledge/content/feb05/bell/index.html

ps

1. 聚合和单向关联的区别

聚合是拥有主从关系的,而关联的各类是平等的.

2. 最后

  1. 我也只是仔细看了几篇文章后写的这篇给自己理头绪的总结,有一些是自己的理解,用自己的话讲出来,不一定正确…
  2. 有的关系的区分看来有点模糊,但从耦合程度方面仔细想想就能有一些体会.
  3. 有哪些问题的话希望能哈大家一起讨论,或者我犯了哪些错误请指正,谢谢.