1. 程式人生 > >一次搞懂建模語言UML

一次搞懂建模語言UML

Unified Modeling Language (UML)又稱統一建模語言或標準建模語言,它是一個支援模型化和軟體系統開發的圖形化語言,為軟體開發的所有階段提供模型化和視覺化支援,包括由需求分析到規格,到構造和配置。

  • UML分類
    (1)靜態模型(系統結構): 用例圖、類圖、物件圖、構件圖、部署圖
    (2)動態模型(系統行為):狀態圖、活動圖、順序圖、協作圖
  • UML中有4種事務:
    (1)結構事務:名詞、靜態部分、物理元素。

  • (2)行為事務:動詞、動態部分、行為。

  • (3)分組事務:包。

  • (4)註釋事務:註解。

用例圖:

用例圖是指由參與者(Actor)、用例(Use Case),邊界以及它們之間的關係構成的用於描述系統功能的檢視。用例圖(User Case)是外部使用者(被稱為參與者)所能觀察到的系統功能的模型圖。用例圖是系統的藍圖,用於需求分析階段。用例圖呈現了一些參與者,一些用例,以及它們之間的關係,主要用於對系統、子系統或類的功能行為進行建模。

用例之間的關係
(1)包含 (include) 關係
父用例包含子用例,父用例執行,子用例必然被執行
當兩個或多個用例中共用一組相同的動作,這時可以將這組相同的動作抽出來作為一個獨立的子用例,供多個基用例所共享。因為子用例被抽出,基用例並非一個完整的用例,所以include關係中的基用例必須和子用例一起使用才夠完整,子用例也必然被執行。include關係在用例圖中使用帶箭頭的虛線表示(在線上標註<>),箭頭從基用例指向子用例。

(2)擴充套件(extend)關係
子用例擴充套件父用例,複用執行,子用例不一定執行
是對基用例的擴充套件,基用例是一個完整的用例,即使沒有子用例的參與,也可以完成一個完整的功能。 extend關係在用例圖中使用帶箭頭的虛線表示(在線上標註<>),箭頭從子用例指向基用例。

圖例:使用者如果如期還書,則還書業務就結束了,如果超期了,才會有罰款的業務,罰款不是必須,所以是擴充套件關係。

類圖

類圖(Class diagram)展現了一組物件、介面、協作和它們之間的關係。類圖是靜態檢視。
類圖中包括:
(1)類
(2)介面
(3)協作
(4)依賴、泛化和關聯關係

使用類圖的場景:
(1)對系統的靜態設計建模
(2)對簡單的協作建模
(3)對邏輯資料庫模式建模

類的分類:

(1) 實體類:實體類對應系統需求中的每個實體,它們通常需要儲存在永久儲存體中,一般使用資料庫表或檔案來記錄,實體類既包括儲存和傳遞資料的類,還包括操作資料的類。實體類來源於需求說明中的名詞,如學生、商品等。

(2) 控制類:控制類用於體現應用程式的執行邏輯,提供相應的業務操作,將控制類抽象出來可以降低介面和資料庫之間的耦合度。控制類用於對一個或幾個用例所特有的控制行為進行建模。控制物件(控制類的例項)通常控制其他物件,因此它們的行為具有協調性質。控制類將用例的特有行為進行封裝

(3) 邊界類:邊界類用於對外部使用者與系統之間的互動物件進行抽象,主要包括介面類,如對話方塊、視窗、選單等。

類圖中的關係:

  • 依賴(Dependency)


是一種使用的關係, 即一個類的實現需要另一個類的協助, 所以要儘量不使用雙向的互相依賴。可以簡單的理解,就是一個類A使用到了另一個類B,而這種使用關係是具有偶然性的、臨時性的、非常弱的,但是B類的變化會影響到A;比如某人要過河,需要借用一條船,此時人與船之間的關係就是依賴。在UML中,依賴關係用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。

  • 泛化(Generalization)

也就是繼承關係的反關係,用於描述父類與子類之間的關係,父類又稱作基類或超類,子類又稱作派生類。在UML中,泛化關係用帶空心三角形的直線來表示。
子類繼承自父類,父類是子類的泛化。

  • 關聯(Association)

