一文读懂UML用例图
一、概述
用例是描述系统需求的一种手段,即系统应该做什么。用例图由参与者、用例和主题组成。每个用例的主题都代表了一个用例所适用的系统。用户和任何其他可以与主体交互的系统都被表示为行动者。
用例是一种行为规范。用例的实例指的是紧急行为的发生符合相应的用例。这种情况通常用交互来描述。
二、Abstract Syntax
图 1
三、用例图的基本符号与元素
参与者(Actor):表示系统中的用户,即与系统交互的对象
用例(Use Case):用户与系统的交互行为,可以理解为用户可以使用系统做的事情
系统边界(system):用来表示正在建模系统的边界
包含关系(include):被指向用例为指向用例的行为之一
拓展关系(extend):被指向用例为指向用例的拓展功能
泛化关系(generalization):被指向用例为指向用例的特例之一
关联关系(association):表示参与者与用例之间的关联关系
1、Use Cases and Actors
用例可以适用于任何数量的主题。当用例应用于主题时,它指定了一组行为由受试者执行,从而产生对参与者或受试者的其他利益相关者有价值的可观察结果。
用例是一种BehavioredClassifier,它表示一组提供的行为的声明。每个用例指定受试者可以与一个或多个演员合作执行的某些行为。用例定义了受试者提供的行为,而不参考其内部结构。这些行为涉及参与者和受试者之间的互动,可能会导致受试者状态的变化以及与环境的沟通。用例可以包括其基本行为的可能变体,包括异常行为和错误处理
用例的主题可以是一个系统或任何其他可能具有行为的元素,例如组件或类。每个用例都指定了主题向用户提供的有用功能单元(即与受试者互动)。必须始终完成此功能才能完成用例。视为如果在执行之后,受试者将处于不期望进一步输入或操作的状态,并且UseCase可以再次启动,也可以处于错误状态。
用例既可以用于规范主题的(外部)需求,也可以用于规范由主题提供的功能。此外,用例还可以通过定义参与者应该如何与主体交互,从而使主体能够执行其服务,来说明指定主体对其环境提出的要求
用例的行为可以由一组行为(通过其ownedBehavior关系)来描述,例如交互、活动和StateMachines,以及按前置条件、后置条件和自然语言文本在适当的情况下。它也可以通过协作来间接描述,该协作使用用例及其参与者作为分类器来键入其部分。使用哪种技术取决于用例行为的性质以及预期的读者。这些描述可以组合在一起。具有关联StateMachine的用例示例如图1 所示。
用例可能有相关的Actor,这些Actor描述分类器的实例如何实现用例和扮演Actor角色之一的用户进行交互。指定同一主题的两个用例不能关联,因为它们各自描述了主题的完整用法。
当UseCase与Actor的关联在Actor端的多重性大于1时,这意味着UseCase中涉及多个Actor实例。多个参与者参与用例的方式取决于手头的具体情况,本规范中未对此进行定义。例如用例可能需要两个独立的行动者同时(同时)采取行动(例如,在发射核导弹时)或它可能需要参与者采取互补和连续的行动(例如,一个参与者开始某件事,另一个参与者一个停止它)。
用例可以由包(Package)拥有,也可以由分类器(Classifier)拥有。尽管拥有的分类器通常代表拥有的用例所适用的主题,但情况并非如此。Actor为实体所扮演的角色类型建模,该实体与其相关用例的主体进行交互(例如,通过交换信号和数据)。Actor可以代表由人类用户、外部硬件或其他系统扮演的角色。
当一个Actor与一个UseCase的关联在UseCase端的多重性大于1时,这意味着一个给定的Actor可以参与该类型的多个UseCase。这种多重参与的具体性质取决于手头的情况,本规范中未对此进行定义。因此,参与者可以并行(并发)或在不同的时间点启动多个用例。
2、Extends
Extend是从扩展用例(扩展)到扩展用例(extendedCase)的关系指定如何以及何时将扩展UseCase中定义的行为插入到扩展用例。扩展发生在扩展用例中定义的一个或多个特定扩展点上。
Extend旨在当存在一些额外的行为时使用,这些行为可能是有条件地添加到在一个或多个用例中定义的行为。
扩展用例是独立于扩展用例定义的,并且独立于扩展用例。另一方面,扩展的UseCase通常定义的行为可能不一定是本身就很有意义。相反,扩展的UseCase定义了一组模块化行为增量,这些增量增加了在特定条件下执行扩展的UseCase。
Extend是一种DirectedRelationship,因此源是扩展的UseCase,目标是扩展的用例。它也是NamedElement的一种,因此它可以在其所属用例的上下文中有一个名称。延伸关系本身归扩展所有。
ExtensionPoint标识用例行为中的一个点,在该点上,该行为可以通过Extend进行扩展关系每个ExtensionPoint在一个用例中都有一个唯一的名称。
定义扩展点位置的具体方式是有意未指定的。这是因为用例可以以各种格式指定,如自然语言、表、树等。extensionLocation概念背后的直觉最好通过文本描述的用例的例子来解释:通常,具有ExtensionPoints的用例由一组更细粒度的行为片段描述组成,这些描述通常按顺序执行。用例文本的这种分段结构允许通过在原始行为描述之间的适当插入点合并补充行为片段描述来扩展原始行为描述碎片(扩展点)。因此,扩展用例通常由一个或多个行为片段组成要插入扩展用例的适当位置的描述。因此,extensionLocation是一个用例中所有各种扩展点的规范,其中补充行为增量可以是合并。
如果在执行扩展用例,那么扩展用例的所有适当行为片段也将被执行。如果条件为false,则不会发生这种情况。当到达扩展用例的相应扩展点时,执行各个片段。一旦给定的片段完成,扩展用例的行为将继续执行到ExtensionPoint之后。请注意,即使涉及多个用例,也只有一个行为执行。
3、Includes
Include是两个用例之间的DirectedRelationship,表示包含的用例(addition)被插入到包含用例(includingCase)的行为中。它也是NamedElement的一种,因此它可以在其所属用例(includingCase)的上下文中具有名称。包括的用例可能取决于通过执行包括的用例所产生的更改。包含的用例必须可用于完整描述包含用例的行为。
Include关系旨在当两个或多个用例的行为存在共同部分时使用。然后,这个公共部分被提取到一个单独的用例中,该用例将被包含在常见的由于Include关系的主要用途是重用公共部件,因此基本用例中剩下的是通常本身并不完整,但取决于所包含的部分是否有意义。这反映在关系,表明基本用例依赖于加法,而不是相反。
在执行之前,包含的UseCase的所有行为都在包含的UseCase中的单个位置执行恢复包括UseCase。
Include关系允许用例的分层组合以及用例的重用。