深入剖析UML用例圖關(guān)系中包含 擴(kuò)展和泛化之間的聯(lián)系
UML用例圖中包含(include)、擴(kuò)展(extend)和泛化(generalization)三種關(guān)系詳解
共性:都是從現(xiàn)有的用例中抽取出公共的那部分信息,作為一個單獨的用例,然后通后過不同的方法來重用這個公共的用例,以減少模型維護(hù)的工作量。
1、包含(include)
UML用例圖的包含關(guān)系:使用包含(Inclusion)用例來封裝一組跨越多個用例的相似動作(行為片斷),以便多個基(Base)用例復(fù)用?;美刂婆c包含用例的關(guān)系,以及被包含用例的事件流是否會插入到基用例的事件流中。基用例可以依賴包含用例執(zhí)行的結(jié)果,但是雙方都不能訪問對方的屬性。
UML用例圖包含關(guān)系對典型的應(yīng)用就是復(fù)用,也就是定義中說的情景。但是有時當(dāng)某用例的事件流過于復(fù)雜時,為了簡化用例的描述,我們也可以把某一段事件流抽象成為一個被包含的用例;相反,用例劃分太細(xì)時,也可以抽象出一個基用例,來包含這些細(xì)顆粒的用例。這種情況類似于在過程設(shè)計語言中,將程序的某一段算法封裝成一個子過程,然后再從主程序中調(diào)用這一子過程?!?br /> 例如:業(yè)務(wù)中,總是存在著維護(hù)某某信息的功能,如果將它作為一個用例,那新建、編輯以及修改都要在用例詳述中描述,過于復(fù)雜;如果分成新建用例、編輯用例和刪除用例,則劃分太細(xì)。這時包含關(guān)系可以用來理清關(guān)系。
2、擴(kuò)展(extend)
UML用例圖的擴(kuò)展關(guān)系:將基用例中一段相對獨立并且可選的動作,用擴(kuò)展(Extension)用例加以封裝,再讓它從基用例中聲明的擴(kuò)展點(ExtensionPoint)上進(jìn)行擴(kuò)展,從而使基用例行為更簡練和目標(biāo)更集中。擴(kuò)展用例為基用例添加新的行為。擴(kuò)展用例可以訪問基用例的屬性,因此它能根據(jù)基用例中擴(kuò)展點的當(dāng)前狀態(tài)來判斷是否執(zhí)行自己。但是擴(kuò)展用例對基用例不可見。
對于一個擴(kuò)展用例,可以在基用例上有幾個擴(kuò)展點。
例如,系統(tǒng)中允許用戶對查詢的結(jié)果進(jìn)行導(dǎo)出、打印。對于查詢而言,能不能導(dǎo)出、打印查詢都是一樣的,導(dǎo)出、打印是不可見的。導(dǎo)入、打印和查詢相對獨立,而且為查詢添加了新行為。因此可以采用擴(kuò)展關(guān)系來描述:
3、泛化(generalization)
UML用例圖的泛化關(guān)系:子用例和父用例相似,但表現(xiàn)出更特別的行為;子用例將繼承父用例的所有結(jié)構(gòu)、行為和關(guān)系。子用例可以使用父用例的一段行為,也可以重載它。父用例通常是抽象的。在實際應(yīng)用中很少使用泛化關(guān)系,子用例中的特殊行為都可以作為父用例中的備選流存在。
例如,業(yè)務(wù)中可能存在許多需要部門領(lǐng)導(dǎo)審批的事情,但是領(lǐng)導(dǎo)審批的流程是很相似的,這時可以做成泛化關(guān)系表示:
上面是我參考的一篇文章,覺得將三種關(guān)系的區(qū)別講得很清晰,在此基礎(chǔ)上結(jié)合自己的系統(tǒng),對項目(在線購物系統(tǒng))的用例做了整體的描繪。
【編輯推薦】