详解包含、扩展和泛化

时间:2024-03-14 22:14:17

这次我们分析一下用例图的画法,有人或许认为用例图很简单,但是如何让别人一眼就能明白你的用例图,如何让别人看到你的用例图的时候能够明白你所想的业务流程,这一点就比较困难了!

首先,我们假定一个业务,例如:开户和销户.那么我们如何来话用例图呢?

要求有如下的内容:

1,销户之前必须开户,这个要求怎么画?下面这种画法对吗?

详解包含、扩展和泛化

2,开户之后可以销户,可以不销户.这个要求怎么画,下面这种画法对吗?

详解包含、扩展和泛化

对于这两个要求,你会画成什么样的用例呢?在讨论上述两个要求的用例的画法之前,读者不妨事先画一下。

接下来,我们先讲解一下用例中的三种关系:包含、扩展和泛化

包含:使用包含(Inclusion)用例来封装一组跨越多个用例的相似动作(行为片断),以便多个基(Base)用例复用。

包含从字面上理解就是一种大的包含小的意思。实际上,这种字面上的理解就是包含关系的实质,怎么讲呢?就是说一个用例如果分为几个小的用例,这就是包含关系,从粒度的角度就是粗粒度和细粒度的关系。

如下图中的关系

详解包含、扩展和泛化

所以第一个要求中的开户和销户的关系所用的图中的include是错误的。那么如何来表示我们第一个要求中的用例呢?不要着急,我们先了解一下扩展,相信,你会有一个自己的答案。

扩展:将基用例中一段相对独立并且可选的动作,用扩展(Extension)用例加以封装,再让它从基用例中声明的扩展点(Extension Point)上进行扩展,从而使基用例行为更简练和目标更集中。

字面理解扩展就是一种放射,就是从一点到另一点的延伸,说的更明白一点就是一种用例的先后关系。

如下图中的关系:

详解包含、扩展和泛化

所以,我们的第二个要求所对应的图中的extend关系就是正确的。那么我们的第一个要怎么办的?其实我们第二个要求中的图所表示的关系就已经将两个要求都表示出来了!

泛化:子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。子用例可以使用父用例的一段行为,也可以重载它。

直白一点就是一个是抽象的用例,一个是具体的用例。

如下图中的关系:

详解包含、扩展和泛化

总结:

1,用例有大小之分用包含。

2,用例有先后之分用扩展。

3,用例有父子之分用泛化。

用例图是非常有用的一种图,如果图中的关系不明或关系错误,很有可能给开发人员和用户造成歧义。所以选择适当的关系就显的至关重要。