UML簡單介紹-如何看懂UML(二)

来源:https://www.cnblogs.com/noteless/archive/2018/11/05/9907703.html
-Advertisement-
Play Games

uml是OOD面向對象的程式設計的重要工具,是學習設計模式的前提,本文簡單介紹引入了UML的相關概念,對UML中常見關係進行了介紹,關聯關係,實現關係 繼承關係,依賴關係,組合關係,聚合關係,用最小的學習成本讀懂UML圖 ...


  在計算複雜的數學題時,我們必然會打草稿計算 在繪畫課中,我們可以素描出來看到的事物 那麼在程式設計中呢? 如何描繪傳達你腦海中的關於這個程式 ,設計的藍圖草稿   OOP的程式設計中,最多的自然是類、介面層次介面的設計 簡單的設計,可能在腦海中想象下就過了,比如A繼承B 但是複雜的呢? 對於OOP程式設計中,類的層次、關係設計如何描繪? 用文字麽? A繼承B A實現C,A中有一個D的引用 顯然,圖形化的方式更加直觀,簡潔 那麼到底如何表示OOP中的事物與關係?每個人有每個人的書寫方式,如何進行交流? 你畫了一個三角形說這是一個介面,我花了一個圓形,跟你講這個是介面?這其中的問題不言而喻。  

UML起源

1997年,OMG 組織(Object Management Group對象管理組織)發佈了統一建模語言(Unified Modeling Language,UML) UML 是一種為面向對象開發系統的產品進行說明、可視化、和編製文檔的標準語言 UML 作為一種模型語言,它使開發人員專註於建立產品的模型和結構 UML 是不同於其他常見的編程語言,如Java等,它是一種繪畫語言,用來做軟體藍圖   UML 提出了一套 統一的,標準的建模符號 首先它提供了一套建模符號,用於類的層次結構設計 另外,統一的也就意味著只要按照標準構圖,就可以無障礙的通過UML圖進行溝通 電腦軟體的世界裡面,總是“分久必合”,UML的發展歷史也不例外 UML 統一了Booch、OMT、OOSE和其他面向對象方法所涉及的基本概念和建模符號 UML的發展不是一蹴而就的,而是吸收了現有的精華,而發展出來的大一統的形式  

UML邏輯原理

UML是面向對象程式設計的描繪語言 是面向對象程式設計的建模語言,是對面向對象程式設計世界的抽象   UML的基本邏輯是很簡單的 將面向對象程式設計中的元素進行抽象,比如類還是介面,UML中稱之為事物,就如同積木的基礎形狀 將元素之間的聯繫關係進行抽象,比如到底是繼承還是組合(聚合),如同積木中的卡扣,可能有多種卡扣連接形式 image_5bdfa951_4298   而我們看到的UML圖也就是如同一整塊已經搭建好的積木 當然 UML肯定不會向積木那樣簡單,所以自然還會有很多的規則、限制、要求,這些一起構成了完整的UML 但是根本是事物和關係,這兩者是UML的主體   事物就是面向對象程式設計中的元素 關係則是他們的相互聯繫形式 圖則是按照不同事物的組織形式進而產生的分類  

UML組成

image_5bdfa952_5aa5   上圖是UML的大致基本組成部分,部分類型並未全部列舉 事物是是實體抽象化的最終結果,是 UML 構建塊最重要的組成部分 最基本的是類和介面 關係是事物之間的聯繫的抽象分類 有了事物和聯繫,就可以繪製出各種各樣的UML圖 按照他們的邏輯功能性質,又有了圖的分類   UML是軟體需求分析、設計的強大工具,並非簡單介紹就可以認知的 本文重在簡單瞭解基本知識以更好學習設計模式  

UML常用關係

關聯關係使用一條直線表示,比如  A與B關聯 image_5bdfa952_2b22
用於描述不同類的對象之間的結構關係,將多個類的實例聯繫在一起 是一種靜態關係,基本與程式的運行沒有關係 比如,部門與員工的關係,就是關聯關係 關聯關係一般不強調方向,表示互相“知道”對方,也就是存在引用 關聯關係有多重性 比如一對一關聯 一對多關聯等 可以任意關聯N對N關聯 如果特別強調方向,就使用箭頭,比如 image_5bdfa952_cb3 那麼表示A知道B但是B不知道A 也就是說,關聯關係有兩種圖形 直線或者直線箭頭   關聯關係表示存在引用,比如員工類的定義中有“部門”屬性欄位
實現關係是帶空心箭頭的虛線表示的,比如A實現B,箭頭指向父類、介面
image_5bdfa952_5816
實現可以狹隘的認為是一種實現類與父類、介面的關係(其實在UML中實現的含義遠不止實現類這層含義)
泛化關係是帶空心箭頭的直線表示的,比如A繼承B
image_5bdfa952_2a19
用於說明繼承關係
泛化關係是從子類到父類的關係,箭頭指向的是父類
聚合關係是帶空心的菱形的直線表示的,比如 A聚合到B上,也就是B由A組成
image_5bdfa952_4f4a
聚合關係用於類圖,表達整體由部分構成的語義,比如部門由許多人員組成
整體和部分不是強依賴的,即使整體不存在,依然可以存在部分,即使沒有部門,人員仍舊存在
組合關係是帶實心的菱形的直線表示的,比如A組合成B,或者說B由A構成
image_5bdfa952_57ed
表達整體擁有部分的含義,組合關係是一種特殊的強依賴的聚合關係
如果整體不存在,那麼部分也不存在了
比如,汽車由輪胎底盤發動機構成,汽車不存在了,自然也不存在發動機了
依賴關係使用帶箭頭的虛線表示,比如  A依賴B
image_5bdfa952_5dfc
用於描述一個對象在運行期間會使用到另外一個對象的關係
依賴關係是一種臨時性的,簡言之就是不同場景會發生變化
比如人和車
如果是駕駛場景,車依賴人(駕駛員),如果是乘車出行,那就是人依賴車(公交、出租)
很顯然,依賴關係比關聯關係更加弱
依賴關係是一種使用關係
比如一個類的方法中的局部變數、方法的參數或者對靜態方法的調用,都是一種依賴
 

