关联是一种结构关系,它指明一个事物的对象与另一个事物的对象间的联系。给定一个连接两个类的关联,可以从一个类的对象联系到另一个类的对象。注意,关联的两端都连到同一个类是完全合法的,这种连接自身的关联叫做一元关联(Unary Association),表示从类的一个给定对象能连接到该类的其他对象。恰好连接两个类的关联叫做二元关联(Binary Association),这是最常见的情况。连接多于两个类的关联叫做n元关联,这种关联比较特殊,需要仔细定义。在图形上,把关联关系画成一条连接相同类或不同类的实线,如图5-3所示。
图5-3 关联关系的表示方法
案例学习
◎图5-4给出了一个二元关联和一个一元关联的关联示例,表示关联关系可以连接两个类,也可以连接到自身。关联描述了给定类的单独对象之间的语义上的连接,提供了不同类的对象可以相互作用的连接。其余的关系连接是对类元自身的描述,而不是对它们的实例。
图5-4 关联关系示例
除了这种基本形式外,还有3种常常应用于关联的修饰。
(1)名称(Name)
关联可以有一个名称,通常为动词或动宾词组,用来描述该关系的性质。为了消除名称的歧义,可用带实心箭头的实线进行连接,给名称一个方向,如图5-5所示。
图5-5 关联的名称示例
虽然关联可以有名称,但在明确给出关联的端点名的情况下通常不需要给出关联名称。若有多个关联连接同一个类,有必要使用关联名或关联端点名来区分它们。若一个关联有多于一个端点是在同一个类上,有必要使用关联端点名来区分端点。若两个类之间只有一个关联,一些建模者就会省去关联名,但为了使关联的用意清晰最好使用关联名。
(2)角色(Role)
当一个类参与了一个关联关系时,它就在这个关系中扮演了一个特定的角色。角色是关联中靠近它的一端对另一端的类呈现的面孔。可以显式地命名一个类在关联关系中所扮演的角色。把关联端点扮演的角色名称作为端点名(在UML中称为角色名)。在图5-6中,扮演雇员角色的类“员工”与扮演雇主角色的类“公司”相关联。
图5-6 关联的角色示例
同一个类可以在不同关联关系中扮演相同或不同的角色。可以把属性看作类拥有的单向关联。属性名对应类的关联远端的名称。(www.xing528.com)
(3)多重性(Multiplicity)
关联表示了对象间的结构关系。在很多建模问题中,说明一个关联的实例中有多少个相互连接的对象很重要。这个“多少”被称为关联角色的多重性,它表示一个整数的范围,指明一组相关对象的可能个数。多重性是一个表示取值范围的表达式,其最大值和最小值可以相同,用两个圆点把它们分开。声明关联的多重性说明:对于关联另一端的类的每个对象,本端的类可能有多少个对象出现。对象数目必须是在给定的范围内。可以精确地表示多重性为:一个(1)、零个或一个(0..1)、多个(0..*)、一个或多个(1..*)。可以给出一个整数范围(如2..5),也可以精确地指定为一个数值(如3与3..3等价)。
如图5-7所示,每个“公司”对象可以雇佣一个或多个“员工”对象(多重性为1..*);每个“员工”对象受雇于0个或多个“公司”对象(多重性为*,等价于0..*)。
图5-7 关联的多重性示例
聚集(Aggregation)是关联的特例。如果类与类之间的关系具有整体和局部的特点,则把这样的关联称为聚集。在聚集关系中,成员类是整体类的一部分,即成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。如电脑包括键盘、显示器,一台电脑可以和多个键盘、多个显示器搭配,而键盘、显示器可以和主机分开,主机可以选择其他的键盘、显示器组成电脑。从严格语义来看,聚集关系暗示着类图中不存在回路,即单向关系,而关联关系是双向的。聚集可以进一步分成共享聚集(Shared Aggregation)和组合聚集(Composition aggregation)。
(1)共享聚集
对整体-部分关系建模,其中一个类描述了一个较大的事物(整体),它由较小的事物(部分)组成,并且部分对象可以是任意整体对象的一部分,表示关系较弱的情况。它描述了“has a”关系,即将整体对象拥有部分对象表示成在整体对象的一端用一个空心菱形修饰的简单关联关系。如图5-8所示,多种零件聚集成车,而零件的设计可用于多种不同的车上。
图5-8 共享聚集关系示例
这种简单形式的聚集的含义完全是概念性的。空心菱形只是把整体和部分区别开,这意味着共享聚集没有改变整体与部分之间整个关联的导航含义,也与整体和部分的生命周期无关。
(2)组合聚集
组合聚集是一种强形式的聚集,整体对象不仅拥有它的部分对象,并具有强的物主身份,表示“contains a”的关系,即将部分对象不能脱离整体对象存在表示成在整体对象的一端用一个实心菱形修饰的简单关联关系。如图5-9所示,在一个具体的公司和部门的整体-部分关系中,如果系统中定义的“公司”没有了,那公司所包含的“部门”也将不存在。
图5-9 组合聚集关系示例
组合聚集中,成员对象的生命周期取决于聚集对象的生命周期,聚集不仅控制着成员对象的行为,并且控制了成员对象的创建和析构。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。