UML类图的几种关系

2017-08-02  本文已影响18人  程序员修仙

类图是描述类与类之间关系的示意图,它形象的描述了系统的结构,有助于与更深刻的理解软件的设计思想。
类图中类的关系由强到弱可以分为4种:泛化 ---> 实现 ---> 关联 ---> 依赖。

1. 泛化

关系说明:泛化是一种继承。它指定了子类如何特化父类的所有特征和行为。
代码说明:父类与子类
图例:空心三角形的实线箭头,箭头指向父类
代码:

public class Base{
}
public class BaseExt extends Base{
}

2. 实现

关系说明:实现是一种类与接口的关系,表示类是接口所有特征和行为的实现。
代码说明:实现类和接口
图例:空心三角形虚线箭头,箭头指向接口
代码:

public interface IBase{
    public void doSomething();
}

public class BaseImp implements IBase{
    @Override
    public void doSomething(){
       System.out.println("doSomething!");
    }
}

3. 关联

关系说明:关联表示类与类之间的拥有关系。即一个类是另一个类的成员。
关联的种类:自关联、单向关联、双向关联、多重关联、聚合、组合等

3.1 自关联

关系说明:一个类包含自己。
代码说明:成员变量
图例:普通实线箭头指向自己
代码:

 public class Node {
     private Node node;
}

3.2 单向关联

关系说明:一个类包含另一个类的成员,另一个类没有该类的成员
代码说明:成员变量
图例:普通实线箭头指向被关联的类
代码:

public class NodeA{
}
public class NodeB{
   private NodeA nodeA;
}

3.3 双向关联

关系说明: 两个类互相包含另一个类的成员。(容易循环引用,造成内存泄漏)
代码说明:成员变量
图例:普通实线,不带箭头
代码:

public class NodeA{
    private NodeB nodeB;
}

public class NodeB{
    private NodeA nodeA;
}

3.4 多重关联

关系说明:一个类中包含另一个类的多个成员。
代码说明:成员变量
图例:带数量关系说明的实线,不带箭头。
代码:

public class NodeA{
}
public class NodeB{
    private NodeA[] nodeAs;
}

3.5 聚合

关系说明:聚合是整体与部分的关系,成员对象是整个对象的一部分,成员对象的可以独立存在。如:轮胎和汽车关系
代码说明:成员变量
图例:带空心菱形的实线箭头,菱形指向整体,箭头指向部分。
代码:

public class Car{
    public Tire tire;
}
public class Tire{
}

3.6 组合

关系说明:组合是整体与部分的关系,成员对象是整体的一部分,整体对象控制着成员对象的生命周期,一旦整体不存在,成员对象也不存在。如:人的身体和手
代码说明:成员变量
图例:带实心菱形的实线箭头,菱形指向整体,箭头指向部分
代码:

public class Body{
    private Hand hand;
}
public class Hand{
}

4. 依赖

关系说明:依赖表示类与类之间的使用关系。表示一个事物使用另一个事物。
代码说明:局部变量、方法的参数或者对静态方法、成员的调用
图例:带箭头的虚线,指向被使用者
代码:

public class Boat{
}
public class People{  
    public int acrossRiver(Boat boat){
          .........
    }
}

5. 总结

对类图关系的理解,可以帮助更好的理解设计模式的精髓。后面笔者将逐步介绍几种常见的设计模式。

上一篇下一篇

猜你喜欢

热点阅读