是一種擁有的關係, 它使一個類知道另一個類的屬性和方法;如:老師與學生,丈夫與妻子。
關聯是類之間的結構關係,它描述了一組鏈,鏈是物件之間的連線。兩個類之間可以有多個由不同角色標識的關聯。關聯可以是雙向的,也可以是單向的。雙向的關聯可以有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。

(1) 雙向關聯。預設情況下,關聯是雙向的。

(2) 單向關聯
(3)自關聯
(4)多重關聯

  • 聚合(Aggregation)


    聚合是關聯關係的一種特例,他體現的是整體與部分、擁有的關係,即has-a的關係,此時整體與部分之間是可分離的,他們可以具有各自的生命週期,部分可以屬於多個整體物件,也可以為多個整體物件共享在UML中,聚合關係用帶空心菱形的直線表示。例如:汽車發動機(Engine)是汽車(Car)的組成部分,但是汽車發動機可以獨立存在,因此,汽車和發動機是聚合關係,如圖所示

  • 組合(Composition)

組合也是關聯關係的一種特例,他體現的是一種contains-a的關係,這種關係比聚合更強,也稱為強聚合;他同樣體現整體與部分間的關係,但此時整體與部分是不可分的,整體的生命週期結束也就意味著部分的生命週期結束。在UML中,組合關係用帶實心菱形的直線表示。

  • 實現(Realization)

是用來規定介面和實現介面的類或者構建結構的關係,介面是操作的集合,而這些操作就用於規定類或者構建的一種服務。
介面之間也可以有與類之間關係類似的繼承關係和依賴關係,但是介面和類之間還存在一種實現關係(Realization),在這種關係中,類實現了介面,類中的操作實現了介面中所 宣告的操作。在UML中,類與介面之間的實現關係用帶空心三角形的虛線來表示。例如:定義了一個交通工具介面Vehicle,包含一個抽象操作move(),在類Ship和類Car中都實現了該move()操作,不過具體的實現細節將會不一樣,如圖所示:

物件圖

物件圖(ObjectDiagram) 展現了某一時刻一組物件以及它們之間的關係,描述了在類圖中所建立的事物的例項的靜態快照。

互動圖

互動圖表現為序列圖、通訊圖、互動概覽圖和計時圖。用於動態建模。

序列圖

序列圖強調訊息時間順序的互動

通訊圖

通訊圖(協作圖)強調接收和傳送資訊的物件的結構組織的互動
物件:圖中的矩形元素即為物件,其中冒號前面部分為物件名,後面為類名,表示類的一個例項。
連結:用兩個物件之間的單一線條表示,用來在通訊圖中關聯物件,目的是讓訊息在不同系統物件之間傳遞。可以理解連結是公路,訊息是車。
訊息:通訊圖中物件之間通訊的方式。


互動概覽圖

互動概覽圖強調控制流的互動圖

計時圖

計時圖適合嵌入式系統建模的互動圖

狀態圖

用來描述一個特定的物件所有可能的狀態,以及由於各種事件的發生而引起的狀態之間的轉移和變化。用於對系統的動態方面建模。

活動圖

將程序或其他計算的結構展示為計算內部一步步的控制流和資料流,主要用來描述系統的動態檢視。活動圖在本質上是一種流程圖。活動圖著重表現從一個活動到另一個活動的控制流,是內部處理驅動的流程。
活動圖主要描述行為的動作,
狀態圖主要描述行為的結果。


構件圖

使用構件圖的思想是複用。就像是我們蓋房子,當房子的大體框架建好之後,剩下的門和窗戶傢俱之類的直接拿來安裝上即可,不需要再從新制作,直接拿來複用的思想。這些門和窗戶就相當於一個個的構件。
構件有一下幾種型別:
(1)部署構件:dll檔案、exe檔案、com+物件、CORBA物件、EJB、動態Web頁和資料庫表等。
(2)工作產品構件:原始碼檔案、資料檔案等
(3)執行構件:系統執行後得到的構件。

