第15天:面向對象程式設計(OOP)入門
課程簡介
面向對象程式設計(OOP)是一種常用的編程範式,將程式分為物件與類別。物件是類別的具體實例,而類別則定義了物件的屬性和方法。OOP 強調程式的模組化、可重用性和維護性。今天我們將學習 OOP 的基本概念,包括類別、物件、屬性與方法,以及如何創建自己的類別和物件。
學習內容
1. 物件與類別
- 類別(Class) 是對事物的抽象,定義了該類事物的屬性(變數)和行為(方法)。
- 物件(Object) 是類別的實例,擁有類別定義的屬性和方法。
範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
# 定義一個類別
class Dog:
def __init__(self, name, age):
self.name = name # 屬性
self.age = age # 屬性
def bark(self): # 方法
print(f"{self.name} is barking!")
# 創建一個物件
my_dog = Dog("Buddy", 5)
print(my_dog.name) # 輸出: Buddy
my_dog.bark() # 輸出: Buddy is barking!
2. __init__()
方法
__init__()
方法是類別的建構函數(constructor),在創建物件時自動執行,用來初始化物件的屬性。self
參數代表物件本身,必須是方法的第一個參數。
範例:
1
2
3
4
5
6
7
class Car:
def __init__(self, brand, model):
self.brand = brand
self.model = model
my_car = Car("Toyota", "Corolla")
print(my_car.brand) # 輸出: Toyota
3. 屬性與方法
- 屬性(Attributes) 是物件的變數,描述物件的特性。
- 方法(Methods) 是物件的行為,描述物件可以執行的操作。方法是定義在類別中的函數。
範例:
1
2
3
4
5
6
7
8
9
10
11
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"My name is {self.name}, and I am {self.age} years old.")
# 創建物件並使用屬性和方法
person = Person("Alice", 30)
person.introduce() # 輸出: My name is Alice, and I am 30 years old.
4. 類別變數與實例變數
- 實例變數 是屬於物件的變數,不同物件之間的實例變數是相互獨立的。
- 類別變數 是屬於整個類別的變數,所有物件共享同一個類別變數。
範例:
1
2
3
4
5
6
7
8
9
10
11
12
class Employee:
company = "ABC Corp" # 類別變數
def __init__(self, name, salary):
self.name = name # 實例變數
self.salary = salary # 實例變數
emp1 = Employee("John", 5000)
emp2 = Employee("Jane", 6000)
print(emp1.company) # 輸出: ABC Corp
print(emp2.company) # 輸出: ABC Corp
5. 繼承(Inheritance)
繼承允許一個類別從另一個類別繼承屬性和方法,這使得子類別能夠擴展或修改父類別的功能。
範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name} makes a sound.")
# Dog 繼承 Animal
class Dog(Animal):
def speak(self): # 重寫父類別的方法
print(f"{self.name} barks.")
my_dog = Dog("Buddy")
my_dog.speak() # 輸出: Buddy barks.
6. 多型(Polymorphism)
多型允許同一方法在不同類別中有不同的實現,這使得我們可以使用相同的介面來處理不同的物件。
範例:
1
2
3
4
5
6
7
8
9
10
class Cat(Animal):
def speak(self):
print(f"{self.name} meows.")
animals = [Dog("Buddy"), Cat("Whiskers")]
for animal in animals:
animal.speak()
# Buddy barks.
# Whiskers meows.
7. 封裝(Encapsulation)
封裝是一種將屬性和方法保護起來的技術,使用 _
來定義保護屬性 或 __
開頭來定義私有屬性或方法,這些屬性和方法只能在類別內部訪問。
範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class BankAccount:
def __init__(self, owner, balance):
self.owner = owner
self.__balance = balance # 私有變數
def deposit(self, amount):
self.__balance += amount
def get_balance(self):
return self.__balance
account = BankAccount("Alice", 1000)
account.deposit(500)
print(account.get_balance()) # 輸出: 1500
教學重點
- 類別與物件:理解類別與物件的基本概念,學會創建類別和物件。
- 屬性與方法:瞭解如何定義物件的屬性和方法,並透過
__init__()
初始化物件。 - 繼承與多型:學會如何使用繼承和多型來擴展類別的功能和重用程式碼。
- 封裝:了解如何使用封裝來保護物件的資料,並在類別內部進行管理。
任務
- 創建一個類別
Book
,包含書名和作者的屬性,以及一個方法display()
,用來顯示書籍資訊。 - 創建一個類別
Employee
,包含員工姓名和薪水的屬性,並添加一個give_raise()
方法來增加薪水。 - 創建一個類別
Vehicle
,定義速度和顏色的屬性,然後建立一個子類別Car
,新增座位數屬性並重寫display_info()
方法來顯示車輛資訊。 - 創建一個
BankAccount
類別,並使用封裝來保護帳戶餘額,定義存款和取款方法。
本文章以 CC BY 4.0 授權