---
# System prepended metadata

title: '[筆記] 物件導向分析'

---

# [筆記] 物件導向分析

(notes for 水球軟體學院 OOA 簡介)

## 物件導向基本概念

**物件**導向分析：

- 類別是**物件**的交集

物件導向的點跟線：

- 點：**物件**與**類別**
- 線：**關係**與**依賴**

方析方法：

- 語意
- 直接觀察

OOP 定義了不同的**抽象層級**

```java
資料 -> 物件 (具體) -> 類別 -> 抽象類別 -> 介面
```

《思考》為什麼由高階的抽象開始思考不好呢？

→ 如果不這麼做，會怎麼樣呢？例如：一言不合就開類別、界面？為什麼而開，但沒有依據，極可能包含著幻想的成份。

由高階的抽象開始，容易 over design。相反地，由具體的物件開始，再將它們**分類**成類別，基於對於「事實」的觀測，而開出的類別是「富有依據」的。

> 設計決策 → 富有根據
> 

recap: 由下列的順序，在有需要的時候一層一層往上粹取，即為**富有根據**的設計決策：

```java
資料 -> 物件 (具體) -> 類別 -> 抽象類別 -> 介面
```

**活動**：找出需求中的名詞，再分辨出哪些是物件？哪些是類別？

## UML:: Class Diagram

- 依賴：發生在行為中的一瞬間
- 關聯：has-a 超過一瞬間
- 繼承：Is-a、一般化 (generalization)

類別的關係由強至弱，恰為上面的順序由繼承至依賴。解耦就是將關係由強降至弱，甚至沒有的方向。