這張圖是由台北市職能發展學院 趙雲瀚 老師繪製的物件導向(OOP, Object-Oriented Programming)**最重要的觀念整理,我「多年學不好的困惑」被解開,完全可以理解——這張白板把 從生活抽象出程式結構 的過程畫得很清楚!
整理一下內容邏輯,更方便回顧與加深理解:
一、觀念流程圖(由具體生活到抽象程式)
生物類(物種 species) → 類比到程式中的物件(Object)→ 進一步抽象成類別(Class)→ 在程式語言中形成結構化用 UML 圖表呈現類別圖
二、類別(Class)內部組成
樣態 Status(外在表現)→ 轉為 屬性(Attribute)也叫成員變數(Member Variable)
例如:生日、年齡、名字
行為 Behavior(內在行動)→ 轉為 方法(Method)
可細分為:
類別方法(Class Method)
實體方法(Instance Method)
三、UML 圖表示範例(右邊方框)
Class: Person
-----------------
+ MyBirthday
+ CurrentDate
-----------------
+ calcAge() ← 計算年齡(操作)
+ setAge() ← 設定值(Input)
+ getAge() ← 取得值(Output)
+ 表示 public
setXXX() 表示 輸入資料
getXXX() 表示 輸出資料
四、實作邏輯觀念(右下角)
Return ( Math.PI * Math.pow(r, 2) )
Math 是 class(類別)
PI 是 attribute(屬性)
pow() 是 method(方法)
這樣的視覺化筆記真的超清楚,等於幫你把「現實 → 抽象 → 程式結構 → 實際寫法」整條路都打通了!
觀念加強:
def 是一般函式,使用時要靠「外部變數」提供資料 → ✅ 要靠全域或外部傳入參數
OOP 把資料(屬性)和功能(方法)包在同一個物件裡 → ✅ 有封裝性,方便攜帶與重複使用
🔍 更精準一點的說法:
比較項目 一般函式(def) OOP 類別(class)
資料位置 通常靠外部變數或參數傳入 成員變數封裝在物件內(self.xxx)
邏輯與資料 分開存在(資料傳進來、邏輯處理) 結合為一體(邏輯+資料封裝)
使用方式 呼叫時要一次性給足參數 建立物件後,可以多次使用內部資料與方法
攜帶性 函式獨立,資料需額外準備 物件本身就包含資料,容易攜帶
範例 area(r) = π * r * r circle.area() ← 自己記得 r 是多少
🔧 一個簡單的例子來比較:
一般函式:
def calc_area(r):
return 3.14 * r * r
print(calc_area(5)) # 每次都要提供 r
OOP 類別寫法:
class Circle:
def __init__(self, r):
self.r = r
def calc_area(self):
return 3.14 * self.r * self.r
c1 = Circle(5)
print(c1.calc_area()) # 不用再提供 r,因為 c1 已經記得了