UML之擴展用例

UML用例建模面向業務實現或者系統功能,每一個用例實現一個完整的業務或者功能。而一個完整的用例也可能有一些不是必需的附加功能,或者在該用例已經實現后需要添加一些新功能,此時可以通過UML提供的擴展用例機制描述類似這樣的場景。

例如對于銀行儲蓄業務,最基本也是最核心的用例便是“取錢”與“存錢”,當業務辦理完成后,通常儲戶還可以對當前服務進行評價,對服務進行評價不是必須的環節,它是這兩個用例的可選活動,不進行評價并不影響用例“取錢”和“存錢”的目標實現。對服務進行評價這個活動可以單獨建模為用例“評價服務”。用例“評價服務”不能單獨存在,它必須依附于用例“取錢”與“存錢”,它們之間通過由用例“評價服務”指向用例“取錢”和“存錢”的虛線箭頭連接,并且在虛線上標示“?extend?”,表明用例“評價服務”是一個擴展用例,它擴展于基本用例“取錢”和“存錢”,如圖 1所示。

?圖 1?擴展用例描述方法

在圖 1中,可以看到基本用例“取錢”和“存錢”中還展示了“擴展點(extension points)”,這是構建擴展用例的一個可選項,即對一個基本用例進行擴展時可以在基本用例中標明擴展點,所謂擴展點就是基本用例調用擴展用例的位置,可以看作是基本用例中某一點的一個分支。

從基本用例的視角出發,擴展用例是可選的,但在什么樣的條件下會選擇執行擴展用例呢?如果擴展用例的名稱本身不足以表明執行條件,那么就需要在建模時通過為擴展關系指定約束的方式指明擴展用例的執行條件。例如對于上例,擴展用例“評價服務”執行的條件是“儲戶在服務完成后選擇對服務進行評價”,該條件可以通過為擴展關系(即帶?extend?標示的虛線箭頭)添加注釋的方式進行說明,如圖 2所示。在通常情況下,擴展用例觸發的條件可能是基本用例狀態的改變。

?圖 2?為擴展關系添加約束條件

理想情況下擴展用例用于擴展與基本用例有關聯的那些非關鍵的活動,但在實際建模活動中,擴展用例也經常用來描述一個活動流程中不同的分支。例如,在某個模型中有“付款”這個用例,完全基于面向對象思想建模應當使用泛化關系建立各用例之間的關系(詳見《泛化用例》),如圖 3所示。

?圖 3?使用泛化建模

在實際建模活動中,有可能最初的模型由于建模時間較早或其他什么原因,“付款”的場景只有使用“現金支付”一種途徑,因而在建模時僅構建用例“付款”(或者“現金支付”),且該用例實現使用現金付款的流程。而后繼在系統升級改造時,要求支持刷卡和掃碼支付,此時多數建模者會選擇通過擴展原有用例的方式來實現功能擴展與升級,如圖 4所示。

圖 4?擴展取代泛化建模?

?在上圖中,用例“刷卡支付”和“掃碼支付”依然建模為抽象用例(通過使用斜體的用例名稱表示),并由其他具體用例實現,這當然是正確的建模方式。但是假如很不幸,最初的模型其實經歷了兩次升級,第一次升級的時點國內還沒有普及信用卡,大家只有借記卡,同時掃碼支付也只有支付寶提供支付,因而此次升級的任務是將僅支持現金付款升級為支持“刷借記卡支付”和“掃支付寶支付”,并且建模者沒有預料到信用卡和其他支持掃碼支付應用的出現,因而在此次升級中直接使用擴展用例進行升級;而第二次升級時,則要進一步支持“刷信用卡支付”和“掃微信支付”,基于第一次升級的選擇,這一次繼續使用擴展用例或許不算有錯。升級完成的用例圖如圖 5所示。

?圖 5?多級擴展

圖 5展示的用例圖也表明用例之間的擴展關系可以存在多個級別,即一個擴展用例本身也可能存在它的擴展用例。此外,一個基本用例可以有多個擴展用例(如圖 5中的用例“付款”),一個擴展用例也可以被多個基本用例擴展。

用例之間的擴展關系與包含關系有同有異,簡單總結如下:

相同點——兩者都使用帶箭頭的虛線表示;基本用例調用兩者時,都沒有類似函數調用的參數與返回值,而更類似“復制-粘貼”;兩者與基本用例之間的關系都是多對多的。

