类与类之间通常有关联、通用化(继承)、依赖和精化等四种关系。
关联关系又分为普通关联、递归关联、限定关联、或关联、有序关联、三元关联和聚合等七种。
关联关系一般都是双向的,即关联的对象双方彼此都能与对方通信。反过来说,如果某两个类的对象之间存在可以相互通信的关系,或者说对象双方能够感知另一方,那么这两个类之间就存在关联关系(彼此知道、相互连接)。
1. 普通关联:普通关联是最常见的一种关联,只要类与类间存在连接关系就可以用普通关联表示。
2. 递归关联:如果一个类与它本身有关联关系,那么这种关联称为递归关联(同类对象之间的关联。如:一个网络结点类,在网络上有许多网络结点对象,那么这些有关联的网络结点对象间就是递归关联)。
关联中的角色问题:
“人类”,“人类”定义出两个对象,那么他们之间可能有结婚关联(递归)。一个人与另一个人结婚必然一个扮演丈夫角色,一个是妻子。如果一个人没有结婚,那么这个人不能作妻子或丈夫,那么对于这个人来说不应有“结婚”关联。人又可以是保险公司的客户。那么这样就类在不同的关联中扮演的角色是不同的,即:人与人之间是递归关联,那么他们之间可能是夫妻关系、兄弟关系、父子关系统—……,那么保险公司和人之间可以看成是普通关联,那么他们之间的关系可以是保险公司与保险客户的关系。
3. 限定关联:限定关联用于一对多或多对多的关联关系中。在限定关联中,使用限定词将关联中多的那一端的具体对象分成对象集。限定词可以理解为一种关键词,用关键词把所有的对象分开。利用限定关联可以把模型中的重数从一对多变成一对一。例如:保险公司和人之间可能是一种多对多关系,但是我们给“保险公司”加上限定词“平安保险”之后就变成一对多的关系了,我们再给“人”加上限定词“张三”那么就变成一对一的关系了。
4. 或关联:人可以与保险公司建立保险合同,公司也可以与保险公司建立保险合同,显然人持有的合同与公司持有的合同不应该相同,也就是说人与保险合同的关联关系不能用公司与保险合同的关联关系同时发生。为了解决这类问题,引入了“或关联”。所谓或关联就是对二个或更多关联附加的约束条件,使类中的对象一次只能应用于一个关联关系中。