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

```
物件導向發展程序就是使用物件導向方法論、統一程序和物件導向方法及工具的一連串發展軟體步驟。
```
- **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)

- **Step2 建立事件表並定義使用案例**
- 使用案例[桃園案-SOP/情境](https://docs.google.com/spreadsheets/d/1wWDNGz6WA7ajKQACpExEsA5zKZz3T39I39jP6t9XGJk/edit?usp=sharing)

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

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

- **Step5 循序圖**

- **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:房子、桌子、椅子、杯子、客戶、訂單、產品規格、產品
- 實體的東西
- 營業交易
- 產品或服務
- 地點或角色
- 交易項目
- 產品規格
- 組織單位
- 容器或容器元素
>物件與程式之間的關聯:系統由物件組成,物件又由程式組成
- 系統到系統是由一個一個東西所組成
- 軟體系統他模擬現實環境所構建構而成的模型,故他是由一個一個物件類別組成
- 程式物件寫成程式碼構成了軟體系統
例如:真實世界物件包含貓、人、狗、車,物件方式轉換成貓、人、狗、車類別,在講貓、人、狗、車的程式要怎麼寫。

```
一般事先宣告類別在形成物件
類別定義:
指具有相同特性和相同行為的一組物件的集合
```
物件屬性:學生
範例1
學生>>物件物件內容>>>物件屬性:學生姓名、學生學號、學生班級
三位學生>>>類別:學生 的概念
一個類別可以產生非常多物件
物件或是名稱:學生妹
屬性(attribue):姓名、類別、科系、學號、年級
物件行為或是方法(method):會做的事情. 打招呼、自我介紹、問資料、邀約
物件:小弟弟
屬性:藍衣服、黑頭髮
行為:跑步、游泳
從以上可以整理出,類別是一個集合體的概念故稱之為物件類別(Object Class),個別的物件稱之為物件實體(Object Instance)

範例2:汽車
汽車類別 tayota、susuki
物件屬性
故在物件導向概念中:
> 系統由模組行程>模組由物件組成>物件由程式組成
```
系統是一群物件的組成
- 設計系統時要把系統看成是一群物件的組成
- 先從需要處理的事情和內容中找出物件,然後由物件交互作用和交換訊息即可。
```
目標若為已物件導向概念設計系統
1. 找出系統由什麼模組組成()
2. 模組包含哪些物件(跟客戶訂單相關的物件、跟客戶訂單相關的類別)
3. 物件
例如1:處理客戶訂單的系統可能包括客戶訂單的物件(簡單)或類別(詳盡)
類別:產品、訂單、客戶、產品類別

```
先決定系統所需要的物件
- 尋找系統所需的物件比設計系統的功能步驟重要
- 先決定系統所需要的物件,再決定系統所要處理的事情,由哪幾個物件合作完成。物件之間如何互動。
```
例如2: 小吃店、飯店、五星飯店系統,物件互動會不一樣
點餐系統類別?屬性有哪些?如何互動
```
先單一物件功能完整且獨立
- 現實環境的東西大都有各自獨立的屬性和功能
- 決定物件時,應盡可能讓單一物件功能完整且獨立,與其他物件關聯程度要降到最低
- 軟體物件擁有自己的資料屬性,要完成某件事時,可以獨立完成
```
補充:
**內聚力cohesion**
純水
**耦合力**
水變成飲料
完成一件複雜的工作若是要多個物件合作,物件間的合作不需要牽涉操作其他物件的內部運作,只需透過訊息的傳達即刻。不干涉另一個物件內部運作,保持每個物件的獨立性。
會說 有很高的內聚力和很低的耦合力,好的系統要有此特徵。

```
善用物件封裝、繼承與多行的特性
- 封裝:物件內的資料不允許被其他物件直接存取,保持了物件的獨立性
- 繼承:可以將定義好的屬性和方法為他類別使用,增加在用性與簡化設計
- 多類:不同類別中可以存在相同方法名稱,增加物件導向彈性設計
```
範例:



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

動態範例(循序圖)

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

|名稱|特性|定義|
|-----|----|--------|
|使用案例圖 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板,單一物件功能完整且獨立,與其他物件關聯程度進量降到最低。物件之間若要通訊則就像由電路角等其他媒介通電。
是一群相關的屬性和操作所組成的型態。

> 封裝概念延伸:資訊隱藏
定義:將困難的設計或是可能改變設計要傳遞的主資訊部分做隱藏。比如手錶由齒輪構成。
2. 繼承
讓已經寫過程式碼,別再重複。
是指類別所定義的屬性和方法可以被其他的類別所使用。
所以通常只需宣告父類別,使用繼承的方式

>概念延伸:
- 特殊化:先有父類別、再有子類別
使用繼承的方式來繼承原有的類別,僅加上不同的屬性和方法的設計方式。
- 一般化:先有子類別、將子類別相似地方歸納成父類別
在一群類別中將共通的部分抽離出來形成另一個類別的設計方式。
3. 多型
指不同類別中,可以存在相同的方法名稱,但其操作內容可以不同。每個子類別有其獨特性。
覆載(Overrride)是多型的另一個性質:子類別繼承了父類別的方法與屬性,在使用子類別時以子類別的屬性與方法為主

# 2-3 物件導向分析設計工具
物件導向與設計的做法:
- 使用案例:使用文字來描述參與者(actor)與系統互動的過程。描述人做哪些事稱之


*參與者是指與系統互動的人或個體
*互動過程是參與者與系統之間一連串動作的敘述稱之情節(Scenario),情節包含成功與失敗
*可以簡單分成簡略、中等、完整三種層次
- 初步類別圖(Preliminary Class Diagram)
別稱叫做領域模型(domain model),是將系統所需要的類別以徒刑的方式表示出來

- 系統循序圖
將使用案例所敘述的步驟轉為一個個操作步驟稱之
將使用者文字敘述的需求轉變為系統操作的第一步驟
將使用案例表現成外部參與者與系統間操作次序之訊息傳遞的圖形

> 合約:
> - 操作(Operation):操作名稱和參數
> - 交互參照(Cross References):使案例名稱,操作所發生的地方作為前後參考
> - 前置條件:操作成立的條件,也就是操作執行前的系統狀態
> - 後置條件:操作執行後的系統狀態
- 互動圖(interaction diagram)
包括溝通圖與循序圖,用不同方式表達同內容:
(1)溝通圖:用類似網路方式描述物件互動,物件可被擺設在圖中任何位置
(2)循序圖:以類似柵欄的方式描述物件的互動,每加一個新物件就加入到圖的右邊

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

詞彙補充
概念類別conceptual class