UML关系详解(泛化实现依赖关联组合聚合)
Posted lllllLiangjia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UML关系详解(泛化实现依赖关联组合聚合)相关的知识,希望对你有一定的参考价值。
现在学到了设计模式,发现UML的很多关系又用到了。设计模式书上很多代码前面都会有代码结构图,如果代码结构图都看不懂,即使代码明白了也没什么卵用。于是又回顾了一遍UML知识。温故而知新,写下这篇博客。
UML九种图
UML中几种关系
关联关系:表示两个类或者类与接口之间语义级别的一种强依赖关系,它使一个类知道另一个类的属性和方法。关系不是临时性的,一般是长期性的。
单向关联:A——>B,A关联B,A知道B的属性和方法
举例:A为企鹅,B为气候,企鹅需要了解气候的规律,但是气候不用知道企鹅任何东西。
双向关联:双方都知道对方的存在,都可以调用对方的公共属性和方法
举例:一个人只能有一个身份证,一个身份证也只能代表一个人
聚合:聚合是关联关系的一种特例,体现的是整体与个体的关系,整体与个体可分离,并都可以有各自的生命周期,一种弱拥有关系——has-a关系
举例:大雁和雁群,每只大雁都属于一个雁群,一个雁群可以有多个大雁。
组合:也是关联的一种特例,体现了严格的整体与部分的关系,部分和整体的生命周期都一样,一种强拥有关系——contains-a关系
举例:鸟和翅膀就是组合关系,翅膀是部分,鸟是整体,翅膀不能脱离整体单独存在,鸟的生命周期结束意味着翅膀的生命周期也结束。
依赖:简单的理解,一个类用到了另一个类,而这种关系具有偶然性、临时性、非常弱的
举例:人要过河,需要借用一条船,人依赖于船才能完成过河
泛化:指的是一个类继承另一个类的功能,并可以增加自己的新功能的能力
举例:鸟和大雁,大雁是鸟的一种,鸟会飞,大雁也会飞,大雁就是鸟的子类
实现:一个类实现接口的功能,可以理解为将一个特殊的属性或者方法添加到一个类上
举例:唐老鸭会说话,由于唐老鸭继承了鸭子的属性,但一般鸭子本来不会说话,这就需要在唐老鸭类中增添一个会说话的接口
当我写完这几个关系详解之后,我自己看了一遍,发现单向关联的定义和依赖的定义,有易混淆的地方,我想到了书上的例子,
试问大家,动物和氧气是什么关系?
动物知道有氧气存在,但是氧气不需要知道动物。这不也是关联吗?
这是错误的。
关联和泛化的区别
关联是一种结构关系,表现为一个对象能够获得另一个对象的实例引用并调用它的服务(即使用它)。
依赖是一种使用关系,表现为一个对象仅仅是调用了另一个对象的服务
同样举上面的例子,企鹅需要知道气候的具体属性和方法,是下雪还是晴天,才会做出相应的行为。
但是人过河,就不用知道这么多了,不管是大船、小船、巨轮还是渔船,只要是船就能过河。只知道外部是船就行了,不需要知道内部属性方法。
这时候你再看上面图中的关系强弱比较是不是就感觉简单多了
以上是关于UML关系详解(泛化实现依赖关联组合聚合)的主要内容,如果未能解决你的问题,请参考以下文章