用例图元素之间的关系 用例图中包含的元素除了系统边界、角色和用例,另外就是关系。包括:角色之间的关系、用例之间的关系、用例和角色之间的关系。 角色之间的关系 由于角色实质上也是类,所以它拥有与类相同的关系描述,即角色之间存在泛化关系,泛化关系的含义是把某些角色的共同行为提取出来表示为通用的行为。 用例之间的关系: (1)包含关系:基本用例的行为包含了另一个用例的行为。基本用例描述在多个用例中都有的公共行为。包含关系本质上是比较特殊的依赖关系。它比一般的依赖关系多了一些语义。在包含关系中箭头的方向是从基本用例到包含用例。 简单的理解就是用例可以包含其他用例具有的行为,并把它所包含的用例行为做为自身行为的一部分。 (2)泛化关系:代表一般于特殊的关系。它的意思和面向对象程序设计中的继承的概念是类似的。不同的是继承使用在实施阶段,泛化使用在分析、设计阶段。在泛化关系中子用例继承了父用例的行为和含义,子用例也可以增加新的行为和含义或者覆盖父用例中的行为和含义。 泛化(Generalization)在面向对象的技术中无处不在,下图给出了一个使用泛化的用例图: 在用例图中,角色和用例都能够泛化。角色的泛化/继承很容易理解,因为角色本来就是类(Class),它是一种版型(stereotype)为 Actor 的类,所以角色的继承直观而自然。但是用例的继承实际上分为两种情况,并不是简单的使用泛化,而是使用扩展(extended)和包含(include)两种泛化的特例。 扩展用于子用例的动作步骤基本上和父用例的动作步骤相同,只是增加了另外的一些步骤的情况下。包含用于子用例包含了所有父用例的动作,它将父用例作为了自己的一个大步骤,子用例常常包含一个以上的父用例。 (3)扩展关系: 扩展关系的基本含义和泛化关系类似,但在扩展关系中,对于扩展用例有更多的规则限制,基本用例必须声明扩展点,而扩展用例只能在扩展点上增加新的行为和含义。与包含关系一样,扩展关系也是依赖关系的版型。在扩展关系中,箭头的方向是从扩展用例到基本用例,这与包含关系是不同的。 它是以隐含形式插入的,也就是说,扩展用例并不在基本用例中显示。在以下几种情况下,可使用扩展用例: a.表明用例的某一部分是可选的系统行为(这样,您就可以将模型中的可选行为和必选行为分开); b.表明只在特定条件(如例外条件)下才执行的分支流; c.表明可能有一组行为段,其中的一个或多个段可以在基本用例中的扩展点...