相異點——表示擴展關系的帶箭頭虛線由擴展用例指向基本用例,而包含關系則由基本用例指向被包含用例;擴展用例是基本用例的可選部分,包含用例是基本用例的必選部分。

UML – 光頭顏說IThttps://gtyan.com/archives/category/uml?

UML之包含用例-CSDN博客

UML之泛化用例-CSDN博客

UML之參與者(Actor)_uml actor-CSDN博客

UML之發現用例-CSDN博客

UML之泛化、特化和繼承_uml中泛化-CSDN博客

UML之組合與聚合_uml聚合和組合-CSDN博客

UML之關聯_uml圖關聯-CSDN博客

UML之集合類型-CSDN博客

UML之屬性與參數的多重性_類圖多重性標注-CSDN博客

UML之模型、包及包的版型(構造型)_包體系結構-CSDN博客

UML之包的導入與訪問_uml的包使用-CSDN博客

UML之包與包圖_uml包圖實例-CSDN博客

UML之類型_bolck definition diagram 中的signal,value type,enume-CSDN博客

UML之修飾符_圖框架標題類型之謬-CSDN博客

UML之類與類圖-CSDN博客

UML之圖框架標題類型之謬_框架標題是什么-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76312.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76312.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76312.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大數據學習(95)-謂詞下推

🍋🍋大數據學習🍋🍋 🔥系列專欄: 👑哲學語錄: 用力所能及,改變世界。 💖如果覺得博主的文章還不錯的話,請點贊👍收藏??留言📝支持一…

行式存儲(Row-based Storage)與列式存儲(Column-based Storage)詳細對比

