Python 101 : OOP ตอนที่ 1

อะไรคือ Object Oriented Programming

Object Oriented Programming (OOP)  คือวิธีการออกแบบโปรแกรมที่ใช้การมองข้อมูลในรูปแบบที่เรียกว่า  "object"  โดยที่ object มีองค์ประกอบสำคัญสองส่วนคือ "properties" (บางที่ใช้คำว่า attributes) และ "behaviors" (บางทีใช้คำว่า method)


Properties ใช้กำหนดสถาะหรือ state ของ object หรือมองว่าเป็นที่เก็บข้อมูลของ object ก็ได้ ข้อมูลอาจมีโครงสร้างมาตรฐานเช่น integer, byte, float หรือ โครงสร้างที่ผู้ออกแบบโปรแกรมกำหนดก็ได้
Behaviors คือ actions หรือ กริยา ที่ object แสดงออก หรือการปรับปรุงสถานะของ properties ก็ได้

Class in Python
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 ที่ทำงานได้เหมือนกัน



Previous
Next Post »