# 架構圖學習
## 資料流程圖(Data Flow Diagram, DFD)
* 描述資料在系統內的流動情形,如何進入和離開系統的,為什麼改變了資料,以及資料儲存在哪裡。DFD用意是標示整個系統的範圍和邊界。它可以作為系統分析人員與系統中充當重新設計系統起點的任何人員之間的通訊工具。
根據系統的規模/複雜度可能會分為多個層級的DFD去表示,採取「逐層分解」的方法,繪製分層的DFD:先全域後局部,先整體後細節,先抽象後具體。

箭頭表示資料流;圓或橢圓表示加工;雙槓或者單槓表示資料儲存;矩形框表示資料的源點或終點,即外部實體。

簡單的資料流圖:資料記錄-輸入->系統-輸出->用戶。
>參考資料:http://www.ais.nptu.edu.tw/ais/961%20materials/DFD_961.pdf
## 系統流程圖(system flowchart, SF)
* 用於清楚呈現整個工作系統中每一項作業流程,有助於各單位的作業人員快速理解與掌握整體工作流程與關係。
流程圖在分析、設計、記錄及操控許多領域的流程或程式都有廣泛應用。
* 常用的符號
|圖案|名稱|描述|
|---|---|---|
| |流程符號 Flowline| 用來表達過程的次序,用一條線由一個符號連接去到另一個符號|
| | 起止符號 Terminal| 表示程式的開始與完結 |
|| 程式 Process| 以長方形來代表一個Function |
||決策判斷 Decision | 表時一個條件,通常以「是/否」或「真/假」值去決定 |
| |輸入/輸出 Input/Output| 標示資料輸入或輸出的過程 |
| | 註解 | 半閉合的長方型,補充某步驟的額外資訊,用一個虛線來連接|
| |已定義流程 Predefined Process | 表示一個已在其他地方定義了的過程|
| | 資料檔或資料庫 Data File or Database| 圓柱來表示資料庫 |
| | 檔案 Document| 有波浪形底的長方形來標示檔案|
| | 檔案 Document| 多個波浪形底的長方形來標示檔案多份檔案 |

>參考資料:http://www.chwa.com.tw/TResource/VS/book2/ch2/2-2.htm
## 程序圖(Process Map, PM)
http://www.ais.nptu.edu.tw/ais/961%20materials/PM_961.pdf
* 以相對簡單的符號完成器械程序的流程。
適合用來對照企業流程改變前後,表達企業的現狀及改變後的新狀態。
ex: ERO系統的建置
* 標準的程序圖,僅使用三種符號:
|符號|說明|
|---|---|
||特定程序|
||決策點|
||流程方向|
**範例**:

>參考資料:https://www.lucidchart.com/pages/templates/process-map/swim-lane-process-map-template
## 統一塑模語言 (Unified Modeling Language, UML)
* 分三大類、14種圖:
1. 結構圖形:
**類別圖**、物件圖、元件圖、剖析圖、佈署圖、複合結構圖、套件圖。
2. 行為圖形:
**使用者案例圖**、**活動圖**、狀態機企圖。
3. 互動圖形:
**順序圖**、溝通圖、計時圖、互動觀點圖。
四種常見的需求分析與系統分析相關的圖:類別圖、使用案例圖、活動圖、順序圖
### 使用者案例圖(use case diagram, ucd)
* 可表達使用者對系統功能的期待。與該系統互動的人(使用者、維護者)或其他系統,在ucd中稱為角色(Actor)
* 符號:
1. 角色(Actor):表示的是一個系統用戶,也就是與應用程式進行交互的用戶、組織或者外部系統。

3. 使用案例(Use Case):表示的是對系統提供的功能、服務的一種描述。使用案例定義為一個目的。所以在替 Use Case 命名時都是要以動詞+名詞為規範。

3. 系統邊界(Boundary):
定義系統邊界,一個方形將 Use Case 包圍起來,並且在最上方標示名稱。
5. 使用案例之間的關係、分4種
- 包含關係(Include):把一個較複雜使用案例所表示的功能分解成較小的步驟

- 擴展/延伸關係(Extend):使用案例功能的延伸,相當於為用例提供一個附加功能。

- 泛化關係(Generalization):可理解為繼承關係,子使用案例和父使用案例,但表現出更特別的行為,子用例將繼承父用例的所有結構、行為和關係。

- 關聯關係(Association):表示參與者與用例之間的關係。一條直線,或者是一條帶箭頭的線條來表示,箭頭指向信息接收方

簡單範例:

### 類別圖(Class diagram)
* 是**軟體工程**的統一建模語言一種靜態結構圖,該圖描述了系統的類別集合,類別的屬性和類別之間的關係。
是一種物件導向式的建模。一般都被用於概念建模(conceptual modelling)的系統分類的應用程式,並可將模型建模轉譯成程式碼。
1. 最上面是類別名稱
2. 中間部分包含類別的屬性
3. 底部部分包含類別的方法
Attributes 屬性宣告為:

| 名稱 | 說明|
| -------- | -------- |
| Visibility | 可視範圍 |
|Name|變數名稱|
|Multiplicity|多重性|
| Ordering|是否對儲存的 Object 進行排序,預設為 unordered|
| Type|變數型別 |
|Initail value|初始值|
| 符號 | 說明 |
| -------- | -------- |
| + | 公有 public |
| - | 私有 private |
| # | 保護 protected (即對子類可見) |
| ~ | 包 package (即對包内其他成員可見) |
| / | 推導(即由其他屬性推導得出,不需要直接給定其值) |
| _ | 靜態 |

* 待補充
### 順序圖(sequence diagram)
* 待補充
### 活動圖(activity diafram)
* 待補充