类与类之间的关系学习总结


类与类之间的关系,本身对于实现业务开发没有太大的用处。绝大部分码农干到退休也不用了解。

主要用于解析源码结构,梳理设计意图。

概览


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

示例


  • 学习
    <<interface>>,表示学习是一个接口;

  • <<abstract>>,表示人是一个抽象类;

继承关系(inherit)


  • 继承关系为 is-a的关系;
  • 两个对象之间如果可以用 is-a 来表示,就是继承关系;
    eg: 程序员是人

表现:用于Interface和Interface之间,或者用于Class和Class之间

实现关系(Realitization)


  • 类实现接口中定义的方法;

表现: 用于Interface和Class之间

关联(association)


指的是模型元素之间的一种语义联系,是类之间的一种很弱的联系。
依赖、关联、聚合、组合都是关联。依赖是最弱的关联,其次是普通关联,接下来是聚合,组合是最强的关联。
关联强度: 组合 > 聚合 > 关联 > 依赖

聚合


  • 整体和个体之间的关系。是has-a的关系
  • 整体和部分可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享
    表现: 如果A由B聚合成,表现为A包含有B的全局对象,但是B对象可以不在A创建的时刻创建。

    class A{
    private B b;
    public A(B b){
        this.b = b;
    }
    }

组合


  • 一种contains-a的关系
  • 部分不能脱离整体而存在,整体的生命周期结束也就意味着部分的生命周期结束
    表现:如果A由B组成,表现为A包含有B的全局对象,并且B对象在A创建的时刻创建。
    ```
    class A{
    private B b;
    public A(){
    this.b = new B();
    }
    }
    依赖(Dependency)
    ---------------
    ----
  • 从字面理解的话,是说一个类用到了另一个类。
  • 这种使用关系是具有偶然性的、临时性的、非常弱的。
    表现:如果A依赖于B,则B体现为局部变量方法的参数、或静态方法的调用。
    class A{
    private B b;
    public setB(B b){
    this.b = b;
    }
    }
    在开发过程中,大量的用到了依赖关系。

猜你喜欢

转载自www.cnblogs.com/snifferhu/p/9148020.html