设计模式 (5)类图二

导言

前面第一篇类图文章,介绍了类图和类以及类图的画法并提及了对象的表示。现在我们来描述一下类图之类之间的关联关系。

关联关系

关联关系(Association)是类与类之间存在相互关系
关联关系是一种结构化关系
关联关系用来表示一类对象和另一类对象之间的有联系

关联定义

关联定义两个或多个类之间的关系,指明了类之间的一种静态的、结构化的关系。

“雇员”(Employee)工作于“部门”(Department),这里的“雇员”和“部门”是类, 我是一个关联。

链接是类实例(对象)之间的链接,表示类之间的关联的实例。

Jane “制造部门”(Manufacturing),这里Jane就是“雇员”的一个实例,“制造部门”是“部门”的一个实例。

两个对象之间可存在一个关联,当且仅当它们相应的类之间存在一个关联。

关联本身是双向的。
关联的名称取其正向:“雇员” ”部门”。关联也有一个隐含的相反的方向(通常没有被显示地表述):“部门” “雇员”。关联大部分是二元的-即描述两个类之间的关系。然而他们也可以是一元的(自我关联)、三元的或者是多元的。

类图描述关联

在类图中,关联显示为一条连接两个类框的弧线,弧线旁边有关联的名称。
在类图中,关联名称通常从左到右,自顶向下多读。而在一个拥有很多类的大规模类图里,类通常相对于彼此在不同的位置。为避免在读UML图产生歧义,UML的箭头方向指明该从什么方向读关联(单向时,双向时自有介绍,详情看后续内容)。
例子:
这里写图片描述

“公司”(Company)被“首席执行官”(CEO) (Is Led by)。

关联的多重性

关联的多重性规定了一个类的多少个实例能与另一个类的单个实例建立关联。
关联关系有单向关联和双向关联之分。

单向关联,是用箭头的实线表示,其只有一个角色名
双向关联,是用直线表示,拥有两个角色名。表明一个角色对另一个角色的关系。

一对一关联。

在两个类的一对一关联中,在两个方向上的关联都是一对一的。
因此,两个类中任意一个类的一个对象只与另一个类的一个对象有一个链接。

如下图所示,一对一静态建模表示法:

这里写图片描述

在“公司” “首席执行官” 这一关联中,一个特定的公司仅有一个首席执行官,而且一个首席执行官仅是一个公司的领导。
例如,“苹果”(Apple)公司的首席执行官史蒂夫 乔布斯。
本图表示的是单向一对一关联

代码显示(显示主要体现部分)

Company类

public class Company {
    ...
   public Ceo ceo; //这个说明了一对一的关联关系 
    ...
}

CEO类

public class Ceo {
   ...
}

一对多关联

一对多关联中,两个类之间在一个方向上有一个一对多关联,而在相反方向上是一个一对一关联。

如下图所示,一对多关联显示:

这里写图片描述

“银行”(Bank) (Administer)“账户”(Account)这个关联关系中,单个银行管理多个账户,但是一个账户只能由一个银行管理。
图表示单向关联关系

代码显示(显示主要体现部分)

Bank类

public class Bank {
    ...
   public Acount[] acount; //这个说明了一对多关联
    ...
}

Account类

public class Account {
   ...
}

规定数值关联

规定数值关联是一个指明了特定数字的关联。

如下图所示,规定数值关联显示:

这里写图片描述

“汽车”(Car)由“门”(door) (Is entered through)这一关联中,一辆汽车有两扇或四扇门(写为2,4),但是绝不会有一扇、三扇或五扇门。相反方向的关联依然是一对一的,即一扇门只属于一辆汽车。注意,一个特定的汽车制作商决定一辆汽车能有多少门;而另一个制造商可能做出不同的决定。

可选关联

在可选关联中,一个类的一个对象到另一个类的一个对象可能不总是存在链接。

如下图所示,可选关联显示:

这里写图片描述

多对多关联

多对多关联是在两个类之间的两个方向上各是一个一对多关联的关联。

如下图所示,多对多关联显示:

这里写图片描述

“课程”(Course)由“学生”(Student) (Is attended by)、”学生” “课程”这一关联中,在课程和听课学生之间有一个一对多关联,因为一个课程有多个学生听课。在相反方向上也有一个一对多的关联,因为一个学生可以参加多个课程。

三元关联

三元关联是类之间的三个方向的关联。

更高阶的关联,即三个雷以上的关联是十分罕见的。
这里写图片描述
“买方”(Buyer)、“卖方”(Seller)和”中介“(Agent)三个类之间的关联。该关联是“买方”通过“中介”和“卖方”协商价格。

一元关联(自关联)

一元关联(也称自身关联)是一个类的一个对象与同一个类的另一个对象之间的关联。

一些类的属性对象类型为该类本身。
这里写图片描述
“人”(Person)是“人”(Person)的孩子“Is child of”,“人”与“人”结婚(Is married to),“雇员”是“雇员”的老板(Is boss of)。

关联类

关联类是对两个或多个类之间的关联进行建模的类。关联类的属性就是该关联的属性。在两个类或多个类之间的复杂关联中,关联是有可能拥有属性的。这经常发生在多对多关联中,其中属性不属于任何一个类,而是属于该关联。
这里写图片描述

“小时数”类是关联类,其属性“工作小时数”(hoursWorked)是“雇员”类和“项目”类之间关联的一个属性。
一个“小时数”类实体对象表示了一个特定的雇员(多个雇员当中特定的一个)在一个特定的项目(一个雇员工作于多个项目)上的工作时间。

一个“项目”配备(Is staffed by)”雇员”
一个“雇员”工作于(Works on)“项目”

总结

本文详细讲解了UML类图中的关联关系和关联类。并配以图解进行解释。对于学习设计模式来说,类图是一个不可缺少的一个部分。关联关系在类图中比较常见,后面的文字会介绍组合和聚合(关联关系的一种)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YuYunTan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值