/ OOP

[365 วันแห่งโปรแกรม #day7] Principles of OOP (ตอนที่ 2)

วันที่เจ็ดของ ‪#‎365วันแห่งโปรแกรม‬ วันนี้เราจะมีคุยกันเรื่อง Principles of OOP (ตอนที่ 2)
ครั้งที่แล้วเราพูดกันในเรื่อง หลักการข้อแรกของ OOP นั้นก็คือ Inheritance วันนี้เราจะมาต่อกันในข้อ 2 นั่นคือ Abstraction


Abstraction มาจากคำในภาษาละติน 2 คำ คือ abs ที่หมายถึง away from และคำว่า trahere ที่หมายถึง draw รวมๆ แล้วน่าจะได้ความหายประมาณว่า

การตัดสิ่งที่ไม่จำเป็นทิ้งไป คงเหลือไว้เฉพาะสิ่งที่สนใจ/สำคัญเท่านั้น เพื่อลดความซับซ้อนลง 

ตัวอย่างเช่น ไม่ว่าทีวีเครื่องไหนๆ เราก็สามารถเปิดดูได้ทั้งนั้น เรารู้แค่ว่าทีวีทำอะไรได้ เราไม่ได้ให้ความสนใจเฉพาะรุ่น ว่ารุ่นนี้ทำอย่างนู้นอย่างนี้ได้นะ และเราก็ไม่จำเป็นต้องรู้อีกว่าทีวีทำงานยังไง อีกตัวอย่างหนึ่งคือการนัดเจอกับคนไม่รู้จัก เราจะบอกข้อมูลกับเขาแค่ว่า เราใส่เสื้อสีอะไร กางเกงแบบไหน เพราะเขารู้แค่นั้นก็หาได้ง่านขึ้นแล้ว ถึงเราจะบอกเลขบัตรประชาชน รอยสิวที่หน้า ลายนิ้วมือ ตำหนิที่เล็บเท้า มันก็ไม่ได้ช่วยให้เขาหาเราเจอง่ายขึ้น Abstraction ในโปรแกรมมิ่งก็เป็นแบบนั้นแหละ กล่าวคือ Abstraction เป็นเทคนิคที่ใช้ในการ identify วัตถุ

ตัวอย่างในโปรแกรมมิ่งที่เห็นได้ชัดคือ Interface และ Abstract Class ที่ implement แนวคิดของ Abstraction ไปใช้ในการกำหนดคุณสมบัติพื้นฐานของวัตถุ โดยใช้ Abstract method/action ในการกำหนดว่าวัตถุนี้ต้องทำอะไรบ้าง แต่ไม่ได้บอกว่าทำงานยังไง ปลอ่ยให้เอาไป implement กันเองภายหลัง

ตัวอย่างเกี่ยวกับโปรแกรมมิ่ง เช่น เราสร้างเกม RPG ที่มีมอนสเตอร์ และผู้เล่นเป็น object หลักของเกม เมื่อผู้เล่นเดินผ่านฝูงมอนสเตอร์ มอนสเตอร์ที่อยู่ในโหมด Aggressive จะรีบวิ่งเข้ามารุมโจมตีทันที เวลาเราเขียนโปรแกรม เราไม่ได้สนใจว่ามอนสเตอร์ตัวนั้นคืออะไร เราสนใจแค่ว่ามันเป็น มอนสเตอร์ที่ Aggressive อยู่ เราก็แค่หาว่ามีตัวไหนอยู่ใกล้ แล้วสั่งให้มันเดินมาโจมตี แค่นั้น

เล่าจบแล้วก็ยังงงๆ อยู่ เพราะจริงๆ แล้ว เรื่องนี้มันใกล้ชิดกับ Encapsulation และ Data Hiding มาก จนแยกกันแทบไม่ออก ><

‪#‎day7‬ #365วันแห่งโปรแกรม ‪#‎โครงการ365วันแห่ง‬...