用例圖主要用來圖示化系統(tǒng)的主事件流程,,它主要用來描述客戶的需求,,即用戶希望系統(tǒng)具備的完成一定功能的動作,,通俗地理解用例就是軟件的功能模塊,所以是設(shè)計系統(tǒng)分析階段的起點,,設(shè)計人員根據(jù)客戶的需求來創(chuàng)建和解釋用例圖,,用來描述軟件應(yīng)具備哪些功能模塊以及這些模塊之間的調(diào)用關(guān)系,用例圖包含了用例和參與者,,用例之間用關(guān)聯(lián)來連接以求把系統(tǒng)的整個結(jié)構(gòu)和功能反映給非技術(shù)人員(通常是軟件的用戶),,對應(yīng)的是軟件的結(jié)構(gòu)和功能分解。
用例是從系統(tǒng)外部可見的行為,,是系統(tǒng)為某一個或幾個參與者(Actor)提供的一段完整的服務(wù),。從原則上來講,,用例之間都是獨立,、并列的,它們之間并不存在著包含從屬關(guān)系,。但是為了體現(xiàn)一些用例之間的業(yè)務(wù)關(guān)系,,提高可維護性和一致性,用例之間可以抽象出包含(include),、擴展(extend)和泛(generalization)幾種關(guān)系,。 共性:都是從現(xiàn)有的用例中抽取出公共的那部分信息,作為一個單獨的用例,,然后通后過不同的方法來重用這個公共的用例,,以減少模型維護的工作量。
包含關(guān)系:使用包含(Inclusion)用例來封裝一組跨越多個用例的相似動作(行為片斷),,以便多個基(Base)用例復用?;美刂婆c包含用例的關(guān)系,,以及被包含用例的事件流是否會插入到基用例的事件流中?;美梢砸蕾嚢美龍?zhí)行的結(jié)果,,但是雙方都不能訪問對方的屬性。 例如:業(yè)務(wù)中,總是存在著維護某某信息的功能,,如果將它作為一個用例,,那新建、編輯以及修改都要在用例詳述中描述,,過于復雜,;如果分成新建用例、編輯用例和刪除用例,,則劃分太細,。這時包含關(guān)系可以用來理清關(guān)系。 2,、擴展(extend) 擴展關(guān)系:將基用例中一段相對獨立并且可選的動作,,用擴展(Extension)用例加以封裝,再讓它從基用例中聲明的擴展點(Extension Point)上進行擴展,,從而使基用例行為更簡練和目標更集中,。擴展用例為基用例添加新的行為。擴展用例可以訪問基用例的屬性,,因此它能根據(jù)基用例中擴展點的當前狀態(tài)來判斷是否執(zhí)行自己,。但是擴展用例對基用例不可見。 對于一個擴展用例,,可以在基用例上有幾個擴展點,。
泛化關(guān)系:子用例和父用例相似,但表現(xiàn)出更特別的行為,;子用例將繼承父用例的所有結(jié)構(gòu),、行為和關(guān)系,。子用例可以使用父用例的一段行為,也可以重載它,。父用例通常是抽象的,。在實際應(yīng)用中很少使用泛化關(guān)系,子用例中的特殊行為都可以作為父用例中的備選流存在,。 例如,,業(yè)務(wù)中可能存在許多需要部門領(lǐng)導審批的事情,但是領(lǐng)導審批的流程是很相似的,,這時可以做成泛化關(guān)系表示:
因此,,針對用例的三種關(guān)系結(jié)合系統(tǒng)狀態(tài)考慮,,泛化與包含用例屬于無條件發(fā)生的用例,而擴展屬于有條件發(fā)生的用例,。進一步,,用例的存在是為Actor提供服務(wù),但用例提供服務(wù)的方式可分為間接和直接兩種,,依據(jù)于此,,泛化中的子用例提供的是直接服務(wù),而包含中的被包含用例提供的是間接服務(wù),。同樣,,擴展用例提供的也是直接服務(wù),,但擴展用例的發(fā)生是有條件的。 另外一點需要提及的是:泛化中的子用例和擴展中的擴展用例均可以作為基本用例事件的備選擇流而存在,。 |
|
來自: miky > 《UML建?!?/a>