天天看點

UML用例圖

用例圖主要用來圖示化系統的主事件流程,它主要用來描述客戶的需求,即使用者希望系統具備的完成一定功能的動作,通俗地了解用例就是軟體的功能子產品,是以是設計系統分析階段的起點,設計人員根據客戶的需求來建立和解釋用例圖,用來描述軟體應具備哪些功能子產品以及這些子產品之間的調用關系,用例圖包含了用例和參與者,用例之間用關聯來連接配接以求把系統的整個結構和功能反映給非技術人員(通常是軟體的使用者),對應的是軟體的結構和功能分解。

用例是從系統外部可見的行為,是系統為某一個或幾個參與者(actor)提供的一段完整的服務。從原則上來講,用例之間都是獨立、并列的,它們之間并不存在着包含從屬關系。但是為了展現一些用例之間的業務關系,提高可維護性和一緻性,用例之間可以抽象出包含(include)、擴充(extend)和泛 (generalization)幾種關系。

共性:都是從現有的用例中抽取出公共的那部分資訊,作為一個單獨的用例,然後通後過不同的方法來重用這個公共的用例,以減少模型維護的工作量。

1、包含(include)

    包含關系:使用包含(inclusion)用例來封裝一組跨越多個用例的相似動作(行為片斷),以便多個基(base)用例複用。基用例控制與包含用例的關系,以及被包含用例的事件流是否會插入到基用例的事件流中。基用例可以依賴包含用例執行的結果,但是雙方都不能通路對方的屬性。

   包含關系對典型的應用就是複用,也就是定義中說的情景。但是有時當某用例的事件流過于複雜時,為了簡化用例的描述,我們也可以把某一段事件流抽象成為一個被包含的用例;相反,用例劃分太細時,也可以抽象出一個基用例,來包含這些細顆粒的用例。這種情況類似于在過程設計語言中,将程式的某一段算法封裝成一個子過程,然後再從主程式中調用這一子過程。 

   例如:業務中,總是存在着維護某某資訊的功能,如果将它作為一個用例,那建立、編輯以及修改都要在用例詳述中描述,過于複雜;如果分成建立用例、編輯用例和删除用例,則劃分太細。這時包含關系可以用來理清關系。

UML用例圖

2、擴充(extend)

擴充關系:将基用例中一段相對獨立并且可選的動作,用擴充(extension)用例加以封裝,再讓它從基用例中聲明的擴充點(extension point)上進行擴充,進而使基用例行為更簡練和目标更集中。擴充用例為基用例添加新的行為。擴充用例可以通路基用例的屬性,是以它能根據基用例中擴充點的目前狀态來判斷是否執行自己。但是擴充用例對基用例不可見。

對于一個擴充用例,可以在基用例上有幾個擴充點。   

例如,系統中允許使用者對查詢的結果進行導出、列印。對于查詢而言,能不能導出、列印查詢都是一樣的,導出、列印是不可見的。導入、列印和查詢相對獨立,而且為查詢添加了新行為。是以可以采用擴充關系來描述:

UML用例圖

4、泛化(generalization)

泛化關系:子用例和父用例相似,但表現出更特别的行為;子用例将繼承父用例的所有結構、行為和關系。子用例可以使用父用例的一段行為,也可以重載它。父用例通常是抽象的。在實際應用中很少使用泛化關系,子用例中的特殊行為都可以作為父用例中的備選流存在。

例如,業務中可能存在許多需要部門上司審批的事情,但是上司審批的流程是很相似的,這時可以做成泛化關系表示:

UML用例圖

    上面是我參考的一篇文章,覺得将三種關系的差別講得很清晰,在此基礎上結合自己的系統,對項目(線上購物系統)的用例做了整體的描繪。

    *****************************************************************

    (1)系統整體用例圖

UML用例圖

    (商品用例圖)

UML用例圖

   (購買資訊用例)

UML用例圖

    (使用者資料用例)

UML用例圖

按照先整體用例,後子系統用例來進行描繪的,歡迎大家提出好的建議!

轉:uml中擴充和泛化的差別

         泛化表示類似于oo術語“繼承”或“多态”。uml中的use case泛化過程是将不同use case之間的可合并部分抽象成獨立的父use case,并将不可合并部分單獨成各自的子use case;包含以及擴充過程與泛化過程類似,但三者對用例關系的優化側重點是不同的。如下:

          ●泛化側重表示子用例間的互斥性;

          ●包含側重表示被包含用例對actor提供服務的間接性;

          ●擴充側重表示擴充用例的觸發不定性;詳述如下:

        既然用例是系統提供服務的uml表述,那麼服務這個過程在所有用例場景中是必然發生的,但發生按照發生條件可分為如下兩種情況:

         ⒈無條件發生:肯定發生的;

         ⒉有條件發生:未必發生,發生與否取決于系統狀态;

         是以,針對用例的三種關系結合系統狀态考慮,泛化與包含用例屬于無條件發生的用例,而擴充屬于有條件發生的用例。進一步,用例的存在是為actor提供服務,但用例提供服務的方式可分為間接和直接兩種,依據于此,泛化中的子用例提供的是直接服務,而包含中的被包含用例提供的是間接服務。同樣,擴充用例提供的也是直接服務,但擴充用例的發生是有條件的。

         另外一點需要提及的是:泛化中的子用例和擴充中的擴充用例均可以作為基本用例事件的備選擇流而存在。

繼續閱讀