UML关系详解(泛化、实现、依赖、关联、组合、聚合)

现在学到了设计模式,发现UML的很多关系又用到了。设计模式书上很多代码前面都会有代码结构图,如果代码结构图都看不懂,即使代码明白了也没什么卵用。于是又回顾了一遍UML知识。温故而知新,写下这篇博客。

UML九种图

UML中几种关系

关联关系:表示两个类或者类与接口之间语义级别的一种强依赖关系,它使一个类知道另一个类的属性和方法。关系不是临时性的,一般是长期性的。

单向关联:A——>B,A关联B,A知道B的属性和方法

举例:A为企鹅,B为气候,企鹅需要了解气候的规律,但是气候不用知道企鹅任何东西。

双向关联:双方都知道对方的存在,都可以调用对方的公共属性和方法

举例:一个人只能有一个身份证,一个身份证也只能代表一个人

聚合:聚合是关联关系的一种特例,体现的是整体与个体的关系,整体与个体可分离,并都可以有各自的生命周期,一种弱拥有关系——has-a关系

举例:大雁和雁群,每只大雁都属于一个雁群,一个雁群可以有多个大雁。

组合:也是关联的一种特例,体现了严格的整体与部分的关系,部分和整体的生命周期都一样,一种强拥有关系——contains-a关系

举例:鸟和翅膀就是组合关系,翅膀是部分,鸟是整体,翅膀不能脱离整体单独存在,鸟的生命周期结束意味着翅膀的生命周期也结束。

依赖:简单的理解,一个类用到了另一个类,而这种关系具有偶然性、临时性、非常弱的

举例:人要过河,需要借用一条船,人依赖于船才能完成过河

泛化:指的是一个类继承另一个类的功能,并可以增加自己的新功能的能力

举例:鸟和大雁,大雁是鸟的一种,鸟会飞,大雁也会飞,大雁就是鸟的子类

实现:一个类实现接口的功能,可以理解为将一个特殊的属性或者方法添加到一个类上

举例:唐老鸭会说话,由于唐老鸭继承了鸭子的属性,但一般鸭子本来不会说话,这就需要在唐老鸭类中增添一个会说话的接口

当我写完这几个关系详解之后,我自己看了一遍,发现单向关联的定义和依赖的定义,有易混淆的地方,我想到了书上的例子,

试问大家,动物和氧气是什么关系?

动物知道有氧气存在,但是氧气不需要知道动物。这不也是关联吗?

这是错误的。

关联和泛化的区别

关联是一种结构关系,表现为一个对象能够获得另一个对象的实例引用并调用它的服务(即使用它)。

依赖是一种使用关系,表现为一个对象仅仅是调用了另一个对象的服务

同样举上面的例子,企鹅需要知道气候的具体属性和方法,是下雪还是晴天,才会做出相应的行为。

但是人过河,就不用知道这么多了,不管是大船、小船、巨轮还是渔船,只要是船就能过河。只知道外部是船就行了,不需要知道内部属性方法。

 

这时候你再看上面图中的关系强弱比较是不是就感觉简单多了

发布了62 篇原创文章 · 获赞 39 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/liangjiabao5555/article/details/86063040