---
# System prepended metadata

title: 物件導向 Object Orient Programming

---

# 物件導向 Object Orient Programming
## 概念
* Abstraction(抽象)
* Modularity(模組化)：將大問題分成許多小問題
### Class(類別)
* 定義物件
* 由欄位(fields)和方法(methods)組成
### Object(物件)
* 把 Class 實例出來
## 目的
* 穩定一致
* 可調整
* 重複使用
## 特性
* Encapsulation(封裝)：只需要會使用，不用知道內部結構
* Inheritance(繼承)：子類別繼承父類別。目的：重複使用 code
    ```
    Class Human:
        def __init__(self, name):
            self.name = name
        def watch(self):
            return "I can watch."
        def talk(self):
            return "I can talk."
    Class Player(Human):
        def __init__(self, name, record):
            super().__init__(name)
            self.record = record
        def shoot(self):
            return "I shoot a basketball."
    ```
* Polymorphism(多型)：多個相同名稱的方法，傳入不同的參數，會執行不同的敘述，包含多載(Overloading)和複寫(Overriding)
    * Overloading(多載)：在相同類別中，定義名稱相同，但是參數個數不同，或是參數型態不同的函式。
    ```
        Class Player(Human):
        def __init__(self, name, record):
            super().__init__(name)
            self.record = record
        def shoot(self):
            return "I shoot a basketball."
        def shoot(self, a):
            return f"I shoot and get {a} point(s)"
        *shoot 名字一樣，給的參數個數不同
    ```
    * Overriding(複寫)：指在子類別中，覆寫掉父類別中的函式。
    ```
    Class Human:
        def jump(self):
        return "I jump."
    Class Player(Human):
        def jump(self):
            return "I can really jump high"
    *A player jump in a different way
    ```

參考資料：https://totoroliu.medium.com/物件導向-object-oriented-programming-概念-5f205d437fd6