UML類的屬性和方法

類包括類名、屬性、方法 都在類圖中   屬性:可見性  名稱 :類型 [ = 預設值] 方法:可見性  名稱(參數列表) [ : 返回類型] 中括弧表示預設的 可見性使用+  -  #表示 + public - private # protected  

常用工具

UML的工具有很多,比如 StarUML 、astah image_5bdfa952_7599   image_5bdfa952_544f astah,前身是JUDE  下圖為astah中的sample 以下圖為例簡單的瞭解下UML的圖形標識符號   Tracer中與Engine、Steering、Monitor單項關聯,也就是含有引用 與State雙向關聯 Engine與Steering由Motor組成 他們是可以獨立存在的 Monitor由LightSensor組成 他們是可以獨立存在的 Idle OnCourse OutOfCourse 是State的實現類 image_5bdfa952_1ebb Monitor中,Threshold是boolean類型的私有屬性  isBlack和isWhite是返回類型為void的 public方法   image_5bdfa952_4642  

總結

本文簡單介紹了UML的歷史以及組成部分,目的不在於詳細介紹UML,只在於能夠讀懂以及繪製類圖 UML是可視化的程式設計描繪語言,通過圖形和符號直觀的表達含義 對於類圖需要理解清楚類圖相關的關聯關係 另外,不同的軟體對於各種圖形的表示可能局部細節會有差別,實際使用時應該註意 UML是Unified Modeling Language ,並不是一種具體的工具,而是標準 UML建模工具就如同“實現類”一樣,細節上有差異也很正常,很多軟體也可以調整顯式的式樣,比如StarUML就可以      
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 主要的代碼: var body = layer.getChildFrame('body', index); var iframeWin = window[layero.find('iframe')[0]['name']];//得到iframe頁的視窗對象,執行iframe頁的方法: var comp ...
  • 構造函數擁有名為prototype屬性,每個對象都擁有__proto__屬性,而且每個對象的__proto__屬性指向自身構造函數prototype。 當調用某種方法或屬性時,首先會在自身調用或查找,如果自身沒有該屬性或者方法,則會去它的__proto__屬性中調用查找,也就是它構造函數的proto ...
  • JavaScript: 知識點回顧篇(九):Window 對象、Navigator 對象 ...
  • 實現微信分享功能整理 1、引入js文件 2、通過config介面註入許可權驗證配置 3、config信息驗證後會執行ready方法,所有介面調用都必須在config介面獲得結果之後,config是一個客戶端的非同步操作,所以如果需要在頁面載入時就調用相關介面,則須把相關介面放在ready函數中調用來確保 ...
  • 本文主要介紹怎麼在el tree組件中通過render函數來el button。 這是element ui中el tree樹: 這是需要實現的效果: tree.vue文件中,具體實現的代碼如下: 主要說下這段代碼: 文檔中有詳細的說明:https://cn.vuejs.org/v2/guide/re ...
  • /* *js格式化數字代碼 * *value: 要格式化的數字值 *scale: 最多保留幾位小數 *zeroed: 是否保留尾0 *percented: 是否轉稱百分比形式 * */ function formatNumber(value, scale, zeroed, percented){ i ...
  • 本文長度為3056字,預計讀完需1.1MB流量,建議閱讀8分鐘。 閱讀目錄 什麼是Session丟失? nginx是如何來解決這個問題的? Session保持的其它方案 結語 什麼是Session丟失? nginx是如何來解決這個問題的? Session保持的其它方案 結語 什麼是Session丟失 ...
  • 在jsp頁面提交到action中的表單元素在action中是以對象的形式存在的, action中的對象name必須與jsp頁面中的表單元素name相同,struts框架自動為action的對象賦值. 一.普通驅動 註意:action中的對象name必須與jsp頁面中的表單元素name相同,strut ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...