UML这个语言是在那次面向对象分析设计运动高潮的一个产物,或者说,UML处理问题以及操作起来是基于面向对象的。既然它是面向对象的,那么在对象这个世界中,有一个很重要的特定就是对象之间是有关系的。
我们所处的这个世界,我们每一个个体,所有的物品,这些对象都是在相互作用下解决一些事情的,没有什么是孤立存在的。所以说,对象和关系是相辅相生的,就像我们一出生就和家人和社会有了各种各样的关系,其它对象也是如此,一旦存在,就有关系。
关系有什么呢? ——关联、依赖、泛化、实现、组合、聚合。
在这里,不得不说,在对象之间繁杂的关系联系中抽象整理出这么简单的几个,真是很精准到位的。
它描述了有着共同的结构和语义的一组链接,指的是两个类之间的一种强依赖关系,这种关系可以是单向的,也可以是双向的。
软件开发者经常会用编程语言把关联实现为从一个对象到另一个对象的引用,就是一个对象引用另一个对象的属性。
如图所示,员工和公司的关系就是关联,员工可以引用公司中的一些属性,公司也可以引用员工的一些属性。它们之间的关系是静态的、结构上的。
在这里理解成一种“使用”的关系,就是说一个类用到了另一个类。这种关系是很弱的,具有偶然性、临时性。
如图所示,人会用到铅笔,但这种关系是很弱的,人和铅笔本身没有什么联系,人用到铅笔的时候才会有关系。
也可以叫做继承,指的是一个类继承另外一个类的功能,并且它可以自己曾加一些功能。换句话说,子类拥有父类所有的属性方法,而且子类还有额外的一些属性方法。很像现实中子女拥有父母的特点,同时自己也慢慢培养起来自己的特点,一代更比一代强。
如图所示,男人是人类的子类,他继承了人类的所有属性方法,同时他拥有自己的属性(性别)
实现描述的是一个类实现接口(一个或多个)的功能,实现是类与接口之间最常见的关系。
如图所示,无论哪种回家方式,我们都是对回家这个类一种实现方式。
聚合是关联关系的一种特例,它体现的是一种部分和整体的关系,但是整体和部分是可以分离的。其实从字面上也可以理解,对象之间仅仅只是聚在一起,人家本身是可以独立存在的。
如图所示,就像铅笔盒和铅笔的关系,他们是可以相互独立存在的,之间的关系是比较弱的。
组合也是关联关系的一种特例,它是一种包含的关系。同样也是整体和部分的关系,但是整体和部分是不可分的。
如图所示,就像脑袋是我们人的一部分,这个是不能分的。
关联指对象之间有着明显的关系,像老师和学生、老板和员工;依赖是弱关联,是偶然而不是必然,像人和石头,用来砸核桃的时候就有关系,用不着的时候就没关系。
泛化就是我们理解的中的继承,子类对父类说:你的就是我的,我的还是我的;实现就是类去实现各个接口,接口放出话来:我要回家,下面的类就去实现呗。
聚合和组合都是整体和部分的关系,只不过聚合是能分离的,组合是不能分离的。聚合是咱们几个聚一起,分开也是可以的;组合是你是由几个部分组成的一个整体,一旦拆了,你就不是你了。