1
 软件工程
1.8.4.5 6.4.5 类图

6.4.5 类图

在面向对象系统的建模中所建立的最常见的图就是类图。类图从系统的逻辑视图展现了一组类、接口、协作和它们之间的关联、依赖和泛化等关系,反映系统的静态结构。主动类的类图给出了系统的静态进程视图。如图6-10所示,类图中通常包括下述内容。

img92

图6-10 UML类图

1.类图中的建模元素

在类图中,UML建模元素包括:①类及其结构和行为;②接口;③协作;④关联、依赖、泛化关系;⑤多重性和导航指示符;⑥角色名字。

1)关联名

关联可以有名称,用于描述关联的性质和作用。通常,关联名是一个动词或动词短语。在类图中,不需要给每个关联都加上关联名。只有在需要明确地给关联提供角色名,或一个模型存在多个关联且要查阅、区别这些关联时才给出关联名。

图6-11中类Company和Person之间的关联如果不使用关联名,可以有多种解释。如果在关联上加了Works for关联名,则表示Company和Person之间是雇佣关系。此外,可以提供一个阅读导向箭头(实心三角形)指示阅读关联名称的方向,但并不表示可见性或关联的导航方向。

img93

图6-11 类图中的关联名

2)多重性

若类A和类B之间有关联关系,多重性(Multiplicity)定义了类A有多少个实例可以和类B的一个实例关联。常用的多重性表示方法如表6-4所示。

表6-4 常用的多重性表示法

img94

说明:UML中用*表示不确切的最大数,Rose中用n表示。

3)角色名字

当一个类与另一个类发生关联关系时,每个类通常在关联中都扮演某种角色。角色是关联关系中一个类对另一个类所表现出来的职责。角色的名称是名词或名词短语。如果在关联上没有标出角色名字,则隐含地用类名作为角色名。图6-12中Person类以Employee的角色、Company类以Employer的角色参与关联。

img95

图6-12 关联的角色名字

2.关联类

关联本身也可以有特性。如图6-13所示,在Company和Person之间的雇主和雇员关系中,有一个描述该关联特性的Contract类,它只应用于一对Company和Person。salary 和startDate是Contract类的属性,描述的是Company类和Person类之间的关联关系,而不是描述Company类或Person类的属性。在UML中,把这种情况建模为关联类。关联类可以进一步描述关联关系的属性、操作及其他信息。关联类是一种具有关联特性和类特性的建模元素,可以把它看成是具有类特征的关联或是具有关联特征的类。关联类通过一条虚线与相应的关联连接。

3.限定关联

存在限定符(Qualifier)的关联称为限定关联(Qualifier Association),限定关联用于多重性为一对多或多对多的关联。其目的是把多重性从*降为1或0..1。限定符画成一个内标限制内容的小方块,链接在它所限定的类上。限定符用于从规模较大的相关对象集合中,依据限定符的值选择一个或多个对象。受限定值选中的对象是目标对象,如图6-14所示。

img96

图6-13 关联类

img97

图6-14 限定关联

图6-14表示一个Company中有许多Person,给出限定符employeeNo值后,就可以对应一个Person值或Null。受限定的对象是Company,目标对象是Person,多重性表示Person和(Company,employeeNo)之间的关系,而不是Person和Company之间的关系。

4.模板类

模板类又称为参数化的类,在诸如C++、Java语言中支持模板类,图6-15中给出了模板类OmnipotenceArray。

img98

图6-15 模板类