ในโลกของการเขียนโปรแกรมโดยเฉพาะในแนวคิด Object-Oriented Programming (OOP) นั้น "Polymorphism" ถือเป็นแนวคิดที่สำคัญและเป็นหัวข้อที่น่าสนใจที่สุดอย่างหนึ่ง โดยเฉพาะในภาษา Delphi Object Pascal ที่เราใช้กันในวันนี้ สำหรับใครที่ยังไม่คุ้นเคยกับ Polymorphism เราจะแนะนำแนวคิดนี้แบบเบา ๆ ให้เข้าใจก่อนที่เราจะลงไปในรายละเอียดการใช้งานพร้อมตัวอย่างโค้ดที่ชัดเจน
Polymorphism มาจากภาษากรีกที่แปลว่า “หลายรูปแบบ” ซึ่งในทางปฏิบัติหมายถึงความสามารถในการนำค่าหรือตัวแปรที่มีหลายรูปแบบ มาทำงานร่วมกันได้ โดย Polymorphism แบ่งออกเป็น 2 ประเภทหลักคือ
1. Compile-time Polymorphism (Static Polymorphism): เกิดขึ้นเมื่อโปรแกรมทำการตัดสินใจในเวลาคอมไพล์ โดยอาจใช้สิ่งที่เรียกว่า method overloading ซึ่งจะมีการประกาศฟังก์ชันที่มีชื่อเดียวกันแต่มีพารามิเตอร์ที่แตกต่างกัน 2. Run-time Polymorphism (Dynamic Polymorphism): เกิดขึ้นเมื่อมีการกำหนดและเรียกใช้ฟังก์ชันในเวลารันไทม์ โดยมักจะใช้ inheritance และ interfaces
Delphi Object Pascal สนับสนุนแนวคิด Polymorphism ได้อย่างมีประสิทธิภาพ ทำให้เราใช้ความยืดหยุ่นนี้ในการออกแบบคลาสที่สามารถแบ่งปันพฤติกรรมได้ โดยที่ไม่ต้องคัดลอกโค้ดใหม่
แบบอย่างที่ 1: Static Polymorphism
ก่อนที่เราจะเริ่มใช้ static polymorphism ใน Delphi เรามาทำความเข้าใจกันก่อนว่าเราจะทำได้อย่างไร ตัวอย่างเช่น:
ในตัวอย่างด้านบน เราสามารถสร้างฟังก์ชัน `Add` ที่ใช้ชื่อเดียวกันแต่รับประเภทของพารามิเตอร์ที่แตกต่างกัน (`Integer` และ `Double`) ทำให้เราสามารถเรียกใช้ฟังก์ชันนี้ได้ตามประเภทที่ต้องการ ในช่วงเวลาที่คอมไพล์ (compile-time)
แบบอย่างที่ 2: Dynamic Polymorphism
ต่อมาเราจะมาทำความเข้าใจใน dynamic polymorphism ที่เป็นการนำ inheritance มาใช้ ตัวอย่างที่เราจะสร้างคลาสแม่ (base class) และคลาสลูก (derived class):
ในตัวอย่างนี้ เรามีคลาส `TShape` เป็นคลาสแม่ ซึ่งมีฟังก์ชัน `Area` ที่ถูกกำหนดเป็น abstract และสามารถ override ได้ภายในคลาสลูก `TRectangle` และ `TCircle` ต่อมาเราอาจสร้างตัวแปรที่เป็นประเภทของ `TShape` และเชื่อมโยงไปยังคลาสลูกต่าง ๆ ได้
ในโค้ดด้านบน เราจะเห็นว่า ในขณะ runtime เมื่อเราเรียกใช้ฟังก์ชัน `Area` ฟังก์ชันที่ถูกเรียกคือฟังก์ชันที่ถูก override ในแต่ละคลาสลูก ถ้านักเรียนของ EPT เรียนรู้การทำงานเหล่านี้ จะทำให้เข้าใจการนำ Polymorphism ไปใช้ในโปรแกรมในช่วง runtime ได้อย่างมีประสิทธิภาพ
การใช้ Polymorphism มีประโยชน์อย่างมากในโลกแห่งความเป็นจริง อย่างเช่น การสร้างระบบสำหรับการจัดการการชำระเงินที่มีหลายรูปแบบ เช่น การชำระเงินผ่านบัตรเครดิต, ผ่าน PayPal, หรือการโอนเงินผ่านธนาคาร ซึ่งเราสามารถสร้างคลาสแม่ชื่อ `TPayment` และมีคลาสลูกเช่น `TCreditCardPayment`, `TPayPalPayment` และ `TBankTransferPayment` ได้
โดยการสร้างระบบนี้ ผู้ใช้จะสามารถเรียกใช้ฟังก์ชันที่เกี่ยวข้องกับการชำระเงินผ่านเรียกว่า `ProcessPayment` ได้โดยไม่ต้องกังวลเรื่องประเภทของการชำระเงิน โดยมีตัวอย่างเช่น:
การใช้ Polymorphism ทำให้ทีมพัฒนาซอฟต์แวร์สามารถขยายระบบได้ง่ายและลดการใช้โค้ดที่ซ้ำซ้อน
Polymorphism เป็นหนึ่งในแนวคิดที่สำคัญที่สุดใน OOP และสามารถนำไปใช้ประโยชน์ได้มากมาย โดยในภาษา Delphi Object Pascal การใช้ Polymorphism จะทำให้โปรแกรมของคุณมีความยืดหยุ่นสูงและสามารถขยายได้อย่างง่ายดาย
หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Polymorphism และยังมีแนวคิดหลักใน OOP ต่าง ๆ อาจเข้ามาเรียนรู้ที่ EPT (Expert-Programming-Tutor) ซึ่งเรามีคอร์สการสอนที่ออกแบบมาเพื่อตอบสนองความต้องการของนักพัฒนาในทุกระดับความสามารถ
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
Tag ที่น่าสนใจ: java c# vb.net python c c++ machine_learning web database oop cloud aws ios android
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM