OOP และ Data Driven

อนรรฆ อำไพวิทย์ – 1 มิถุนายน 2558

OOP

OOP หรือ Object Oriented Programming คือการเขียน code โดยการมองทุกสิ่งให้เป็น Object ที่มีคุณสมบัติของตัวเอง และสามารถนำ Object นี้ไปใช้งานได้เมื่อไหร่ก็ได้ตามต้องการ โดยไม่ต้องเขียนการทำงานนั้นใหม่ทั้งหมด

คุณลักษณะของ OOP

Inheritance :  คือการที่ object สอง object สามารถมีความสามารถสืบทอดกันได้ เช่น object สิ่งมีชีวิต นั้นมีความสามารถในการเคลื่อนที่ได้ ดังนั้น object มนุษย์ หรือสุนัข ก็สามารถสืบทอดมาจาก สิ่งมีชีวิตได้ เนื่องจากมีความสามารถเดียวกัน แต่ object ที่มีความสามารถเหมือนกัน ภายในอาจมีความสามารถเพิ่มเติมก็ได้ และในความสามารถเดิมที่มีก็สามารถมีรายละเอียดเพิ่มเติมได้ เช่น มนุษย์ และ นก สืบทอดมาจาก สิ่งมีชีวิต ซึ่งมีความสามารถในการเคลื่อนที่ แต่นก จะสามารถเคลื่อนที่ได้ด้วยการบินด้วย เป็นต้น

Encapsulation : คือความสามารถในการห่อหุ้ม ปกป้อง และทำให้สภาพแวดล้อมภายใน  object นั้นๆ ไม่ปะปนกับภายนอก เช่น การประกาศตัวแปรที่อยู่ภายใน method ก็ไม่สามารถนำมาใช้ภายนอกได้

Abstraction : คือการกำหนดโครงสร้างความสามารถของ object นั้นๆ ว่าสามารถทำอะไรได้บ้างโดยยังไม่มองลึกลงไปว่า ทำยังไง

Polymorphism : คือความสามารถในการเปลี่ยนแปลงตามสถานะการที่กำหนด เช่น หากเราสร้าง Methed ขึ้นมา เพื่อรองรับการทำงานอย่างหนึ่ง เช่น การวาดรูปวงกลม แต่หากเรามีการวาดรูปอื่นๆด้วย เราก็ควรจะสร้าง Method นี้ ให้สามารถรองรับการสร้างรูปแบบอื่นๆ เช่น สี่เหลี่ยม สามเหลี่ยม เพราะฉะนั้น แทนที่เราจะสร้าง
def วาดรูปวงกลม เราก็จะสร้าง def วาดรูป(x) โดย x อาจจะเท่ากับ circle, triangle, rectangle หรืออะไรก็ตามที่มีคุณสมบัติ writable

Data Driven

Data Driven คือการสร้างการทำงาน โดยกำหนดการทำงานต่างๆ จาก input data ที่ได้รับ แทนที่จะ if else เพื่อเลือกการทำงาน เช่น การใช้ hash เข้ามาช่วย

ตัวอย่างง่ายๆ เพื่อเปรียบเทียบระหว่างการทำ if, else และ data driven

เดิม input =x
if x = คน
puts คนนะ
else if x = หมา
puts หมานะ
else if x = แมว
puts แมวนะ

จะกลายเป็น
test = { คน => คนนะ , หมา => หมานะ , แมว => แมวนะ ​}

test[input]

เพราะฉะนั้น หากรับ input มา ก็จะสามารถ index ไปที่การทำงานได้โดยตรง ไม่ต้องสิ้นเปลืองในการทำ if else เป็นขั้นตอน และสามารถเพื่อ case ใหม่ๆได้ง่ายๆ ซึ่งนอกจาก hash แล้วยังรวมถึงรุปแบบการทำงาน แทนที่เราจะรับข้อมูลมาโดยไม่มีอะไรเลย และมาสร้างการทำงานทีหลังเอา เราอาจจะ รับข้อมูลมา และใส่ index ที่ข้อมูลนั้น เพื่อให้ข้อมูลนั้น สามารถเรียก method ที่เหมาะสมมาทำงานได้ทันที