在上一篇博客中,主要写了一下UML是什么,UML的作用,以及UML中包含的关系和图形。但是没有具体介绍那些关系的用法和图的用法。这篇博客就是要理清UML的关系!
关系
关联
是一种类与类或类与接口之间的,具有结构性的关系。由上图可知,关联又可分为三种:一般关联、聚合以及组合。
聚合:它体现了整体与部分的思想。就好比书柜与书一样,没有人规定书柜里一定要放书,也没有人规定书一定要放在书柜里。它们之间不是必须的关系,但是当书放在书柜中时,它们就由两个不同的部分形成了一个整体!这充分体现了整体与部分的思想,而且使这个整体具有结构性。。
组合:它同样体现了整体与部分的思想,但与聚合相比,它的整体与部分是不可分割的。可以这样理解,书是由一页页的纸组成的,如果没有纸,就成不了书了(电子书除外,但无论什么书,都是又一个个组成的),可以看出,书和纸不密不可分的,它们之间是必须的关系。。
一般关联VS聚合、组合
相比聚合的不同是,一般关联是一个类或两个类之间的结构性关系。
相比组合的不同是,一般关联是类不是密不可分的。
综上所述,一般关联是一个类、或两个不是密不可分的类之间的、结构性关系。
依赖
是一种使用关系,具有临时性,类A依赖类B时,当类B发生变化,类A也随之发生改变。我们可以这样理解,在大四的时候,咱们要写论文,需要收集资料来写文献综述,于是我们要看很多本书,查找对自己有用的文字。从上一句话中我们可以分析得出:1、文献综述需要在书中收集资料 2、咱们“使用”了书,用来获取有用的文字 3、当使用的书不同时,咱们文献综述的内容是不同的。
从这三个分析结果看,它符合依赖的定义,文献综述使用了书,而且当书不同时,文献综述也会随之改变。
泛化
我们可以理解为继承,就相当于面向对象技术中的派生类对基类的继承关系。咱们可以定义一个基类,叫“书”,我们可以将“书”实例化成漫画书、科普书、文学书等等,不管是什么类型的书,它们都具有“书”的基本特征。
实现
描述的是一个类实现另一个类或接口的功能。这句话听起来比较拧巴且不易理解,但视频上是这样说的,我感觉不直白且不好理解。用我的话说,就相当于C++中的引用,原本一个类或接口不能实现关机的功能,但另一个类中有这个功能,引用了它的,就实现了关机的功能。
实现VS泛化
无论是实现,还是继承,都可以抽象为C++中的引用,但是它们之间到底有什么不同,需要我们仔细推敲一番!
我的理解是,实现是继承的特殊化。实现中的接口是一系列操作的集合,它只有识别方法的能力,但功能代码都是来自其他类的。继承就不一样了,子类继承了父类,但子类中还可以有其他功能,接口中不能有其他功能。
小结
通过对上述关系的描述,我们可以很清晰的感受到每个关系的不同点,让我明白仔细总结和对比的重要性,当知识突出它的特点时,我们才能够印象深刻。对UML的总结还在继续,下一篇文章《【UML】概念、关系、图(三)》敬请期待。。