类与类之间的关系

类与类之间的关系

1. 依赖关系(Dependency)

如果在一个A类中用到了另一个B类,那么就说A类依赖B类。类图表示如下:

img

只要B类满足下面条件中的任意一个,就说A类依赖B类:

  1. A类中用到了B类
  2. A类中有B类型的成员变量
  3. B类是A类方法的返回类型
  4. B类是A类方法的参数类型
  5. A类的方法中用到了B类

2. 泛化关系(generalization)

泛化关系可以说是继承关系,是依赖关系的特例。

用类图表示:

在这里插入图片描述

3. 实现关系(Implementation)

B类实现了A接口,就说A接口和B类之间有实现关系,实现关系是依赖关系的特例。

用类图表示:

在这里插入图片描述

4. 关联关系(Association)

关联关系表示的是类与类之间的联系,例如:

在这里插入图片描述

在上面的代码中,我们说Person和IdCard是双向一对一的关系。

  1. 聚合关系(Aggregation)
    聚合关系表示的是整体和部分的关系,整体和部分是可以分开的,它是关联关系的特例。可以将聚合关系比喻为班级这样一个概念,班级由学生组成,学生可以和班级分开,离开了班级依然能够独立存在。

    复制代码
    class Computer {
        //Computer和Monitor、Mouse是可以分离的
        private Monitor monitor;
        private Mouse mouse;
    
        public Computer(Monitor monitor, Mouse mouse) {
            this.monitor = monitor;
            this.mouse = mouse;
        }
    
    }
    
    class Monitor {
        
    
    }
    
    class Mouse {
    
    }
    
    

    上面的例子中,创建一个 Computer 示例需要传入一个 Monitor 实例以及一个 Mouse 实例,至于 Monitor 和 Mouse 实例在什么地方创建,什么时候创建的,和 Computer 没有关系,Computer 和 Monitor、Mouse 没有共同的生命周期。Computer 实例被销毁,Monitor 和 Mouse 实例也有可能没有销毁,因为他们是外界传入的。

    用类图表示:

在这里插入图片描述

6. 组合关系(Composite)

和聚合关系类似,组合关系关系也是用来描述整体和部分的关系,但是,它规定了部分和整体是不能分开的。可以将组合关系比喻成人和大脑、心脏的关系,在人出生的时候,必须有健康的大脑和心脏,人和大脑、心脏是患难与共的,人没了,大脑也没了。

复制代码
class Computer {
    //Computer这个整体和Monitor、Mouse这两个部分是不能分离的
    private Monitor monitor = new Monitor();
    private Mouse mouse = new Mouse();
	
	public Computer(){
		monitor = new Monitor();
		mouse = new Mouse();
	} 
}

class Monitor {
    

}

class Mouse {

}

在上面的例子中,创建 Computer 实例时,就创建了 Monitor、Mouse 实例,Computer 实例和 Monitor、Mouse 实例就连为一体了,Computer 实例被销毁了,Monitor、Mouse 实例也就没了。

用类图描述:

在这里插入图片描述

7. 总结

实现关系和泛化关系很好理解,对应于java中的实现和继承。而依赖、关联、聚合、组合这四种关系都是语义级别的,所以从代码层面并不能完全区分各种关系,但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖。

posted @   nadooo  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示