UMLandroid技术专栏Java学习笔记

UML学习之 依赖、关联、聚合、组合的联系与区别

2017-04-05  本文已影响423人  千山万水迷了鹿

说点废话:大学学习UML的时候一点都不用心,感觉不如学个JSP能直接写个网站出来,就把该学UML的时间用在了学做网站上,不过当时UML确实没用=_=。现在接触的东西越来越多,如果分析一些大的开源框架,即使不用画特别复杂的图的话,也要画出基本的类的继承关系和依赖关系吧。现在必须学习一下了0.0

说到UML,像我这样的业余画UML图的人,大多数时候在看源码库时喜欢用手画,对于工具也喜欢简洁的UML工具。这里推荐两个在线的画UML图的工具,当然这两款工具不仅仅只能画UML。

前者是国外开发的,后者是国内的,相对来说我喜欢前者,但是有时候网速不好=_=,前者操作舒服并且画出的图也好看些,具体看自己选择,还有很多可以用的客户端工具就不介绍了。

类之间可描述的关系大概有下面几种:继承、实现、依赖、关联、聚合、组合关系的总览图如下:

分类.png

继承(也叫泛化generalization)

用于Interface和Interface之间,或者用于Class和Class之间,如下图:

接口继承接口_类继承类.png

图中用java中常见的List集合的继承关系做为例子,List(子接口)接口继承自Collection接口(父接口),而ArrayList类(子类)继承自AbstractList(父类)这个抽象类。java 用extends关键字

实现(Realization)

指的是一个class类实现interface接口(可以是多个)的功能;在Java中此类关系通过关键字implements明确标识,如下图:


类实现接口.png

依赖(Dependency)

从字面理解的话,是说一个类用到了另一个类。这种使用关系是具有偶然性的、临时性的、非常弱的。比如下图中的依赖关系,司机开车,要依赖车。在代码上表现的话一般为函数参数,或者局部变量或者对静态方法的调用。如下图的UML类图中Driver 对Car的依赖就是通过函数参数的方式。注意依赖关系只能是单向的,并且依赖关系强调的是**使用上的关系 **。

依赖关系.png

关联(association)

顾客和地址的关联关系.png

重数性关联: 重数性关联关系又称为多重性关联关系(Multiplicity),表示一个类的对象与另一个类的对象连接的个数。在UML中多重性关系可以直接在关联直线上增加一个数字表示与之对应的另一个类的对象的个数。

重数关联.png

聚合(aggregation)

汽车和引擎聚合关系图.png
//汽车和引擎是一种聚合关系,java代码表现形式如下
public class Car {
   private Engine engine;

   public Car(Engine engine) {
       this.engine = engine;
   }
   public void setEngine(Engine engine) {
       this.engine = engine;
   }
   ……
}
public class Engine {
   ……
}

组合(composition)

组合关系图.png
//人和嘴是一种组合关系
public class Person {
   private Mouth mouth;
   public Person() {
       mouth = new Mouth();
   }
   ……
}
public class Mouth {
   ……
}

【参考文章】

上一篇 下一篇

猜你喜欢

热点阅读