polymorphism คืออะไร? หลักการที่โปรแกรเมอร์ต้องรู้

polymorphism คือ

Polymorphism คือหลักการข้อที่ 4 ของ OOP หรือ Object-Oriented Programming โดย OOP concept ประกอบ ด้วยหลักการสี่อย่าง คือ encapsulation, abstraction, inheritance และ polymorphism ก่อนจะเข้าใจ Polymorphism เรามาทำความเข้าใจ Inheritance กันก่อน

เข้าใจเรื่อง Inheritance ก่อน

คำอธิบายโดยย่อ

แนวคิดในการแชร์  Logic ที่เหมือนกันระหว่าง class โดยการสืบทอดความสามารถจาก parent class ไปยัง child class

คำอธิบายฉบับบเต็ม 

อีกเรื่องหนึ่งที่เป็นปัญหาของการเขียน OOP คือ Object ที่เขียนขึ้นมานั้นคล้ายกันมาก โดยมีการใช้ Logic เดียวกันแต่ไม่ได้เหมือนกันทั้งหมด

Inheritance concept ถูกนำมาช่วยให้เราสามารถ ใช้งาน. Logic ที่เหมือนกันร่วมกันได้ และแยกส่วนที่ต่างกันออกไปในแต่ละ classs

Inheritance แปลเป็นไทยว่าการสืบทอด concept คือการสร้าง (child) class ที่สืบทอดมาจากอีก (parent) class หนึ่ง Child class โดย child class สามารถใช้ field และ method ของ parent class ได้ และ สามารถเพิ่มเติมส่วนที่เป็นเอกลักษณ์ของตัวเองลงไป

oop-คือ-หลักการ-inheritance

 

อย่างที่เห็นว่ามีการ  reuse common logic กันและเพิ่มเติมเฉพาะส่วนที่สำคัญ  คือ Dog, Cat และ Bird จะสืบทอด  field ไปจาก Pet ซึ่งเป็น parent class และ reuse ข้อมูลส่วนนี้ร่วมกันโดยไม่ต้องเขียนใหม่ได้ และ ยังเพิ่มเติม logic ที่เฉพาะเจาะจงต่อแต่ละ class ไปได้อีกเ เช่น ขนาดเขี้ยว และ ขนาดปีก

OOP ข้อสี่ Polymorphism คือ?

คำอธิบายโดยย่อ

ต่อเนื่องจาก Inheritance Polymorphism คือการที่ Parent class กำหนดคุณสมบัติไว้และให้ child class ไประบุรายละเอียดของคุณสมบัติเหล่านั้นเอง 

คำอธิบายฉบับเต็ม 

เมื่อมีการใช้ Inheritance แล้วลองนึกถึงสถานการณ์ที่เราต้องการเก็บ Child Class เข้าไปใน List โดยเราจะมองว่าทุก element ใน list มีคุณสมบัติเหมือนกัน แม้ว่าจะมีการระบุรายละเอียดที่แตกต่างกันก็ตาม เช่น สุนัข(Dog), แมว(Cat) และ นก(Bird) เราสามารถมองทั้งสามเป็นสัตว์เลี้ยงเหมือนกัน แต่ก็มีลักษณะที่แตกต่างกันอยู่ ในตัวอย่างนี้เราจะยกเรื่องการออกเสียงมาพูดถึง

oop-คือ-หลักการ-polymorphism

  • แม้ class dog (สุนัข) กับ class cat (แมว) จะมีคุณสมบัติสามารถเปล่งเสียงได้ แต่การเปล่งเสียงของทั้งสอง class ย่อมต่างกัน 
  • โดยการที่จะทำแบบนี้ได้ ต้องใช้ concept ของ polymorphism คือการที่ Parent class กำหนดคุณสมบัติไว้และให้ child class ไประบุรายละเอียดของคุณสมบัติเหล่านั้นเอง 

oop มีความสำคัญอย่างไร ?

การมีความเข้าใจในหลักการทั้งสี่ของ OOP หรือ Object-Oriented Programming จะทำให้เราสามารถเขียนโค้ดที่สะอาดตาอ่านง่ายและบำรุงรักษาง่ายยิ่งขึ้น และหลายครั้งที่มีการถามถึงเรื่องของ OOP ในการสัมภาษณ์งาน ตำแหน่ง Software Developer หรือ Programmer อีกด้วย ถ้าเราสามารถตอบพร้อมยกคัวอย่างประกอบได้อย่างชัดเจนแล้วก็จะถือเป็นแต้มบวกอย่างมาก

OOP ข้ออื่นๆนอกจาก Inheritance และ Polymorphism

OOP ข้อแรก Encapsulation คือ?

คำอธิบายโดยย่อ

Encapsulation คือการปกปิดข้อมูลโดย เก็บคุณสมบัติของ class ให้เป็น private และ ให้เข้าถึงหรือเปลี่ยนแปลงผ่านช่องทางที่เป็น public ที่เรากำหนดไว้เท่านั้น

คำอธิบายฉบับเต็ม

การที่จะเข้าหลักการ Encapsulation นั้นก็ต่อเมื่อ object เก็บ state ให้เป็น private อยู่ใน class โดย object อื่นๆจะไม่สามารถเข้าถึง state ที่เป็น private ได้โดยตรง แต่ถึงเข้าถึงผ่าน public function แทนที่นี้ลองมายกตัวอย่างเผื่ออธิบายชนิดที่เด็กประถมเข้าใจกัน

สมมุติว่าเรากำลังสร้างเกมส์เกี่ยวกับสัตว์เลี้ยง โดยมีคนและสุนัขโดยสามารถติดต่อสื่อสารกันได้เราต้องการ encapsulate คุณสมบัติของสุนัขให้อยู่ใน Class Dog โดยหน้าตาแผนภาพก็จะประมาณนี้

oop ข้อสอง abstraction

คำอธิบายโดยย่อ

Abstractiion Concept คือการที่ Class เปิดเผยเฉพาะส่วนที่จำเป็น โดยไม่จำเป็นให้ส่วนที่เรียกใช้ต้องรู้รายละเอียดภายใน

คำอธิบายฉบับบเต็ม 

Concept Abstraction นั้นเป็นเหมือนส่วนต่อขยายของ Encapsulation โดยส่วนใหญ่เมื่อ Codebase ของเรามีขนาดใหญ่ขึ้นเรื่อยก็จะมีการติดต่อสื่อสารระหว่าง Object มากขึ้นเรื่อยๆ และ ทำให้เกิดปัญหา Code ซับซ้อนขึ้นโดยปริยาย

Abstraction คือ concept ที่ออกแบบมาเพื่อแก้ปัญหาเหล่านี้

การใช้ Concept Abstraction หมายความว่า  Object ควรที่จะเปิดเผยเฉพาะ ส่วนที่จำเป็นต่อการใช้งาน object นั้น โดยระบบการทำงานที่เปิดเผยให้ object อื่นเห็นนั้นควรจะซ่อนความซับซ้อนในการทำงานไว้ภายใน class โดยไม่จำเป็นต้องเปิดเผยให้ภายนอกรู้

สรุป

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

Leave a Comment

Your email address will not be published. Required fields are marked *