---
# System prepended metadata

title: chapter 2 物件導向系統分析設計
tags: [SA]

---

###### tags: `SA`
# chapter 2 物件導向系統分析設計 
| 章節 | 大綱 |
| ---- | ---- |
|2-1| 物件與物件導向概念 |
|2-2| UML與物件基本原理 |
|2-3| 物件導向分析設計工具 |
|2-4| 物件導向分析設計程序 |




## 物件與物件導向分析設計程序

> **程序**

![](https://i.imgur.com/v5X299w.png)
```
物件導向發展程序就是使用物件導向方法論、統一程序和物件導向方法及工具的一連串發展軟體步驟。
```
- **Step1 訪談並確認利害關係人的目標或利益**
需求訪談要整理需求成為利害關係人目標表(Stakeholder-goal list)。通過編碼、需求、來源、備註可成為事後核定內容。
    - 定義角色[桃園案-角色定義](https://www.figma.com/file/soZvKdpAgFMRMRvogbGRAo/%E6%A1%83%E5%9C%92%E5%B8%82%E6%99%BA%E6%85%A7%E8%B7%AF%E7%87%88%E7%AE%A1%E7%90%86%E7%B3%BB%E7%B5%B1?node-id=0%3A1)
    - 客戶需求[桃園案-客戶需求](https://docs.google.com/spreadsheets/d/1wWDNGz6WA7ajKQACpExEsA5zKZz3T39I39jP6t9XGJk/edit?usp=sharing) 

![](https://i.imgur.com/YQzKnNi.png)

- **Step2 建立事件表並定義使用案例**

    - 使用案例[桃園案-SOP/情境](https://docs.google.com/spreadsheets/d/1wWDNGz6WA7ajKQACpExEsA5zKZz3T39I39jP6t9XGJk/edit?usp=sharing)

![](https://i.imgur.com/ktYT4cq.png)
- **Step3 描述使用案例並繪製使用案例圖**
    - 描述時將系統看成一個黑箱，只描述參與者要求系統進行工作，系統如何處理工作並回應訊息給參與者即可，也就是[角色要在系統中做的事。](https://ithelp.ithome.com.tw/articles/10103033)
    - 此步驟的類別稱之概念類別，找出系統所需要的類別，即是進入定義領域模型的工作。
    - 通常使用案例與事件找出系統涉及哪些類別，通常利害關係人與行為者都可能是主要類別，此外餐廳、庫存、運送等工作項目也有可能。

![](https://i.imgur.com/o2THCLX.png)

- **Step4 尋找概念類別並描繪初步類別圖**
可通過使用腦力激盪、名詞片語法，畫出概念性類別圖。

![](https://i.imgur.com/t9neGBZ.png)
- **Step5 循序圖**

![](https://i.imgur.com/XmfzZk2.png)
- **Step6 擬定合約**
將事件已前置條件和後置條件的方式詳細的描述








## 軟體SOP(Standard Operation Process)

> **工作步驟**

- **Step1 需求**
訪談用戶需求，了解用戶對於軟體目標和軟體幫助他解決什麼事情。 範例：[需求修改紀錄-客戶許願清單](https://docs.google.com/spreadsheets/d/1G8sRPQo5g9crPjR1zSnWRwgF9BpBe729z5z08Fv2Ezw/edit?usp=sharing)
- **Step2 分析**
通過訪談內容與合約，描述系統內的規格內容與限制。
- **Step3 設計**
產出內容包括
    - 角色 
    - 架構：通過 Function Map



---
###### tags: `SA`
# chapter2 何謂物件導向系統分析設計  old
| 章節 | 大綱 |
| ---- | ---- |
|2-1| 物件與物件導向概念 |
|2-2| UML與物件基本原理 |
|2-3| 物件導向分析設計工具 |
|2-4| 物件導向分析設計程序 |


# 2-1 物件與物件導向概念
>物件(thing)可以指人事物或文件.ex:房子、桌子、椅子、杯子、客戶、訂單、產品規格、產品
- 實體的東西
- 營業交易
- 產品或服務
- 地點或角色
- 交易項目
- 產品規格
- 組織單位
- 容器或容器元素

>物件與程式之間的關聯：系統由物件組成，物件又由程式組成
- 系統到系統是由一個一個東西所組成
- 軟體系統他模擬現實環境所構建構而成的模型，故他是由一個一個物件類別組成
- 程式物件寫成程式碼構成了軟體系統

例如：真實世界物件包含貓、人、狗、車，物件方式轉換成貓、人、狗、車類別，在講貓、人、狗、車的程式要怎麼寫。
![](https://i.imgur.com/j8ChoGF.png)

```
一般事先宣告類別在形成物件

類別定義：
指具有相同特性和相同行為的一組物件的集合
```

物件屬性：學生
範例1
學生>>物件物件內容>>>物件屬性：學生姓名、學生學號、學生班級
三位學生>>>類別：學生 的概念
一個類別可以產生非常多物件

物件或是名稱：學生妹
屬性(attribue)：姓名、類別、科系、學號、年級
物件行為或是方法(method)：會做的事情. 打招呼、自我介紹、問資料、邀約

物件：小弟弟
屬性：藍衣服、黑頭髮
行為：跑步、游泳

從以上可以整理出，類別是一個集合體的概念故稱之為物件類別(Object Class)，個別的物件稱之為物件實體(Object Instance)
![](https://i.imgur.com/2m6sqFi.png)


範例2：汽車
汽車類別 tayota、susuki
物件屬性

故在物件導向概念中：
> 系統由模組行程>模組由物件組成>物件由程式組成

```
系統是一群物件的組成
- 設計系統時要把系統看成是一群物件的組成
- 先從需要處理的事情和內容中找出物件，然後由物件交互作用和交換訊息即可。
```

目標若為已物件導向概念設計系統
1. 找出系統由什麼模組組成()
2. 模組包含哪些物件(跟客戶訂單相關的物件、跟客戶訂單相關的類別) 
3. 物件
例如1：處理客戶訂單的系統可能包括客戶訂單的物件(簡單)或類別(詳盡)
類別：產品、訂單、客戶、產品類別
![](https://i.imgur.com/If1SIXn.png)

```
先決定系統所需要的物件
- 尋找系統所需的物件比設計系統的功能步驟重要
- 先決定系統所需要的物件，再決定系統所要處理的事情，由哪幾個物件合作完成。物件之間如何互動。
```
例如2: 小吃店、飯店、五星飯店系統，物件互動會不一樣
點餐系統類別？屬性有哪些？如何互動

```
先單一物件功能完整且獨立
- 現實環境的東西大都有各自獨立的屬性和功能
- 決定物件時，應盡可能讓單一物件功能完整且獨立，與其他物件關聯程度要降到最低
- 軟體物件擁有自己的資料屬性，要完成某件事時，可以獨立完成
```
補充：
**內聚力cohesion**
純水
**耦合力**
水變成飲料

完成一件複雜的工作若是要多個物件合作，物件間的合作不需要牽涉操作其他物件的內部運作，只需透過訊息的傳達即刻。不干涉另一個物件內部運作，保持每個物件的獨立性。

會說 有很高的內聚力和很低的耦合力，好的系統要有此特徵。

![](https://i.imgur.com/7GsTZlR.png)

```
善用物件封裝、繼承與多行的特性
- 封裝:物件內的資料不允許被其他物件直接存取，保持了物件的獨立性
- 繼承：可以將定義好的屬性和方法為他類別使用，增加在用性與簡化設計
- 多類：不同類別中可以存在相同方法名稱，增加物件導向彈性設計
```
範例：
![](https://i.imgur.com/Mhl9xaM.jpg)
![](https://i.imgur.com/tHPU7Ds.png)
![](https://i.imgur.com/K9IiDg0.png)


# 2-2 UML 與物件基本原理

## 2-2-1 UML
UML定義：
- 為一個描述物件導向方西設計的圖形化工作
- 被定義14種圖示(diagram):
靜態>圖示結構式圖示
動態>行為式圖示

靜態範例(類別圖)
![](https://i.imgur.com/hccXTwr.png)

動態範例(循序圖)
![](https://i.imgur.com/HNiRahK.png)

UML符號：
- 使用一條線連結有訊息傳遞的類別，稱為關聯(association)。
- 多個物件產生關聯，必須用數字在連結兩端將其標示稱之多重性(multiplicity)。
```
在連結臉端各標示1，為一對一的關係
在一方需要多個物件，為一對多的關係.可標示為 1..* 或 0..*
```
![](https://i.imgur.com/fS3XHEa.png)


|名稱|特性|定義|
|-----|----|--------|
|使用案例圖 Use Case Diagram |靜態圖形| 表現系統所有使用案例與環境間的關係 |
| 活動圖 Activity Diagram|動態圖形|用法1：描述使用案例內的運作流程|
|   |   |用法2：描述使用案例內的程式流程||
|循序圖 Sequence Diagram|動態圖形 |描述使用案例中如何透過物件間訊息的傳遞有次序的完成系統事件|
|溝通圖Communication Diagram|動態圖形|比循序圖更能表現物件間互動溝通關係|
|類別圖Class Diagram|靜態圖形|將類別和類別間的關係以關聯符號來表現 |


sample
1.使用案例圖
[最陽春選課案例](https://ithelp.ithome.com.tw/articles/10103033)
[延伸選課案例](https://www.mysql.tw/2021/05/uml-usecase-activity-class.html)
2.活動圖
[維基百科說明](https://zh.wikipedia.org/zh-tw/活动图)
3.循序圖
[菜鳥工程師教你怎麼畫](https://dotblogs.com.tw/SoftwareEnergineer_JeffTseng/2020/06/29/113413)
4.溝通圖/合作圖
[學習筆記-合作圖型](https://terryjryeh.blogspot.com/2019/03/uml-collaboration-diagrams-9.html)
5.類別圖
[軟體路上不孤單-陽春案例教學](https://ithelp.ithome.com.tw/articles/10102093)


## 2-2-2 基本原理

1. 封裝
概念指每一個物件就像一塊IC板，單一物件功能完整且獨立，與其他物件關聯程度進量降到最低。物件之間若要通訊則就像由電路角等其他媒介通電。
是一群相關的屬性和操作所組成的型態。
![](https://i.imgur.com/g7NLxil.png)

> 封裝概念延伸：資訊隱藏
定義：將困難的設計或是可能改變設計要傳遞的主資訊部分做隱藏。比如手錶由齒輪構成。

2. 繼承
讓已經寫過程式碼，別再重複。
是指類別所定義的屬性和方法可以被其他的類別所使用。
所以通常只需宣告父類別，使用繼承的方式
![](https://i.imgur.com/Aw5a6NJ.png)

>概念延伸：
- 特殊化：先有父類別、再有子類別
使用繼承的方式來繼承原有的類別，僅加上不同的屬性和方法的設計方式。
- 一般化：先有子類別、將子類別相似地方歸納成父類別
在一群類別中將共通的部分抽離出來形成另一個類別的設計方式。

3. 多型
指不同類別中，可以存在相同的方法名稱，但其操作內容可以不同。每個子類別有其獨特性。
覆載(Overrride)是多型的另一個性質：子類別繼承了父類別的方法與屬性，在使用子類別時以子類別的屬性與方法為主
![](https://i.imgur.com/4lwe121.png)

# 2-3 物件導向分析設計工具
物件導向與設計的做法：
- 使用案例：使用文字來描述參與者(actor)與系統互動的過程。描述人做哪些事稱之
![](https://i.imgur.com/hoxO3Oh.png)
![](https://i.imgur.com/Ci19cLk.png)

*參與者是指與系統互動的人或個體
*互動過程是參與者與系統之間一連串動作的敘述稱之情節(Scenario)，情節包含成功與失敗
*可以簡單分成簡略、中等、完整三種層次

- 初步類別圖(Preliminary Class Diagram)
別稱叫做領域模型(domain model)，是將系統所需要的類別以徒刑的方式表示出來
![](https://i.imgur.com/3aDktsd.png)

- 系統循序圖
將使用案例所敘述的步驟轉為一個個操作步驟稱之
將使用者文字敘述的需求轉變為系統操作的第一步驟
將使用案例表現成外部參與者與系統間操作次序之訊息傳遞的圖形
![](https://i.imgur.com/Hm7yZTQ.png)

> 合約：
> - 操作(Operation):操作名稱和參數
> - 交互參照(Cross References):使案例名稱，操作所發生的地方作為前後參考
> - 前置條件:操作成立的條件，也就是操作執行前的系統狀態
> - 後置條件:操作執行後的系統狀態



- 互動圖(interaction diagram)
包括溝通圖與循序圖，用不同方式表達同內容：
(1)溝通圖：用類似網路方式描述物件互動，物件可被擺設在圖中任何位置
(2)循序圖：以類似柵欄的方式描述物件的互動，每加一個新物件就加入到圖的右邊
![](https://i.imgur.com/1bwx7Wu.png)

- 類別圖：用來描述整體系統的個別內容和類別之間的關係圖，表達出整體系統的靜態結構
- 設計類別圖：清楚說明屬性與操作，稱之設計類別圖
(1)必須在類別中增加類別操作
(2)類別間必須增加導覽箭頭
(3)在墓地物件的導覽箭頭下加上角色名稱relename
(4)在目的物件表現出多重性
(5)去除關聯名稱
![](https://i.imgur.com/gbDk4qi.jpg)


詞彙補充
概念類別conceptual class