上面一篇博文中我们介绍了用例图,那么我们这里再解释一下用例图里面的关系。用例的关系主要有泛化(generalization)、扩展(extend)和包含(include).
泛化关系是一种继承关系,子用例会继承父用例的所有行为、关系和通信关系,也就是说在任何使用父用例的地方都可以用子用例来代替。泛化关系在用例图中使用空心的箭头表示,箭头方向从子用例指向父用例。
扩展关系是对基用例的扩展,基用例是一个完整的用例,即使没有子用例的参与,也可以完成一个完整的功能。扩展的基用例中将存在一个扩展点,只有当扩展点被激活的时候,子用例才会被执行。扩展关系在用例图中使用带箭头的虚线表示,通常在线上标注<<extend>>,箭头从子用例指向基用例。
包含关系是当两个或多个用例中公用一组相同的动作,这时可以将这组相同的动作抽出来作为一个独立的子用例,它可以被多个基用例共享。如果子用例被抽出,那么基用例就不是一个完整的用例,因此包含关系中的基用例和子用例一起使用才够完整,子用例也必然被执行。包含关系在用例图中使用带箭头的虚线表示,在线上标注<<include>>,箭头从基用例指向子用例。
我感觉比较容易混淆的就是泛化和扩展。繁华类似于OO术语中的“继承"或者"多态",在UML中的Use Case的泛化过程是将不同的Use Case之间的可合并部分抽象成独立的父Use Case,并且将不可合并的部分单独成各自的子Use Case。
泛化与扩展的主要不同之处在于:泛化侧重表示子用例间的互斥性,而扩展则侧重表示扩展用例的触发不定性。
泛化与扩展的相同之处在于:泛化中的子用例和扩展中的扩展用例都可以作为基本用例事件的备选择流而存在。
时间: 2024-11-07 12:47:44