《UML 建模》學習筆記

最近看了 《UML 建模分析與設計》 這本大學課程關於uml的介紹和解釋,學到了很多,這裏記錄下來,加深記憶。

UML 作用

  uml是一種建模語言,提供了多種可視化的描述模型元素,可以直觀、準確的反映模型所代表的問題和內容,爲軟件開發階段提供了模型化和可視化建模支持。包含需求分析、規約、構造、和配置。現在已經被工業界以及學術界廣泛接受的標準建模語言。uml 有自己的官方網站,OMG ,到現在已經有幾個版本了。目前主要的是uml 2.0 .

   在軟件開發中,編碼行爲不是最重要的工作,前面的設計、文檔纔是更加體現一個人的基本功力,展現你的厲害之處。在我看來,編碼是一個翻譯行爲,把產品經理整理的需求翻譯爲code,讓計算機執行。有些碼農經常會抱怨產品需求不清晰,老是不全面,編碼進行不下去;注意,需求不清晰的問題關鍵就是uml的建模工作沒有做好,導致下面進行不下去;所以說,文檔重要,非常重要;有時候比代碼更加重要;一個工程交付件不僅有代碼,還要有各種其他的文檔說明和配置;往往這些文檔是更加重要,因爲它比代碼更具有交流意義;便捷。這也是我爲什麼要學習uml 這本課程的原因,尤其是對非科班出身的,希望讀者們也能自學。最好對着大學教材,這是最好的學習方法;

uml 簡介

uml 是一種對軟件進行描述、規約、建模的語言,有如下特點:

  • 可視化
  • 規約
  • 構造
  • 文檔化
    其運用領域非常廣闊,機械系統、企業機構、業務流程等。

基本構造

事物、關係和模型圖 是組成uml 的構造塊
在這裏插入圖片描述

uml 事物

事物是指模型中用到的基本元素,有結構事物、行爲事物、分組事物和註釋事物。然後在結合關係,就構成了模型。

比如說:結構事物通常是模型的靜態組成部分,有類、接口、用例等等;行爲事物包含交付、狀態機、活動;註釋事物就是註釋文檔。

關係

uml 關係可以分爲四種:

  • 依賴 :類之間的使用關係;常常是主謂關係,就是一個bean 執行了某個動作aciton,形成了一個主謂關係,這種情況就是很常見,比如人喫飯,人是一個類,飯是一個類,那人和飯之間的關係就是一個依賴關係;符號爲:----- + 箭頭
  • 關聯 :對象之間的結構關係;比如聚合、組合,描述整體和部分的關係;常常用於實體類之間的描述;書和圖書館就是聚合關係或者組合關係,很多書組成了圖書館;還有播放窗口和播放界面,一個播放界面window可能有一個或多個窗口cell組成;其符合爲:(實體線)—— + 實心菱形;
  • 泛化(繼承extend):按照java的類的概念就好理解了,其符號爲 —— + 向右的三角形 ▲
  • 實現(implement): 按照java 類的概念理解,其符號爲 ---- + 向右的三角形 ▲

模型圖

模型圖就是我們重點要說的部分,模型圖分爲結構圖和行爲圖:
在這裏插入圖片描述
對於結構圖,常用的圖有類圖、包圖、構件圖 ;行爲圖有:活動圖、狀態圖、順序圖、用例圖四種。

用例圖

use case diagram 用例圖 描述系統爲用戶提供的功能,但不涉及功能的具體實現細節。用於描述系統的需求,可以針對特定的維度去劃分用例;

組成部分

一個系統的用例圖 system ,有參與者 actor ,其描述的功能use case和用戶搭配起來就是一個用例 ;我們可以通過角色去劃分參與者,確定功能,在組合爲用例;

示意圖

在這裏插入圖片描述
student 爲參與者 actor ,相應的功能有 login 、query course/personal info 等等。在這個學生網絡選課系統中,以學生爲視角,有這樣一個系統組成。同樣的,還可以管理員的角色中出發來去看待:

在這裏插入圖片描述

如何構建用例圖

軟件開發中,採用“用例驅動、以架構爲中心,迭代增量開發” 開發模式,我們一般按照下面的步驟來:

  1. 劃分系統的邏輯邊界
  2. 確定系統的主要參與者、次要參與者
  3. 確定主要的用例
  4. 確定參與者和用例的關係

通常,用例圖中一個功能可能會涉及到多個參與者,所以上面的例子僅僅供參考,會有更復雜的用例。同時,參與者之間、功能之間還可能存在繼承、包含等關係;所以這些可能會用到。

類圖

