บทที่ 7: การเขียนโปรแกรมเชิงวัตถุ (Object-Oriented Programming - OOP)
1. แนวคิดของการเขียนโปรแกรมเชิงวัตถุ
การเขียนโปรแกรมเชิงวัตถุ (OOP) เป็นแนวคิดที่ใช้ คลาส (Class) และ วัตถุ (Object) เพื่อจัดกลุ่มข้อมูลและฟังก์ชันเข้าด้วยกัน ทำให้โค้ดเป็นระเบียบและนำกลับมาใช้ใหม่ได้ง่าย
ตัวอย่างโค้ดการสร้างคลาสและวัตถุ
class Animal:
def __init__(self, name, sound):
self.name = name
self.sound = sound
def make_sound(self):
print(f"{self.name} ส่งเสียง {self.sound}")
# สร้างวัตถุ
cat = Animal("แมว", "เหมียว")
dog = Animal("สุนัข", "โฮ่ง")
cat.make_sound()
dog.make_sound()
graph TD; A(สร้างคลาส Animal) -->|มีคุณสมบัติ name และ sound| B(สร้างวัตถุแมวและสุนัข); B --> C(เรียกใช้เมธอด make_sound);
2. Inheritance (การสืบทอดคุณสมบัติ)
Inheritance คือการที่คลาสหนึ่งสามารถสืบทอดคุณสมบัติและพฤติกรรมจากอีกคลาสหนึ่งได้
ตัวอย่างโค้ด
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass # ให้คลาสลูกกำหนดเอง
class Cat(Animal):
def speak(self):
return "เหมียว"
class Dog(Animal):
def speak(self):
return "โฮ่ง"
cat = Cat("แมว")
dog = Dog("สุนัข")
print(f"{cat.name} ส่งเสียง {cat.speak()}")
print(f"{dog.name} ส่งเสียง {dog.speak()}")
graph TD; A(คลาส Animal) -->|สืบทอด| B(คลาส Cat); A -->|สืบทอด| C(คลาส Dog);
3. Polymorphism (พหุสัณฐาน)
Polymorphism ช่วยให้สามารถใช้เมธอดเดียวกันกับคลาสต่างๆ ได้ แม้ว่าจะทำงานต่างกัน
ตัวอย่างโค้ด
class Bird:
def fly(self):
return "บินได้"
class Penguin(Bird):
def fly(self):
return "บินไม่ได้ แต่เดินได้"
animals = [Bird(), Penguin()]
for animal in animals:
print(animal.fly())
graph TD; A(คลาส Bird) -->|สืบทอด| B(คลาส Penguin); B -->|เปลี่ยนพฤติกรรม fly| C(บินไม่ได้แต่เดินได้);
4. สร้างเกมง่ายๆ โดยใช้ OOP
ตัวอย่าง: เกมตัวละครโจมตีศัตรู
class Character:
def __init__(self, name, attack_power):
self.name = name
self.attack_power = attack_power
def attack(self, enemy):
print(f"{self.name} โจมตี {enemy.name} ด้วยพลัง {self.attack_power}")
player = Character("ผู้เล่น", 10)
enemy = Character("ศัตรู", 5)
player.attack(enemy)
graph TD; A(สร้างคลาส Character) -->|กำหนดชื่อและพลังโจมตี| B(สร้างตัวละครผู้เล่น); A -->|กำหนดชื่อและพลังโจมตี| C(สร้างตัวละครศัตรู); B -->|ใช้เมธอด attack| C;
โจทย์ท้ายบท
- สร้างคลาส
Car
ที่มีbrand
และspeed
และเมธอดdrive()
ที่พิมพ์ว่ารถวิ่งที่ความเร็วเท่าใด - สร้างคลาส
Student
ที่มีname
และscore
และเมธอดshow_info()
ที่แสดงข้อมูลนักเรียน - สร้างคลาส
BankAccount
ที่มีbalance
และเมธอดdeposit(amount)
และwithdraw(amount)
- สร้างเกมง่ายๆ ที่มีคลาส
Player
และEnemy
โดยให้Player
สามารถโจมตีEnemy
- ใช้ Inheritance สร้างคลาส
Rectangle
และSquare
โดยSquare
สืบทอดจากRectangle