C#面向对象基础,讲解UML的关系划分,如何表示关系

UML的关系分类,这个必须记住,记不住也要想办法,总之,作为面向对象的基础之一,这个一定要背下来。

你要记到什么程度?给你任何一张UML图,你都必须立即在脑海中知道它的代码结构。

 

一、总述

UML的关系分类一共有这么几种:

实现(Realization):它用于某类实现接口时表示。

泛化(Generalization):也就是常说的继承,用于某类继承于某类时表示。

关联(Association):它用于某个对象中有引用了另外一个对象时表示。比如A类,引用了B类这个对象。即为关联。关联如何要细分的话,还有个单向关联(Directed Association),其实通常我们的关联用法,大多数时候都是单向的。

依赖(Dependency):某方法的参数中,使用了另外一个对象,我们称之为依赖。比如构造函数声明需要传入一个A类的对象,则表示依赖了A。如何理解关联和依赖的差别?关联是指没有它,我照样可以运行。但依赖是更强的,没有了它,我就无法运行。

聚合(Aggregation):指一件东西由什么组成。比如人要穿衣服展示自己的形象,那么一套形象由什么组成呢?由帽子、上衣、下裤、皮带、鞋子等组成一套衣服,穿出自己的风格形象。掌握聚合的关键点在于,它的组合部分是可以拆分的,比如上衣我可以拆出来,它剩下的部分,我仍然可以穿出形象,只不过可能过于时尚了些。

组合(Composition):指一件东西由什么组成。是不是跟聚合的表述很象?确实,我当初学的时候,一直分不清聚合和组合之间的差异。而且很多文章的作者,在讲解聚合组合的时候,一笔带过,估计作者自己也没有搞太清楚。我在这里可以很清晰告诉大家,组合是指生命组合(不是真实生命,比如汽车拆了4个轮子就不是汽车了)。举个例子,人是由什么组成的呢?由头、手、脚、躯等组成,你不能像聚合一样,把上衣拆出来后它还是可以穿出形象。但如果你把某个人的头给拆下来了,那么这个人就挂了,就不再是个活人了。所以,组合是无法拆分的。这就是组合和聚合的根本区别。

二、实现(Realization)

上图是实现的UML表达方式,虚线+空心箭头。它用于绘制某类实现了某接口的时候使用。

举个例子,下图中的PathDesignWork类,就实现了IDisposable这个接口。

三、泛化(Generalization)

上图是继承的UML表达方式,直线+空心箭头。它用于某类继承了另外一个类的时候使用。

举个例子,下图中的PathDesignWork类,继承了WorkBase这个类。

四、关联(Association)

上图是关联的UML表达方式,直线+箭头。用于表述某对象引用了另外一个对象。它在代码的写法中通常是属性的形式。

举个例子,看下图,比如类PathDesignWork,它就关联了红圈处的XYZ、ElementId、IElevationTemplate、IBeamTemplate等类对象。

理解关联和依赖的区别在于:关联,我不传关联的参数,我这个类还是可以运行的。

五、依赖(Dependency)

上图是依赖的UML表达方式,虚线+箭头。用于表述某个方法的参数,使用到了另外一个对象。

如下图,方法CreateElevation()依赖了XYZ这个对象。

理解关联和依赖的区别在于:依赖,我不传依赖的参数,我这个方法是无法运行的。

六、聚合(Aggregation)

上图是聚合的UML表达方式,实线+空心菱形。用于表示可以拆分的组合。

如下图,横梁模板BeamTemplate类的节点,是由很多个不同的节点组成的。可以任意添加这些节点。

七、组合(Composition)

上图是组合的UML表达方式,虚线+实心菱形。用于表示不可以拆分的组合。

组合的例子我就没有现成的,以动物为例,是非常好的例子,动物由4脚组成,缺任何一个都不行。代码的表现形成仍然是IList等集合,代码就由您发挥了。

 

祝您用餐愉快。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值