首页 百科知识 4.3.2类图

4.3.2类图

时间:2022-10-15 百科知识 版权反馈
【摘要】:在UML类图中,这些关系用类框之间的连线来表示,连线上和连线端头处的不同修饰符表示不同的关系。实体之间的“使用”关系表示一个实例的发生变化后,可能影响与它有依赖关系的其他实例。依赖关系用两个模型元素之间的虚线箭头表示,箭尾处的元素依赖于箭头处的元素。箭头上可带有表示依赖关系的文字说明,还可以有名称。泛化一般是用于对继承进行建模的UML表示。

4.3.2 类图

在UML中,类图是经常被用到的一个,应用类图可以标识类(包括类的属性及方法)、接口、协作以及它们之间的关系,详细描述类的继承与合成关系,明确系统的结构化设计。类图不但为项目的设计人员所关心,更为项目的开发人员所关注,因为他们要依据类图来产生代码。因此,类图在UML中占据了相当重要的位置。

一个完整的类包括类的名称、类的属性以及类的操作(方法),在类图中类用矩形框来表示,它的属性和操作分别列在分格中,有时详细信息不需要标明,则分格可以省略。一个类可能出现在好几个图中。同一个类的属性和操作可以只在一种图中列出,在其他的图中则可以省略。图4-4是类的示例。

img60

图4-4

左边是具有属性和方法的类图示例,而右边的则是省略属性和方法的图例

在类图中,除了需要描述单独的类的名称、属性和操作外,还需要描述类之间的联系,因为没有类是单独存在的,通常类与类之间需要相互协作,实现比单独工作更多的功能。在UML类图中,这些关系用类框之间的连线来表示,连线上和连线端头处的不同修饰符表示不同的关系。类之间的关系有继承(泛化)、关联、聚合和组合等。

1.依赖(Dependency)

实体之间的“使用”关系表示一个实例的发生变化后,可能影响与它有依赖关系的其他实例。这是一种将几种不同的建模关系组织到一起的简便的表示方法。更具体地说,它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。例如,一个局部变量对通过方法调用而获得的一个对象的引用。也可利用“依赖”来表示包和包之间的关系,两个包之间具有依赖关系,说明两个包中至少有一对元素之间具有依赖关系,而不能说明两个中所有的元素都有依赖关系。包中含有类,可根据这些包中的各个类之间的关系,来表示出包和包的关系。依赖关系用两个模型元素之间的虚线箭头表示,箭尾处的元素依赖于箭头处的元素。箭头上可带有表示依赖关系的文字说明,还可以有名称。具体示例见图4-5。

img61

图4-5 依赖的一个简单图例

例子中是一个计算工资的类对时间类的调用,这就是一种简单的依赖关系。

2.关联(Association)

关联指的是两个或多个特定类元之间的关系,它描述了这些类元的实例的联系,是类之间的一种很弱的联系。在关联内类元的位置是有序的,因此关联可以是有方向的,可以是单向关联,也可以是双向关联。可以给关联加上关联名来描述关联的作用。关联两端的类也可以以某种角色参与关联,角色可以具有多重性,表示可以有多少个对象参与关联。关联可以有一个名称,这一名称在包的所有关联和类中必须是唯一的,这个名称并不是必须的,从关联端点的角色名称也可以很容易地辨别出它们。在关联的端点给出了参与关联的类,而且在端点还指定了应用于对应对象的参与特性,比如在关联中一个独立的对象可以出现的次数,以此表现多重性;也可以加上一些约束,以加强关联的含义,等等。图4-6是一个关联的简单举例。

img62

图4-6 关联的简单举例

3.聚合(Aggregation)

聚合是关联的一种形式,代表的是一个整体与其组成部分之间的、整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构,从中找出一些组成类,该整体类和组成类之间就形成了聚合关系。需求描述中“包含”、“组成”、“分为……部分”等词常意味着聚合关系。聚合在实例图中不存在回路,它只能是一种单向关系。图4-7是一个简单的聚合图例。

img63

图4-7 简单的聚合图例

4.组合(Com position)

组合是聚合的一种特殊形式,也表示类之间整体和部分的关系,它的结构比聚合严格,组合关系中部分和整体具有统一的生存期。一个部分不能同时被两个组合集合共享,就像实际生活中一个发动机只能装在一辆车上,如果想把它给其他车辆,那么先要把它从车上卸下来才行。组合关系是可以传递的,一个公司是由各个部门组合成的,而部门又是由各个员工组合成的,那么我们可以说公司也是由各个员工组合而成的。组合关系中的整体对象一旦不存在,部分对象也将不存在。部分对象与整体对象之间具有共生死的关系。图4-8是一个组合的简单图例。

聚合和组合的区别在于:聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象,不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。

5.泛化(Generalization)

泛化一般是用于对继承进行建模的UML表示。继承指的是一个类(称为子类)继承另外的一个类(称为基类)的功能,并增加它自己的新功能的能力,继承是类与类之间最常见的关系之一。这种泛化关系是一种可传递的反对称关系,类图中泛化的表示方法是从子类拉出一条闭合的、单键头(三角形)的实线指向基类,在父类方向上经过一个或几个泛化关系的元素称为祖先,在子类方向上经过一个或几个泛化关系的元素称为后代。泛化关系不允许出现循环,一个类不能既是自己的祖先又是自己的后代。图4-9是一个泛化的简单图例。

img64

图4-8 组合的简单图例

img65

图4-9 泛化的简单图例

6.实现(Realization)

实现是规格说明和其实现之间的关系,它表示不继承结构而只是继承行为。就像两个实体之间的一个合同,一个实体定义一个合同,而另一个实体保证履行该合同。规格说明描述了某种事物的行为和结构,但是不决定这些行为如何来实现。而实现提供了如何以高效的方式来实现这些细节。通常有很多方式来实现一个规格说明,一个元素也可以实现多个规格说明,所以它们之间是多对多的关系。实现关系用一个虚线路径表示,其中靠近提供规格说明的元素端带有封闭的三角形箭头,路径的末端在提供实现的元素一边。图4-10是一个简单实现的图例。

img66

图4-10 简单实现的图例

类图中的一些元语见表4-1。

表4-1

建立类图的步骤大致如下:

(1)研究分析问题领域,确定系统需求。类的识别是一个需要大量技巧的工作,人们可以根据用例描述确定类,也可以根据边界类、控制类、实体类的划分来帮助分析系统中的类。这样的方法很多,根据具体问题可以选取不同的方法。

(2)确定类,明确类的含义和职责、确定属性和操作。

(3)确定类之间的关系。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