Object Oriented Programming (OOP) คือวิธีการออกแบบโปรแกรมที่ใช้การมองข้อมูลในรูปแบบที่เรียกว่า "object" โดยที่ object มีองค์ประกอบสำคัญสองส่วนคือ "properties" (บางที่ใช้คำว่า attributes) และ "behaviors" (บางทีใช้คำว่า method)
Properties ใช้กำหนดสถาะหรือ state ของ object หรือมองว่าเป็นที่เก็บข้อมูลของ object ก็ได้ ข้อมูลอาจมีโครงสร้างมาตรฐานเช่น integer, byte, float หรือ โครงสร้างที่ผู้ออกแบบโปรแกรมกำหนดก็ได้
Behaviors คือ actions หรือ กริยา ที่ object แสดงออก หรือการปรับปรุงสถานะของ properties ก็ได้
Class โดยทั่วไปหมายถึงโครงสร้างข้อมูล (user-defined data structures) ที่ใช้เก็บข้อมูลของบางสิ่ง (something) เช่น หากเราต้องการจัดเก็บข้อมูลเกี่ยวกับสัตว์เลี้ยงในฟาร์ม เราอาจสร้าง class ที่เรียกว่า Animal ขึ้นมา เป็นต้น
ที่ต้องเข้าใจคือ class นำเสนอในมุมมองเชิงโครงสร้าง (หรืออาจเรียกว่า พิมพ์เขียว) ช่วยสร้างความเข้าใจว่า properties และ behavior ใดบ้างที่ควรมี ยังไม่กำหนดลงไปในรายละเอียดของ behavior และ properties ซึ่งรายละเอียดเราจะไปกำหนดไว้ใน "instance" หรือ สำเนาของ class ภายหลัง
ยกตัวอย่าง ถ้าเราพูดถึง "Dog" ซึ่งเป็นคำกว้าง ๆ ซึ่งอาจมองได้ว่า Dog ก็คือ class หนึ่งได้
https://en.wikipedia.org/wiki/Dog#/media/File:Collage_of_Nine_Dogs.jpg |
ถ้าเขียนเป็นภาษา Python จะได้เป็น
class Dog():
pass
พิจารณาว่า Dog ตัวหนึ่งควรมีคุณสมบัติอะไรได้บ้าง เช่น
- breed (สายพันธุ์)
- name (ชื่อ)
- color (สีเด่น)
- weight (น้ำหนัก)
- height (สูง)
- ฯล
แปลงข้อมูลเหล่านี้เป็น properties ของ class Dog
class Dog():
breed = None
name = None
color = None
weight = None
height = None
ต่อไปลองพิจารณา behavior หรือกิจกรรมกันบ้าง กิจกรรมในที่นี้ไม่ได้หมายถึงกิจกรรมที่สุนัขจริงทำได้ เช่น วิ่ง เห่า กระดิกหาง ฯล แต่เป็นกิจกรรมที่ทำให้เกิดการเปลี่ยนแปลงหรือรับทราบสถานะของ property ได้แก่
- set name (ตั้งชื่อ)
- get name (ถามชื่อ)
- set color (กำหนดสี)
- get color (ถามสี)
- set weight (บันทึกค่าของน้ำหนัก)
- get weight (สอบถามค่าของน้ำหนัก)
- set breed (กำหนดสายพันธ์ุ)
- get breed (สอบถามสายพันธุ์)
- ฯล
แปลงข้อมูล behavior ให้อยู่ในรูปของภาษา Python
class Dog():
def set_name():
pass
def get_name():
pass
def set_color():
pass
def get_color():
pass
def set_weight():
pass
def get_weight():
pass
def set_breed():
pass
def get_breed():
pass
สุดท้ายเราจะได้ภาพรวมของ class Dog ดังนี้
class Dog():
breed = None
name = None
color = None
weight = None
height = None
def set_name(self):
pass
def get_name():
pass
def set_color():
pass
def get_color():
pass
def set_weight():
pass
def get_weight():
pass
def set_breed():
pass
def get_breed():
pass
มาถึงการสร้างสำเนาหรือ Instance ของ class เพื่อนำไปใช้งานบ้าง ถ้าเรามีข้อมูลของสุนัขที่เลี้ยงไว้ดังนี้
breed: Beagle name : Bobby color: Brown weight: 5 height: 30 |
|
breed: Bernese name : Jimmy color: Black weight: 15 height: 110 |
สุนัขสองตัวนี้ต่างสี ต่างสายพันธ์ุ กันแต่ก็เป็นสุนัขทั้งคู่ แนวคิดของ OOP จะมองว่าทั้งสองเป็น instance ที่มาจาก class เดียวกันได้ และความต่างนั้นก็จะถูกระบุไว้ใน property แปลงความคิดนี้สู่ภาษา Python
bobby = Dog()
jimmy = Dog()
code ตัวอย่างนี้ ได้สร้าง instance ของ class Dog ขึ้นมาสอง instance โดยให้อยู่ในรูปของตัวแปรชื่อ bobby และ jimmy โดยที่ทั้งสองจะได้รับ property และ behavior จาก class Dog มาเหมือนกัน ในขั้นตอนนี้เรายังไม่สามารถแยกแยะความต่างของ instance ทั้งสองได้ แต่หลังจากที่กำหนดค่าให้กับ property แล้ว เราก็จะสามารแยกแยะได้
bobby.name = "Bobby"
bobby.color = "Brown"
bobby.wight = 5.0
bobby.height = 30.0
bobby.breed = "Beagle"
jimmy.name = "Jimmy"
jimmy.color = "Black"
jimmy.wight = 15.0
jimmy.height = 110.0
jimmy.breed = "Bernese"
หากสมมุติว่าภายหลังต้องการปรับปรุงข้อมูลบางอย่างเช่น เปลี่ยนชื่อ น้ำหนัก หรือส่วนสูงของสุนัขบางตัว ก็จะสามารถแก้ไขได้ทันทีโดยไม่ส่งผลต่อข้อมูลของสุนัขตัวอื่นจะเห็นได้ว่าแนวคิดการสร้าง instance จาก class ทำให้เกิดความเป็นอิสระต่อกันระหว่าง instance ในการปรับปรุงข้อมูล ในขณะเดียวกันแต่ละ instance ก็ยังมี behavior ที่ทำงานได้เหมือนกัน
Sign up here with your email
ConversionConversion EmoticonEmoticon