部署圖

表示系統中軟體和硬體的物理架構。
從部署圖中,可以瞭解到軟體和硬體元件之間的物理關係以及處理節點的元件分佈情況。使用部署圖可以顯示執行時系統的結構,同時還傳達構成應用程式的硬體和軟體元素的配置和部署方式。

包圖

在 UML 中用類似於資料夾的符號表示的模型元素的組合。包圖是一種維護和描述系統總體結構的模型的重要建模工具,通過對包中各個包以及包之間關係的描述,展現出系統的模組與模組之間的依賴關係。
包圖的作用:包圖可以描述需求,設計的高階概況;包圖通過合理規劃自身功能反應系統的高層架構,在邏輯上將系統進行模組化分解;包圖最終是組織原始碼的方式。
一個包圖可以由任何一種UML圖組成,通常是UML用例圖或是UML類圖。
包被描述成資料夾,可以用於UML任何一種的圖上。
包圖只是把某些類放在一個包中,因此可以看做是類圖的一種。

相關推薦

建模語言UML

Unified Modeling Language (UML)又稱統一建模語言或標準建模語言,它是一個支援模型化和軟體系統開發的圖形化語言,為軟體開發的所有階段提供模型化和視覺化支援,包括由需求分析到規格,到構造和配置。 UML分類 (1)靜態模型(系統結構): 用例圖、類圖、物件圖、構件圖、部署圖 (2)

C語言回撥函式

什麼是回撥函式我們先來看看百度百科是如何定義回撥函式的:回撥函式就是一個通過函式指標呼叫的函式。如果你把函式的指標(地址)作為引數傳遞給另一個函式,當這個指標被用來呼叫其所指向的函式時,我們就說這是回撥函式。回撥函式不是由該函式的實現方直接呼叫,而是在特定的事件或條件發生時由

全排列——LeetCode四道Permutations問題詳解

  LeetCode中與Permutations相關的共有四題:   31. Next Permutation   46. Permutations   47. Permutations II   60. Permutation Sequence   

SpringMVC原理

@[toc] # 前言 前面幾篇文章,學習了Spring IOC、Bean例項化過程、AOP、事務的原始碼和設計思想,瞭解了Spring的整體執行流程,但如果是web開發,那麼必不可少的還有Spring MVC,本篇主要分析在請求呼叫過程中SpringMVC的實現原理,通過本篇要搞懂它是怎麼解決請求、引數、返

Spring Web零xml配置原理以及父子容器關係

# 前言 在使用Spring和SpringMVC的老版本進行開發時,我們需要配置很多的xml檔案,非常的繁瑣,總是讓使用者自行選擇配置也是非常不好的。基於**約定大於配置**的規定,Spring提供了很多註解幫助我們簡化了大量的xml配置;但是在使用SpringMVC時,我們還會使用到**WEB-INF/we

SpringBoot核心原理(自動配置、事件驅動、Condition)

@[TOC] # 前言 SpringBoot是Spring的包裝,通過自動配置使得SpringBoot可以做到開箱即用,上手成本非常低,但是學習其實現原理的成本大大增加,需要先了解熟悉Spring原理。如果還不清楚Spring原理的,可以先檢視博主之前的文章,本篇主要分析SpringBoot的啟動、自動配置、

Spring代理建立及AOP鏈式呼叫過程

@[toc] # 前言 AOP,也就是面向切面程式設計,它可以將公共的程式碼抽離出來,動態的織入到目標類、目標方法中,大大提高我們程式設計的效率,也使程式變得更加優雅。如事務、操作日誌等都可以使用AOP實現。這種織入可以是**在執行期動態生成代理物件**實現,也可以在**編譯期**、**類載入時期**靜態織入

「詞嵌入」在自然語言處理中扮演什麼角色?Word Embeddings的背後原理

原文來源:DATASCIENCE 作者:Ruslana Dalinina 「機器人圈」編譯:嗯~阿童木呀、多啦A亮 「機器人圈」正式更名為「雷克世界」,後臺回覆「雷克世界」檢視更多詳

