记得去年刚学UML的时候,写了一篇用例图的博客——《UML图—用例图》。
2011年5月的软考下午题,考到了用例图,突然感觉对用例图中的include和extend概念有些模糊,因此搬出来,与大家共同学习。
其实仔细思考后,这两者的概念还是很好理解的,顾名思义,include就是“包含”的意思,extend就是“扩展”的意思。
include
虽然include是包含的意思,但笔者认为,include在用例图中,主要体现的是“抽象”的思想。即当两个或多个用例存在相同的部分时,可以将这组动作抽出来作为一个独立的子用例,中的共同部分抽象出来。
因为子用例被抽象出来了,因此它与基用例都不是一个完整的用例,只有他们结合起来时才是一个完整的用例。
我们在做系统时经常会这样设计一个查询界面:
这个查询界面和删除、修改就是一个典型的extend(扩展)关系用例的例子,如果要执行修改、删除操作时,都必须先进行查询操作,因此可以把查询功能抽出来。它的用例可表示为:
(include使用带虚线头的箭头表示,箭头方向指向子用例)
extend
extend关系是对一个基用例的扩展,与include的区别就是, 具有extend关系的基用例是一个完整的用例,由它extend(扩展)而来的用例是在它基础之上的另一个功能(用例)。
extend关系中,基用例
同样也是上面这个查询界面:
这个查询和导入到Excel就是一个extend的关系,导出到Excel是在查询的基础上进行的,是查询的扩展。
include使用带虚线头的箭头表示,箭头方向指向基用例。
总结:
include关系中主要体现的是“抽象”的思想,基用例与子用例是不可分割的一个整体,必须同时执行。
extend关系主要指由一个用例可以扩展出另一个用例,即使没有子用例的参与,也可以完成一个完整的功能。