Object-Oriented Programming (OOP)
ความหมายของ OOP (Object-Oriented Programming)
OOP (Object-Oriented Programming) หมายถึงการเขียนโปรแกรมเชิงวัตถุหรือเขียนโปรแกรมแบบออบเจ็กต์ ซึ่งมีวิธีการของการจัดโครงสร้างโปรแกรมเพื่อให้คุณสมบัติและพฤติกรรมหรือการกระทำรวมอยู่ในแต่ละวัตถุ [Lut11] ตัวอย่างเช่น วัตถุอาจเป็นตัวแทนของบุคคลที่มีคุณสมบัติ คือ ชื่อ นามสกุล อายุ ที่อยู่ และมีพฤติกรรม เช่น การเดิน การพูด การหายใจ และการวิ่ง เป็นต้น
คลาส (Classes) และ ออบเจ็กต์ (Objects)
คลาส (Classes)
เปรียบเสมือนแบบพิมพ์เขียวหรือแม่พิมพ์ที่ใช้สร้างออบเจ็กต์ (Objects)
ในคลาสจะกำหนดรูปแบบของข้อมูลหรือแอตทริบิวต์หรือตัวแปร
(Attributes/Properties/Characteristics) และเมธอด (Methods/Behaviors)
ตัวอย่างเช่น คลาสชื่อ Pet
มีแอตทริบิวต์คือ legs
ส่วน wolf
คือ ออบเจ็กต์ที่สร้างขึ้น มาจากคลาส ดังตัวอย่างต่อไปนี้
class Pet: # define a class pet
legs = 0 # a property for the class
wolf = Pet() # create an object of the class
wolf.legs # access to a property of the object
การสร้างคลาส
การสร้างคลาสในภาษาไพทอนต้องใช้คำสั่ง class ตามด้วยชื่อคลาส ดังตัวอย่างต่อไปนี้
class Pet: #define a class pet
legs = 0 #a property for the class
การสร้างออบเจ็กต์
หลังจากที่สร้างคลาสแล้ว ก็จะสามารถสร้างตัวแปรออบเจ็กต์จากคลาสได้ เช่น
wolf = Pet()
โดยออบเจ็กต์นี้จะมีแอตทริบิวต์คือ legs
และสามารถเข้าถึงแอตทริบิวต์ของออบเจ็กต์ได้โดยใช้เครื่องหมายจุด (.)
ดังตัวอย่างต่อไปนี้
wolf = Pet() # create an object of the class
print(wolf.legs) # access to a property of the object
ฟังก์ชัน __init__()
ฟังก์ชัน __init__()
เรียกว่าเป็นคอนสตรัคเตอร์ (Constructor)
ซึ่งถูกเรียกใช้อัตโนมัติทุกครั้ง
ในการกำหนดค่าให้แก่แอตทริบิวต์ของออบเจ็กต์และการดำเนินการต่างๆที่จำเป็นเมื่อต้องสร้างออบเจ็กต์ขึ้นมา
และสำหรับพารามิเตอร์ self มีไว้เพื่อการเข้าถึงตัวแปรต่างๆ
ที่เป็นของคลาส โดยที่ไม่จำเป็นต้องใช้คำว่า self ก็ได้
สามารถตั้งเป็นคำอื่นได้ ดังตัวอย่างต่อไปนี้
class Person:
name = None
gender = None
#Define the constructor
def __init__(self, n, g):
self.name = n
self.gender = g
#Main code starts here
p1 = Person('Mike', 'male') # create object p1
p2 = Person('Jan', 'female') # create object p2
การสร้างเมธอดของออบเจ็กต์
เมธอดในออบเจ็กต์ก็คือฟังก์ชันที่เป็นของออบเจ็กต์นั้น ในตัวอย่างเป็นการสร้างเมธอด foo เพื่อทำการ print คำว่า Hello แล้วตามด้วยชื่อ เมื่อออบเจ็กต์จะเรียกใช้เมธอดก็ให้เขียนชื่อออบเจ็กต์นั้นตามด้วยจุดแล้ว จึงตามด้วยชื่อเมธอด ดังตัวอย่างต่อไปนี้
class Person:
name = None
gender = None
def __init__(self, n, g):
self.name = n
self.gender = g
def foo(self):
print('Hello' , self.name)
#Main code starts here
p1 = Person('Mike', 'male')
p2 = Person('Jan', 'female')
p1.foo()
p2.foo()
ซึ่งได้ผลลัพธ์ดังนี้
Hello Mike Hello Jan
การแก้ไขค่าของแอตทริบิวต์ของออบเจ็กต์
การแก้ไขค่าของแอตทริบิวต์ของออบเจ็กต์สามารถทำได้เหมือนการกำหนดค่าของตัวแปร ดังตัวอย่างต่อไปนี้
>>> p1.name = 'Ton-mike'
>>> p1.foo()
Hello Ton-mike
การลบแอตทริบิวต์ของออบเจ็กต์
การลบแอตทริบิวต์ของออบเจ็กต์ให้ใช้คำสั่ง del ตามด้วยแอตทริบิวต์ของออบเจ็กต์นั้น ดังตัวอย่างต่อไปนี้
>>> del p1.name
>>> p1.foo()
Hello None
การลบออบเจ็กต์
การลบออบเจ็กต์ทำได้โดยใช้คำสั่ง del
ตามด้วยชื่อของออบเจ็กต์ได้เลย ดังตัวอย่างต่อไปนี้
>>> del p1
>>> p1
Traceback (most recent call last):
File "<pyshell\#29>", line 1, in <module>
p1
NameError: name 'p1' is not defined
การสืบทอดคลาส (Class Inheritance)
การสืบทอดคลาส (Class Inheritance)
คือการที่คลาสหนึ่งสามารถสืบทอดเมธอดและแอตทริบิวต์
ของคลาสนั้นไปยังคลาสอื่นได้
เรียกคลาสที่เป็นฐานหรือให้การสืบทอดนั้นว่าคลาสแม่ (Parent class) และ
เรียกคลาสที่ได้รับการสืบทอด ว่าคลาสลูก (Child class) ตัวอย่าง
คลาสแม่คือ SchoolMember
ได้มีการ สืบทอดเมธอดและ แอตทริบิวต์
ไปยังคลาสลูกคือคลาส Teacher
หลังจากนั้นคลาสลูกก็จะสามารถใช้เมธอด
และแอตทริบิวต์ของคลาสแม่ได้ ดังตัวอย่างต่อไปนี้
#Define the class Teacher. It inherits from class SchoolMember
class Teacher(SchoolMember):
def __init__(self, name, age, salary):
SchoolMember.__init__(self, name, age)
self.salary = salary
#Main code
teacher1 = Teacher('Mr. Mike Piyawat', 47, 50000)
teacher2 = Teacher('Mrs. Jane Doe', 55, 120000)
print(teacher1.name)
print(teacher1.age)
print(teacher1.salary)
print('\n')
print(teacher2.name)
print(teacher2.age)
print(teacher2.salary)
ซึ่งได้ผลลัพธ์ดังนี้
Mr. Mike Piyawat
47
50000
Mrs. Jane Doe
55
120000
แบบฝึกหัด
เขียนคลาสชื่อว่า Pet ประกอบด้วย
คอนสตรัคเตอร์ (Constructor)
แอตทริบิวต์ genre
แอตทริบิวต์ legs
เมธอด
start_running
แสดงผลทางหน้าจอว่า “Start running”เมธอด
stop_running
แสดงผลทางหน้าจอว่า “Stop running”
จากข้อ 1 ให้เขียนโปรแกรมเพื่อสร้างออบเจ็กต์จากคลาส Pet สองออบเจ็กต์ แล้วเรียกใช้เมธอดที่มี