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 - 前端?後端?你早晚都要全端的,何不从现在开始?


<<:  [Day 8] 常用的卡片 Card

>>:  Postman pre-request script & tests

Components 与 Props(Day4)

当我们会写基本的 Hello World 之後,就可以开始考虑扩展跟重组我们要撰写的程序码了。我们会...

【Side Project】 点菜单功能实作 - 前台资料传到後台

这篇我们接着做: 取得网页上栏位资料 资料送往後台 资料写回资料库 取得栏位资料 在送资料到後台之前...

曝露系数(Exposure factor)

-简单的定量风险分析 曝露系数 (EF) 曝露系数 (EF) 是在实现特定威胁时对特定资产的主观、...

[13th-铁人赛]Day 11:Modern CSS 超详细新手攻略 - Position (一)

Position顾名思义就是定位元素的在网页上的位置,有5种属性值:static(预设)、relat...

Day 28 - Rancher Fleet Helm 应用程序部署

本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...