【軟件設計】UML類圖怎么看


前言

無論使用哪種語言,都離不開面向過程與面向對象兩個流派,而類圖是面向對象程序設計中至關重要的一種軟件表達形式,如何看懂類圖,並設計好的軟件架構,是我們作為軟件工程師必不可少的技能之一。

今天小黑把類圖學習的一些筆記和心得分享出來,供大家參考。

什么是類

了解類圖之前,我們需要簡單了解一下類的概念

類(Class)封裝了數據和行為,是面向對象的重要組成部分,它是具有相同屬性、操作、關系的對象集合的總稱。

在面向過程設計中,數據和算法組織成為程序。而面向對象中,數據+算法的理論基礎並沒有改變,雖然整個程序框架由一個個類組成,每一個類都是獨立的數據+算法集合。類的設計遵循單一職責原則,只負責自己的私有數據,調用自己的方法(算法)。通過類將程序組織分類,各自負責各自的邏輯,讓整個程序有序化,組織化。

什么是類圖

類圖(Class Diagram)使用出現在系統中的不同類來描述系統的靜態結構,它用來描述不同的類以及它們之間的關系。

類圖在面向對象設計中用於組織不同之間的關系,無論是文本編程還是圖形化的程序,面向對象的程序如果脫離類圖,都將變的理解吃力。一張明了的類圖,可以讓你省去閱讀程序的諸多煩惱。

近期,小黑仿作AddLabel工具時,如果你只看程序,理清各個類之間的關系和組織邏輯將會耗費大量的時間,而一張類圖就可輕易的表述不同類之間的組織關系。

下圖是LabVIEW自帶的類圖關系,當類與類之間使用繼承關系時,比較容易理解,而使用組合關系,沒有類圖輔助,看起來將比較困難

下圖是繪制的類圖,從圖中可以比較清晰的明確各個類之間的關系

如何看類圖

在UML類圖中,類使用包含類名、屬性和操作且帶有分隔線的長方形來表示,使用Label的類圖作為例子講解

在該類圖中,包含有三部分,分別是類名、類的屬性、類的操作

第一部分是類的名稱

每一個類都有一個名稱,在UML類圖中作為類與類之間的區別

對應的LabVIEW代碼如下圖所示

第二部分為類類的屬性

屬性是指類的性質,即類的成員變量。一個類可以有任意多個屬性,也可以沒有屬性。類的屬性也即作為最小信息單元的數據結構,每一個類都有屬於自己的數據結構。

標准的類圖屬性由以下內容組成

可見性 名稱:類型[缺省值]

這里我們表述的Label由text,textcolor,backgroundColor等屬性組成

對應LabVIEW中的數據結構保存於Label.ctl中

這里需要說明的是,屬性名稱前的-號代表可見性 “可見性”表示該屬性對於類外的元素而言是否可見,包括公有(public)、私有(private)和受保護(protected)三種,在類圖中分別用符號+、-和#表示。

在LabVIEW同樣具有不同訪問屬性的設計,其中如Label.ctl上方顯示的紅色小鑰匙代表私有(private)屬性


使用黃色小鑰匙的代表受保護的屬性(protected)

如果沒有鑰匙,則代表訪問類型為公有(public)

LabVIEW的私有屬性確保了類中的數據只能被類內部訪問,外部需要通過訪問器才可以更改類內部的數據

第三部分為類的方法

類的方法可以通過如下形式表達:

可見性 名稱(參數列表) [ : 返回類型]

Label類中由於SetLabelPosition沒有返回值,所以省略不寫,只表示這是一個公共的方法,並且有傳入的Cluster參數

類圖與LabVIEW對應關系如下圖所示:

類圖的組織關系

在類圖中,不同的類之間存在着不同的關系,只有使用合適的表達符號才可以表述不同類之間的關系

繼承關系

類與類之間的繼承關系,可以表征類的基本特性,類圖中,AddWireLabel繼承了Actor,所以使用繼承的符號來連接兩個類圖

依賴關系

依賴關系指的是一個類在計算的時候用到了另一個類的參數。而這種使用關系是具有偶然性的、、臨時性的、非常弱的,但是B類的變化會影響到A;


## 關聯關系
關聯(Association)關系是類與類之間最常用的一種關系,它是一種結構化關系,用於表示一類對象與另一類對象之間有聯系,如汽車和輪胎、師傅和徒弟、班級和學生等等。

關聯關系比依賴更強、不存在依賴關系的偶然性、關系也不是臨時性的,一般是長期性的,而且雙方的關系一般是平等的、關聯可以是

  • 雙向關聯
  • 單向關聯
  • 自關聯
  • 多重性關聯

    聚合關系

    聚合是關聯關系的一種特例,他體現的是整體與部分、擁有的關系,即has-a的關系,此時整體與部分之間是可分離的,他們可以具有各自的生命周期,部分可以屬於多個整體對象,也可以為多個整體對象共享

這里的Label相對於Segment就是一種聚合關系,判斷依據就是,Label不僅可以作為Segment的Label,也可以作為其他如矩形,Wire的label

### 組合關系
組合也是關聯關系的一種特例,他體現的是一種contains-a的關系,這種關系比聚合更強,也稱為強聚合;他同樣體現整體與部分間的關系,但此時整體與部分是不可分的,整體的生命周期結束也就意味着部分的生命周期結束

這里線和線段的關系就屬於組合關系,判斷依據就是,如果沒有線,線段就不會存在

在Viso中,每一種對應關系都給出了曲線應該具有的表示方法(復合就是組合的意思),有興趣的可以深入了解

總結

本節作為面向對象基礎,向大家介紹了類圖的基本識別方法,其他的內容如果感興趣可以百度或者谷歌相關具體的資料。


后記

小黑最近正在不停的充電中,學習任務比較多,所以沒能及時更新相關知識,讓大家久等了。后期小黑會給自己制定一些寫作計划,保證可以穩定的輸出一些文檔,期待與大家的互動與交流~






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM