简单读懂UML图(一)
一、基本概念
从百度百科上给出的定义来看:UML-Unified Modeling Language 统一建模语言,又称标准建模语言。是用来对软件密集系统进行可视化建模的一种语言。简单来说就是从源代码中抽象出各个部件、类之间的关系制作出来的图,让读UML图的人不看源代码也能大致了解源代码的结构。
二、箭头
由于UML图的箭头比较多,在这里单独介绍箭头的种类及具体含义。
1. 泛化(generalization)
- 概念:
泛化是一种一般与特殊、一般与具体之间关系的描述,具体描述建立在一般描述的基础之上,并对其进行了扩展。在java中用来表示继承的关系。简单来说,父类就是对子类的共性的抽象。 - 表示方法:
实现空心三角箭头。
2.实现(realization)
- 概念:
实现是一种类与接口的关系,表示类是接口所有特征和行为的实现,在程序中一般通过类实现接口来描述。 - 表示方法:
空心三角型箭头、线为虚线,由实现类指向接口
3.依赖(dependency)
- 概念:
关系也是表示类与类之间的连接,表示一个类依赖于另外一个类的定义,依赖关系时是单向的。简单理解就是类A使用到了类B,这种依赖具有偶然性、临时性,是非常弱的关系。但是类B的变化会影响到类A。在代码层面,为类B作为参数被类A在某个方法中使用。在代码运行时,出了类A作用的代码块后,则没有依赖关系。
在java中,依赖表现为:局部变量,方法中的参数和对静态方法的调用。 - 表现方法:虚线箭头,类A指向类B。
4.关联(association)
- 概念:关系表示类与类之间的连接,它使得一个类知道另外一个类的属性和方法。这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的。例如java中一个类的全局变量引用了另一个类,就表示关联了这个类。
- 表示方法:实线箭头,类A指向类B
5.聚合(aggregation)
- 概念:聚合关联关系的一种特例,是强的关联关系。聚合是整体和个体之间的关系,即has-a的关系,整体与个体可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。程序中聚合和关联关系是一致的,只能从语义级别来区分。关联关系中类处于一个层次,而聚合则明显的在两个不同的层次。
- 表示方法:尾部为空心菱形的实线箭头(也可以没箭头),类A指向类B
6.组合(compostion)
- 概念:关联关系的一种特例,体现的是一种contain-a关系,比聚合更强,是一种强聚合关系。它同样体现整体与部分的关系,但此时整体与部分是不可分的,整体生命周期的结束也意味着部分生命周期的结束,反之亦然。体现在代码层面与关联时一致的,只能从语义来区分。
特别的,组合与聚合几乎完全相同,唯一区别就是对于组合,“部分”不同脱离“整体”单独存在,其生命周期应该是一致的。
- 表现方法:尾部为实心菱形的实现箭头(也可以没箭头),类A指向类B