面向对象五关系深入分析

五种关系:
一般化关系、关联关系、聚合关系、合成关系、依赖关系。

一般化关系(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的带箭头实线表示,在关联的两端可以标注关联双方的多重性标记。如下:

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值