五种关系:
一般化关系、关联关系、聚合关系、合成关系、依赖关系。
一般化关系(Generalization)
表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。
关联关系(Association)
是类与类之间的联接,它使一个类知道另一个类的属性和方法。可以单向和双向。
聚合关系(Aggregation)
关联关系的一种,是强关联关系。表示整体和个体之间的关系。
合成关系(Composition)
关联关系的一种。比聚合关系更强。要求整体对象负责部分对象的生命周期。
依赖关系(Dependency)
类与类之间的联接,单向。表示一个类依赖于另一个类的定义。
关系图
为什么化这样是一个图呢,因为我觉得,这五种关系是升级的关系。
也及是说:如果是聚会关系了,一定已经包含链接关系了,如果已经是链接关系了,那么不可能没有依赖关系
定义关系 | 调用关系 | 后于自己创建 | 生命周期相同 | 先于自己创建 | |
依赖关系 | A(B b) | ||||
链接关系 | A(B b) | A{ b.fun()} | |||
聚会关系 | A(B b) | A{ b.fun()} | A{ B mb=null } | ||
合成关系 | A(B b) | A{ b.fun()} | A{ B mb=null } | A{ B mb=new B() } | |
继承关系 | A(B b) b=super | A{ b.fun()} b = super | A{ B mb=null } b = super | A{ B mb=new B() } b = super | super(B).fun() b = super |
上面这表是从升级的角度对5种关系做了一下分析。
我不多说的,应该很容易理解。
但是在分析这个的过程中我 有发现了一个问题
A对B依赖的升级和生命周期的关系
定义关系:A先于B
调用关系:A先于B
聚合关系:A先于B
组合关系:A==B
继承关系:B先于A
有A对于B升级的依赖我们发现,关系越高越靠得住。
这也说明了,为什么设计时候几乎不用刻意的消除“聚会关系”关系以上的关系呢。
其实就从人与人之间的关系考虑,也是的,关系密切到一定的程度,关系反而简单了。
就这里聚合以上的关系我这里把他暂时定义为亲人的关系。
在亲人这个关系内处理问题是相对简单的,多密切都不会增加复杂度。
而链接和依赖这不同,因为可靠性降低了,所以导致了很多不确定性。
就社会而言,整个社会的复杂度增加也是在这个层面上。
那么这里我想,是不是觉得事情是否复杂的不是耦合度,而是可靠性?
这里暂时一想:我还没有深入的考虑这个问题。
关于关联和依赖的区分
概念来源:https://blog.csdn.net/youngxv/article/details/79474408
关联关系(Association)
是类与类之间的联接,它使一个类知道另一个类的属性和方法。可以单向和双向。
依赖关系(Dependency)
类与类之间的联接,单向。表示一个类依赖于另一个类的定义。
Java实现:局域变量、方法形参、静态调用
关联关系 (Association) | 定义 | 是类与类之间的联接,它使一个类知道另一个类的属性和方法。可以单向和双向。 |
举例 | A 关联 B 例子1(这有点像是聚会,但是关系若那么一点,只能从需求的层面去区分了) class A{ B mB; fun(){ mB.fun(); } } 例子2(这点是为了和依赖做区分) class A{ fun(B b){ b.fun(); } } | |
依赖关系(Dependency) | 定义 | 类与类之间的联接,单向。表示一个类依赖于另一个类的定义。 |
通常 | 局域变量、方法形参、静态调用 | |
举例 | A 依赖于B class A{ C mC; fun(B b){ mC.fun(b); } } | |
概念来源:https://www.jianshu.com/p/b5a0020fe0f4
依赖关系(dependency)
依赖就是一个类A使用到了另一个类B,所以,有些英文的材料中将这种关系表述为引用(using)。这种关系具有偶然性、临时性,也非常弱,但是,类B的变化会影响到类A。代码中,一般表现为,类A中的某个成员函数用到了某个类B类型的参数,或者类A中的某个成员函数,用到了类B类型的某个临时变量,等等。
在UML中,依赖关系用带箭头的虚线表示,箭头从使用类指向被依赖的类。
关联关系(Association)
关联体现的是两个类之间语义级别的一种强依赖关系,是一种对象之间的引用关系,比如商品类和订单类。这种关系比依赖关系要密切很多,不偶然,也不临时。一般地,程序实现中,类A中的某个属性的类型是类B,我们称类A和类B的关系是关联关系,其中类A称为关联类,类B称为被关联类。关联可以是单向、双向的。
在UML中,关联关系用由关联类A指向被关联类B的带箭头实线表示,在关联的两端可以标注关联双方的多重性标记。如下: