iT邦幫忙

2021 iThome 鐵人賽

DAY 7
2
Software Development

淺談物件導向與Design Pattern介紹系列 第 7

IT鐵人DAY 7-Class Diagram類別圖

  學習Pattern之前,首先要學會看Class Diagram,以了解Pattern中物件與物件之間的關係是什麼,並且能快速套用Pattern在自己設計的Diagram上。


Class Diagram的元素

類別(Class)與介面(Interface)

  還記得之前在物件導向基本概念篇所提到的「類別」與「抽象類別」嗎?在Class Diagram中,這兩種類別長的也不太一樣喔!具體的類別會長得像是圖片中最左邊那樣;而抽象類別會是中間的樣子,可以看到抽象類別的標題是斜體字,具體的類別則是一般字體,這點很重要!因為這在類別圖中能夠分辨抽象類別與具體類別的特徵,使讀者在視圖時可以清楚了解,不會搞混!

https://ithelp.ithome.com.tw/upload/images/20210922/20140743YyJrXRaD2m.png

  而介面則是上圖中最右邊的樣子,會發現它比類別多了一個斜體字標示Interface

  三者間可以發現各自擁有三個區塊,最上面的就是它們的名稱,中間的則是屬性欄位,而最下面寫的是各自擁有的方法。各屬性與方法前面都會有個符號,在類別圖中我們稱之為Visibility,總共有四個符號:「+#-~」,依序為「public」、「protected」、「private」及「package」,有這些符號就可以讓開發者在視圖時快速了解各類別的屬性與方法,使類別封裝得更加完整。

繼承(Generalization / Inheritance)與實作(Realization / Implementation)

  繼承與實作在物件導向的概念中非常重要,所以在類別圖中也少不了它們的身影。圖片的左邊工程師類別繼承了員工類別,它們之間的關係是以實線與空心的箭頭表示;另外圖片右邊是小孩類別實作了行為介面,實作是用虛線和空心箭頭表示。

https://ithelp.ithome.com.tw/upload/images/20210922/20140743E75zZk1oH7.png

依賴(Dependency)與關連(Association)

  依賴與關連的差別在於一個是「有」,另一個是「使用」,關聯是用實線箭頭來表示物件之間的關係,圖中的車子類別有人類的屬性,也就是「車子有車主的變數」,所以箭頭指向人類類別(被擁有者);而依賴是用虛線箭頭表示,主廚類別的方法中有用到食物的參數,也就是「主廚使用食物來做菜」,所以箭頭指向食物類別(被使用者)。

https://ithelp.ithome.com.tw/upload/images/20210922/20140743nHW20ioF8f.png

聚合(Aggregation)與組合(Composition)

  聚合是用來表示物件之間「比較弱的」擁有關係,就像客廳可以有沙發、有電視,但沙發和電視並不是客廳的一部份,即使沒有沙發和電視,它們都可以獨立存在。表示方式為空心菱形與實線。

https://ithelp.ithome.com.tw/upload/images/20210922/20140743Thx7hCp1ap.png

  而組合則是用來表示物件之間「比較強的」擁有關係,好比說機器人有頭、有手、有腳,其物件都是屬於機器人的一部份,如果沒有它們組成,機器人就不存在了。表示方式為實心菱形與實線。

https://ithelp.ithome.com.tw/upload/images/20210922/20140743axXe57cZLd.png

總結

  以上大概就是類別圖經常出現的元素,以及各元素所表達的意義,其實還有很多細節沒有說明完整,有興趣的可以找找網路上更複雜的範例,而這篇的目的是至少可以讓大家認識類別圖的物件,在看到系統分析師所畫的Class Diagram的時候不會太錯愕。

  另外推薦大家使用免費的繪圖工具:draw.io,我自己本身繪圖是用網頁版的,但是他也有應用程式版本。在編輯完後會自動儲存到指定的資料夾或雲端硬碟上,最重要的是它有工程師必備的暗黑主題!至於好不好用的話就見仁見智,提供網址給大家:https://app.diagrams.net/

https://ithelp.ithome.com.tw/upload/images/20210922/20140743Bzkl93KQSE.jpg


除此之外,也歡迎大家走走逛逛關於我們團隊夥伴的文章

lu23770127 - SASS 基礎初學三十天

10u1 - 糟了!是世界奇觀!

juck30808 - Python - 數位行銷分析與 Youtube API 教學

SiQing47 - 前端?後端?你早晚都要全端的,何不從現在開始?


上一篇
IT鐵人DAY 6-UML基本認識
下一篇
IT鐵人DAY 8-Singleton 單例模式
系列文
淺談物件導向與Design Pattern介紹30

2 則留言

0
juck30808
iT邦新手 2 級 ‧ 2021-09-22 23:58:31

推推!

我要留言

立即登入留言