理解extendinclude 
要想找到真正的答案,理解清楚extend和include是非常重要的,这是关键。

(1)extend是扩展的意思,它的含义是当B用例是从A用例扩展而来的,那么就应该用箭头从B指向A,并注明extend。所谓扩展,就是对于A用例来说,并不一定要存在的,即就算把B用例去除,A用例依然可以运转下去。 
(2)include是包含的意思,它的含义是当B用例是被A用例包含的,那么就应该用箭头从A指向B,并注明include。所谓包含,就是对于A用例来说必须存在,即不能把B用例去除,否则A用例将无法运转。 
注意:从主动和被动方面,可以轻松记得箭头的指向,包含(include)必然是己方主动的,那箭头应该对着对方,扩展(extend)必然是他方主动的,那箭头就应该指向己方。

 

UML中扩展和泛化的区别 
     泛化表示类似于OO术语“继承”或“多态”。UML中的Use Case泛化过程是将不同Use Case之间的可合并部分抽象成独立的父Use Case,并将不可合并部分单独成各自的子Use Case;包含以及扩展过程与泛化过程类似,但三者对用例关系的优化侧重点是不同的。如下:
        泛化侧重表示子用例间的互斥性;
        ●包含侧重表示被包含用例对Actor提供服务的间接性;
        ●扩展侧重表示扩展用例的触发不定性;

详述如下:

     既然用例是系统提供服务的UML表述,那么服务这个过程在所有用例场景中是必然发生的,但发生按照发生条件可分为如下两种情况:
         ⒈无条件发生:肯定发生的;
         ⒉有条件发生:未必发生,发生与否取决于系统状态;

     因此,针对用例的三种关系结合系统状态考虑,泛化与包含用例属于无条件发生的用例,而扩展属于有条件发生的用例。进一步,用例的存在是为Actor提供服务,但用例提供服务的方式可分为间接和直接两种,依据于此,泛化中的子用例提供的是直接服务,而包含中的被包含用例提供的是间接服务。同样,扩展用例提供的也是直接服务,但扩展用例的发生是有条件的

         另外一点需要提及的是:泛化中的子用例和扩展中的扩展用例均可以作为基本用例事件的备选择流而存在。

posted on 2012-07-03 10:30  Miko2012  阅读(2742)  评论(0编辑  收藏  举报