原文引自:http://www.cnblogs.com/lonelyxmas/p/3608984.html,方便自己学习
首先看一张完整的UML类图图示样例
第一(类):
这个 "动物"矩形框,它就是一个类(Class)。类图分为三个部分,第一部分显示类的名称,如果是抽象类,则就用斜体来表示。第二部分是类的特性,通常就是字段和属性。第三部分是类的操作,通常是方法或行为。之一前面的符号,"+"表示public,"-"表示private,'#'表示protected.
第二(接口)
它表示一个接口图,与类图的区别主要是顶端有《interface》显示。第一行是接口名称,第二行是接口方法。接口还有另外一种表示方法,俗称棒棒糖表示法,比如图中的唐老鸭就是实现了"讲人话"的接口。
第三继承
类和类、类与接口之间都是继承的关系。继承关系用空心三角形+实线来表示。
第四实现接口
大雁是最能飞的,我让它实现了飞翔的接口。实现接口用空心三角形和虚线来表示。
第五依赖
可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用
第六关联
他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;
第七聚合
聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
第八组合
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;