行式存儲(Row-based Storage)與列式存儲(Column-based Storage)詳細對比 1. 數據組織方式 類型行式存儲列式存儲存儲結構按行存儲數據,每條記錄的所有字段(列)連續存放(如一條訂單的…

Seg-Zero:通過認知強化實現的推理鏈引導分割

文章目錄 速覽摘要1. 引言2. 相關工作2.1. 大模型中的推理能力2.2. 結合推理的語義分割2.3. 用于分割任務的 MLLMs 3. 方法3.1. 流程建模(Pipeline Formulation)3.2. Seg-Zero 模型3.3. 獎勵函數(Reward Functions)3.4. 訓練&…

win server2022 限制共享文件夾d

點擊配額管理中的配額 然后創建配額 導入要配額的文件即可 然后確定即可

Docker容器部署Java項目(詳細版)

🤟致敬讀者 🟩感謝閱讀🟦笑口常開🟪生日快樂?早點睡覺 📘博主相關 🟧博主信息🟨博客首頁🟫專欄推薦🟥活動信息 文章目錄 Docker容器部署Java項目1. 環境及準備2. 項目…

C語言深度解析:從零到系統級開發的完整指南

一、C語言的核心特性與優勢 1. 高效性與直接硬件控制 C語言通過編譯為機器碼的特性,成為系統級開發的首選語言。例如,Linux內核通過C語言直接操作內存和硬件寄存器,實現高效進程調度。 關鍵點: malloc/free直接管理內存&#…

Pytorch實現之基于GAN+序列后向選擇的情緒識別增強方法

簡介 簡介:在WGAN-GP+CGAN的基礎上利用了序列后向選擇方法來挑選優質樣本補充到訓練集當中,豐富訓練數據集。 論文題目:基于生成對抗網絡的情緒識別數據增強方法 期刊:傳感技術學報 摘要:使用深度學習方法構建高準確率的情緒識別模型需要大量的情緒腦電數據。 生成對抗…

軟件工程面試題(十九)

1、十六進制的216轉換十進制是多少: 216是16進制,轉10進制: =2*16^2+1*16^1+6*16^0 =512+16+6 =536 2、Java中的XML解析方式: dom和jdom解析 Java中處理XML文檔的標準API有兩種,即XML的簡單API(SAX,Simple API for XML)和文檔對象模型(DOM,…

大模型AI Agent的工作原理與安全挑戰

大模型AI Agent的工作原理與安全挑戰 0x00 引言 智能體(AI Agent)作為大語言模型技術(LLM)的具體應用形式,突破了傳統語言模型僅限于文字輸入與輸出的局限性。其通過感知環境、規劃決策及執行行動的閉環機制&#xf…

膩子刮的遍數越多越好?刮的越厚墻面越平?

很多業主對刮膩子存在誤區,感覺膩子刮的越厚越好,遍數越多越好。同時認為膩子有找平的作用,感覺墻面不平,就是膩子刮的不行。 有一位業主給我留言,說家里的膩子刮了兩遍,然后油工師傅就開始打磨刷漆了&…

「深入解析 Chromium Message Pump:消息循環的核心驅動」

MessagePump 是 Chromium 中 消息循環(Message Loop) 的核心組件之一,負責在不同平臺上管理和分發消息、事件,并協調任務調度。 在瀏覽器這樣的 GUI 應用中,事件循環(Event Loop)是非常重要的&…

3d pose 指標和數據集

目錄 3D姿態估計、3維重建指標: 數據集 EHF數據集 SMPL-X 3D姿態估計、3維重建指標: MVE、PMVE 和 p-MPJPE 都是用于評估3D姿態估計、三維重建等任務中預測結果與真實數據之間誤差的指標。 MVE (Mean Vertex Error):是指模型重建過程中每個頂點的預測位置與真實位置之間…

大智慧大數據面試題及參考答案

目錄 MySQL 的事務隔離級別是什么? MySQL 的覆蓋索引是怎樣的? MySQL 常用的存儲引擎有哪些,它們之間的區別是什么? 在 MySQL 中,如果讀取很大的數據集,同時進行一邊 select 一邊寫入操作,結果會怎樣? 當 ES 出現分詞錯誤的情況時,應該如何處理? Kafka 如何保證…

微服務的簡單認識

目錄 一、微服務架構簡介 二、微服務架構風格和分布式系統架構的關系 三、微服務組成 一、微服務架構簡介 微服務是一種構建分布式系統的架構風格,它將一個大型的應用程序拆分成多個小型的、獨立部署的服務單元,每個服務單元都專注于特定的業務功能,并通過輕量級的通信機…

Spring的 @Conditional @ConditionalOnProperty 注解 筆記250330

Spring的 Conditional ConditionalOnProperty 注解 Spring 的 Conditional 與 ConditionalOnProperty 注解詳解 在 Spring 框架中,Conditional 和 ConditionalOnProperty 是用于動態控制 Bean 注冊的重要注解。雖然它們都服務于條件化配置,但定位和使用…

電路學習——MOS柵極驅動電阻取值(2025.03.30)

參考鏈接1: 驅動芯片的驅動電流的選型和計算 參考鏈接2: NMOS柵極驅動電阻Rg阻值和功率的計算,NMOS柵極驅動電阻Rg的作用,如何防止NMOS誤開通 單片機直接驅動NMOS的方法 RLC諧振電路 智能車BLDC 在此感謝各位前輩大佬的總結,寫這個只是為了記…

mysql JSON_ARRAYAGG聯合JSON_OBJECT使用查詢整合(數組對象)字段

父表數據(表名:class) idname1一年級2二年級3三年級 子表數據(表名:students) idnameclassId11張三112李四113小明3 關聯子表sql查詢(推薦使用方法一) 方法一 (使用IFNull判斷子…

張量-pytroch基礎(2)

張量-pytroch網站-筆記 張量是一種特殊的數據結構,跟數組(array)和矩陣(matrix)非常相似。 張量和 NumPy 中的 ndarray 很像,不過張量可以在 GPU 或其他硬件加速器上運行。 事實上,張量和 Nu…

marked庫(高效將 Markdown 轉換為 HTML 的利器)

文章目錄 前言使用基本使用自定義渲染器例子 代碼高亮 前言 最近嘗試了一下通過星火大模型將ai引入到項目上,但是ai返回的數據可以顯而易見的發現是markedown語法的,那么就需要一個工具,將類似這種的格式轉換為markdown格式 Marked 是一個用…

調用deepseek大模型時智能嵌入函數

DeepSeek-R1 當前炙手可熱,以其強大的自然語言處理和推理能力而廣受贊譽。饒是如此,卻并不原生支持函數調用(function_call),這是開發過程中不可或缺的一部分。雖有第三方調校的模型支持,然終非官方自帶,還需假以時日。本文雖然簡短,應該是全網寫得最通透的了吧。 …