java 类图关系_UML类图关系对应代码

UML图简介:

0818b9ca8b590ca3270a3433284dd417.png

UML图中五种关系的强弱关系:依赖

一依赖关系

(一)·类图:(这些图都是EA画的,方便类图源码的生成)

0818b9ca8b590ca3270a3433284dd417.png

(PS:fish类依赖于water类)(鱼依赖于水)

(二)生成源代码

0818b9ca8b590ca3270a3433284dd417.png

通过代码,我们可以看到:两个类之间并没有任何的引用关系,这也就解释了为什么依赖是UML关系中最弱的一种。

(三)思考:

虽然依赖关系很弱,可是毕竟是一种关系,那在代码中是如何体现的?

1.  Water类是全局的,则fish类可以调用它。

2.  water类是fish类的某个方法中的变量,则fish类中该方法可以调用它。

public class fish

{

public fish() { }

public void Drink() {

water a = new water();

Console.WriteLine("我要喝实例水" );

Console.Read();

}

}

3.  water类做为fish类中的方法的参数或返回值。

public class fish

{

public void Eat( water b) {

Console.WriteLine("我要吃参数水");

Console.Read();

}

public water Play() {

water a = new water();

return a;

}

}

注意:在表现形式b和表现形式c的情况下,做为方法的变量,参数,或返回值时,其water类的生命周期随着方法的执行结束而结束。

二关联关系:

关联关系表示类之间的耦合度比依赖强。具体体现在类图生成源码中,关联关系的源类会增加目标类的属性。其包括四种:单向关联,双向关联,聚合,组合。下面分别说一下这四种关联形式在代码中的具体体现。

(一)单向关联:

1·类图:

0818b9ca8b590ca3270a3433284dd417.png

(PS:English类单项关联与Reading类)(英语和阅读能力关联)

2 ·源代码:

0818b9ca8b590ca3270a3433284dd417.png

注意:从生成的源代码中我们可以看到:在源类(English类),存在着目标类Reading类的属性。

以上关系只是关联关系的一种,叫做——单向关联,特点是:源类知道目标类的属性和方法。但目标类并不知道源类的属性和方法。上边这个例子说道:想要知道英语的水平,它必须知道阅读能力的数据。

(二)双向关联:

区别于单项关联,一目了然,双向关联就是彼此知道彼此的属性和方法,在自己的类中都会有对方类的属性声明。

思考:依赖关系和关联关系的区别?

1·从是否生成类的属性来看:

依赖关系中,源类中并没有生成目标类的属性,而在关联关系中,源类中自动生成目标类的属性,而属性又是一种更为紧密的耦合,更为长久的持有关系。所以关联关系>依赖关系。

2从生命周期的角度来看:

依赖关系中,是仅当类的方法被调用时产生,伴随着方法的结束而结束。

关联关系中,是当类被实例化时产生,当类销毁时关联关系随之结束,相比于依赖关系,关联关系生命周期更长。

(三)聚合:

类图:

0818b9ca8b590ca3270a3433284dd417.png

(ps:woods类和tree类聚合关系)(森林和树是聚合关系)

源代码:

0818b9ca8b590ca3270a3433284dd417.png

注意:空心菱形表示tree对象并不随着woods对象的创建而创建,销毁而销毁。

(四)组合:

类图:

0818b9ca8b590ca3270a3433284dd417.png

(ps:bird类和wing类强烈的聚合关系)(鸟与翅膀)

源代码:

0818b9ca8b590ca3270a3433284dd417.png

注意:wing类是bird类的组成部分。实心菱形表示wing对象随着bird对象的创建而创建,销毁而销毁。

思考:聚合和组合之间的关系:

(1)生命周期不一样:聚合关系中,tree类的生命周期并不随着woods类的变化,相对于组合较弱。组合关系中,wing类的生命周期随着bird类的销毁而销毁。

(2)构造函数不一样:聚合类的构造函数中包含另一个类做为参数。即森林类(woods)的构造函数要用到树类(tree)做为参数,但tree类可以脱离森林类独立存在。组合类的构造函数中包含了另一个类的实例化,即鸟类(bird)的构造函数初始化时,先实例化翅膀类(wing),即共生存,同灭亡。

三泛化关系:

(一)类图:

0818b9ca8b590ca3270a3433284dd417.png

(ps:pig类继承Animal类)(猪继承动物)

(二)源代码:

0818b9ca8b590ca3270a3433284dd417.png

(三)思考:泛化和继承什么关系?

泛化和继承是从不同角度来说的。子类继承父类,父类泛化子类。

四 实现关系:

(一)类图:

0818b9ca8b590ca3270a3433284dd417.png

(ps:person类实现Eat接口)(人实现吃接口)

(二)源代码:

0818b9ca8b590ca3270a3433284dd417.png

(三)思考:

可以看到子类实现父类,和类实现接口在代码中表现形式一样,那接口和父类什么关系?接口和抽象类是什么关系?参考博客《抽象类和接口的区别》

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值