類圖就是描述系統中各個類之間的關係,也屬於結構圖。但是做過開發就知道類的設計及關係非常之重要,它隱含了軟件的架構設計、開發思想、實現思路。常常在開發時遇到某一個重大的功能,都需要設計文檔,而類的設計文檔又是非常重要的一個,直接體現你的架構水平和認知水平。

組成元素

在這裏插入圖片描述
圖中 爲student 類的全面元素:包含 類名、屬性、操作;

  • 類名 : 通常名詞單數形式,第一個字母大寫;在矩形框第一個框內,必須要有
  • 屬性:矩形框內第二個元素,如userName、password 等等,表示一個類的屬性,可以更加不同的類去抽象出來的相關特徵;在描述屬性時,還有其類型,是基本類型 int 、float 等,還是其他對象類型;另外還有可見性 - 表示私有自己可見。
  • 操作:對象的一組行爲操作,即方法或函數,比如 login 、query ;放在第三欄,其行爲操作也有可見性和返回值;

可見性符號

符號 名稱 含義
+ public 所有可見
- private 僅自己可見
# protect 自己和之類可見
~ package 包可見

類關係

類的關係就是前面講到的關係,完全適用

示意圖 : 以學生選課系統爲例

在這裏插入圖片描述

包圖

包圖就是描述系統中各個包之間的關係。當我們的軟件越來越複雜,功能越來越複雜,我們需要合理的設計包結構,使得便於交流和擴展。一般的,我們把邏輯相同的類放在同一個包,具有高內聚、低耦合的特點。和類圖非常相似,只不過二者在描述層次上不一樣罷了,一個描述類,一個在高抽象層次上描述包;類圖是針對某一個點進行描述,包圖針對一個模塊、系統進行描述;視角不一樣,僅此而已。

示意圖

在這裏插入圖片描述
和類圖區別:

包元素之間的關係只有兩種:繼承和依賴

  • 依賴:分爲導入、訪問兩種;導入就是 java中 import A 類 到B 類中,B 類可以適用A 類; 訪問忽略。符號 ----- + 箭頭
  • 繼承 : 與java 語法一樣。符號 —— + ▲ (空心)

活動圖

活動圖聚焦系統的業務流程、操作過程。使用順序、選擇、循環等控制結構來描述。其優點像我們之前課本上學習的流程圖;其實也可以說是流程圖

活動

活動圖允許以活動的形式來指定用戶定義的行爲。活動是一個有向圖,節點代表活動的組成。

動作

用圓角矩形表示,常常指對象的一個行爲操作,一系列的動作組成活動

節點

控制節點: 初始節點、終止節點;分叉、匯合節點;

泳道

將一個活動圖中的活動節點進行分組,每一組表示負責複雜那些活動的業務實體 ;這樣可以增加一種角度去解讀

元素

在這裏插入圖片描述
示例圖
在這裏插入圖片描述

順序圖

順序圖是交互動態的行爲圖,描述了對象之間的消息、數據隨時間變化的交互;主要元素有:對象、參與者、消息。

參與者

用帶有生命線的對象表示,生命線使用垂直的虛線表示,頂端表示生命線的起始,並在頂端的矩形框寫出參與者角色;

消息

消息用箭頭表示,同步消息用實心箭頭表示;異步消息用虛線枝狀箭頭表示;還可以對消息進行編號;1.1 、1.2、1.3 、1.1.1 等等。

組合

順序圖中,我們可以使用各種組合片段進行表達,常用的有

  • 分支和循環 :alt 替代; opt 選擇; loop 循環; break 異常
  • 併發和順序: seq /strict 順序 ; par 併發; critical 原子交互;

示意圖:
在這裏插入圖片描述

狀態機

描述對象在它的生命週期中響應事件說經歷的狀態序列以及它對那些事件的響應。

基本概念

  • 狀態圖:狀態、遷移、事件、活動和動作組成的圖;
  • 狀態 state:對象在生命週期內,滿足某些條件和動作的狀態;
  • 遷移 transition:狀態之間的一種關係;
  • 事件: 事件引起狀態的變遷,促使狀態機遷移到另一種狀態;
  • 活動:由一系列的動作組成;

狀態

通常用動詞的現在進行時表示 如 waiting、acting、eating 等等,狀態包括狀態名+ 內部活動;
在這裏插入圖片描述
還有子狀態機,即把某些重複的行爲通過一個圖單獨表述,就是子狀態機的作用。

遷移

e/g/A
S
T
  • S : 源狀態 source state:
  • e:event trigger 觸發條件
  • g : guard condition:監護條件
  • A action : 動作
  • T target state目標狀態

建模元素

在這裏插入圖片描述

示例

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述示例圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章