用例图包含三部分:用例use case 、参与者actor和关系relationship
用例图是被称为参与者的外部用户所能观察到的系统功能的模型图
用例图列出系统中的用例和系统外的参与者,并显示哪个参与者参与了哪个用例的执行
用例图多用于静态建模阶段(主要是业务建模和需求建模)。
关系:泛化、扩展、包含、关联
表示参与者与用例之间的通信,任何一方都可发送或接受消息。
泛化关系是两个用例或两个参与者之间的关系。当多个用例共同拥有一种类似的结构和行为的时候,可以将它们的共性抽象为父
用例,其他的用例作为子用例,用例间的这种关系被称为用例的泛化关系。A 是 B的泛化,意味着 A 描述的是一般的行为,而 B是这些行为的详细(Specific)版本,A被称为父用例(Parent Use Case)或基用例(Base Use Case),B被称为子用例(Child UseCase)。
在用例的泛化关系中,子用例是父用例的一种特殊形式,子用例继承(Inherit)了父用例所有的结构、行为和关系。在用例图中,泛化关系用实线加上空心的箭头来表示。子用例被连接在箭头的尾部,箭头指向父用例。以PPS项目为例,用例Create Wholesale Order和Create Retail Order 都包括一系列公共的行为,如系统提供空白订货单表、业务员输入客户信息、业务员选择产品销售方式、业务员填写需求数量、系统显示产品价格并且合计总价等,因此,可以将这些公共的行为泛化为用例 Create Order,
参与者之间也存在着这种泛化关系。例如,如果建模了一个数据库管理员和一个备份管理员,然后发现他们的工作中有一部分是重叠的,那么,就可以创建一个称为系统管理员的参与者作为数据库管理员和备份管理员的泛化。
扩展是两个用例之间的关系,它使得每个用例可以通过扩展用例向基用例中添加额外的行为来扩展基用例的功能。用例的扩展机制允许从一个基用例开始开发一个复杂的系统,并且能够在不改变基用例的前提下向基用例中扩展更多的行为。用例 A扩展了用例B,则A称为扩展用例(Extend Use Case)或子用例,B称为基用例,它表示扩展用例A的事件流在一定的条件下按照相应的扩展点可插人基用例B中,这就
需要在基用例中定义一至多个已命名的扩展点。选用扩展关系可以把一些可选的操作独立封装在另外的用例中,避免基用例过于复杂。
扩展关系用虚线加上开箭头来表示。扩展用例被连接在箭头的尾部,箭头指向基用例,在虚线处添加一个<< extend >>表示扩展关系。例如,在基用例 Compare Inventory中,如果库存量足够多,则可以启动零配件出库的功能,如果库存量不足则需要创建采购合同。所以Stock Out 和Create Purchase Contract是在用例Compare Inventory基础上的扩展,可将其建模为扩展关系,如图2-11所示。
包含是两个用例之间的关系。当多个用例需要用到同一段行为时,可以把这段共同的行为单独抽象成为一个用例,然后让其他的用例来包含这一用例,从而避免在多个用例中重复描述同一段行为,也可以防止该段行为在多个用例中的描述出现不一致性。当需要修改这段公共的需求时,也只需要修改一个用例,避免同时修改多个用例而产生的不一致性和重复性工作。用例 A 包含 B,将 A 称为基用例,B 称为被包含用
例(Inclusion Use Case)。包含关系表示基用例会用到被包含用例,被包含用例的事件流在基用例的某个点处插人到基用例的事件流中。
**值得注意的是,对于包含关系而言,子用例中的事件流是一定插人到基用例中去的,并且插人点只有一个,而扩展关系可以根据一定的条件来决定是否将扩展用例的事件流插人到基用例事件流,并且插人点可以有多个。包含关系是无条件的,扩展关系是有条件的。**含关系用虚线加上箭头来表示。基用例被连接在箭头的尾部,箭头指向被包含用例,在虚线处添加一个<< include >>标签以表示包含关系,如图 所示。
在 PPS 项目中,选择产品状态(Choose Product Condition)会在许多场合下发生,在创建销售订单和创建询价单中选择产品状态都是必不可少的活动,所以把选择产品状态作为一个被包含的用例插人到Create Order和Create Enquiry 用例中,如果需要改动选择产品状态用例,则不用对每一个用例都做相应修改,这样就提高了用例模型的可维护性。