Tensorflow實現Mask R-CNN實例分割通用框架,檢測,分割和特征點定位定(多圖)

優點 設計 orf 時間 rcnn 超越 rain 沒有 add Mask R-CNN實例分割通用框架,檢測,分割和特征點定位一次搞定(多圖) 導語:Mask R-CNN是Faster R-CNN的擴展形式,能夠有效地檢測圖像中的目標,同時還能為每個實例生成一個

各種 Docker 網絡 - 每天5分鐘玩轉 Docker 容器技術(72)

docker 教程 容器 前面各小節我們先後學習了 Docker Overaly,Macvaln,Flannel,Weave 和 Calico 跨主機網絡方案。目前這個領域是百家爭鳴,而且還有新的方案不斷湧現。本節將從不同維度比較各種網絡方案,大家在選擇的時候可以參考。CloudMan 的建議是:

深度學習--李宏毅教程分享

最好 的語音 電機 存在 aabb 工程學 bad 成功 並不是 原標題:【286頁幹貨】一天搞懂深度學習(臺灣資料科學年會課程) 本文是2016 臺灣資料科學年會前導課程“一天搞懂深度學習”的全部講義PPT(共268頁),由臺灣大學電機工程學助理教授李宏毅

分鐘 JavaScript this 指向問題

www ava tro ref 函數定義 htm 所在 就是 一個 關於Javascript的this指向問題,網絡上有很多分析文章,寫的很好,比如這裏和這裏 我這裏做一個簡單的總結。 箭頭函數的 this 箭頭函數內的this指向外層函數定義時所在的作用域。如果沒有外層函

Java 線程中斷

回復 代碼 信號 過程 執行 except 實例 二維 微信公眾 在之前的一文《如何"優雅"地終止一個線程》中詳細說明了 stop 終止線程的壞處及如何優雅地終止線程,那麽還有別的可以終止線程的方法嗎?答案是肯定的,它就是我們今天要分享的——線程中斷。 下面的這斷代碼大家應

資料結構與演算法隨筆之------二叉樹的遍歷(二叉樹的四種遍歷)

二叉樹的遍歷 二叉樹的遍歷(traversing binary tree)是指從根結點出發,按照某種次序依次訪問二叉樹中所有的結點,使得每個結點被訪問依次且僅被訪問一次。 遍歷分為四種,前序遍歷,中序遍歷,後序遍歷及層序遍歷 前序 中

k近鄰(k-NN)演算法(

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

leetcode 136. 只出現的數字 C語言

給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。 說明: 你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎? 示例 1: 輸入: [2,2,1] 輸出: 1 示例 2: 輸入: [4,1,2,1

:詞法作用域、動態作用域、回撥函式、閉包

不管什麼語言,我們總要學習作用域(或生命週期)的概念,比如常見的稱呼:全域性變數、包變數、模組變數、本地變數、區域性變數等等。不管如何稱呼這些作用域的範圍,實現它們的目的都一樣: (1)為了避免名稱衝突; (2)為了限定變數的生命週期(本文以變數名說事,其它的名稱在規則上是一樣的)

Python裝飾器是款神奇的神器!你知道怎麼用嗎?它!

    進群:548377875  即可獲取小編精心準備的教程以及大量的PDF呢! 1.引子 #功能函式 def add(x,y): return x+y #裝飾函式 def logger(fn): print('frist') x =

Redis

1什麼是Redis? Redis 是一個基於記憶體的高效能key-value資料庫。 (有空再補充,有理解錯誤或不足歡迎指正) 2Reids有哪些特點? Redis本質上是一個Key-Value型別的記憶體資料庫,很像memcached,整個資料庫統統載入在記憶體當中進行操作,

乾貨 | 分鐘區塊鏈原理

本文轉載自:陳長生 百家號03-2614:06 關於區塊鏈這個新興的領域,我們對其中的重要概念,儘可能從多個維度為你解讀。下面這些是我們整理的其中一部分概念,接下來我們還會為你陸續更新。 下面這些是關於區塊鏈原理的概念。 01.區塊鏈 【維基百科】 區塊鏈(英語:blockchain 或 block