OOP

OOP : Polymorphism

ตั้งใจว่าจะเคลียร์เรื่องนี้ให้เข้าใจซะทีนึง เคยเรียนมานานแล้วมันก็หลงลืมไปหมดแล้ว
พอนั่งๆ คิดไปคิดมา มันเกิดความสับสนระหว่าง Overloading กับ Polymorphism เอาซะอีก
เลยลองเปิดหนังสือ java programing volume I ของ อ.ดร.วีระศักดิ์ ซึงถาวร ได้คำอธิบายที่ช่วยให้ความกระจ่างในระดับนึงเลยทีเดียว
เลยขอคัดลอกข้อความ แบบสรุปใจความมาไว้ตรงนี้เลยดีกว่าจะได้ไว้เตือนความจำตัวเองได้ง่ายๆ

Polymorphism
จุดสำคัญที่ต้องทำความเข้าใจก่อนเลยก็คือว่า Polymorphism ไม่ใช่การทำ Overloading ที่จริงแล้วทั้งสอง มีจุดมุ่งหมายคล้ายกัน คือต้องการสร้าง method ที่ถูกเรียกด้วย arguments หลายแบบได้

เราลองพิจารณาในมุมมองของการเรียกใช้ Method ซึ่งมีการทำงานระหว่าง Caller และ Callee ดังต่อไปนี้

ทางด้านผู้เรียก (caller) method
- เราอาจกล่าวได้ว่า polymorphism คล้ายกับ overloading คือสามารถเรียก method หนึ่งด้วย arguments ที่แตกต่างกันไปในการเรียกแต่ละครั้ง

ด้านผู้ถูกเรียก (callee)
- polymorphism จะแตกต่างจาก overloading อย่างมากคือ ถ้าเป็น polymorphism จะมีเพียง method เดียวโดยอาศัย inheritance และ dynamic binding เพื่อให้รับพารามิเตอร์ที่ต่างคลาสกันได้ และเกิดการทำงานที่ต่างกันไป
- overloaded methods ต้องมีหลายๆ methods สำหรับการเรียกแต่ละระแบบ และอาศัยคอมไพเลอร์ทำการผูกชื่อว่า ตรงที่เรียก method ที่มี arguments แบบนั้นจะให้ method ใดถูกกระทำ

ดั้งนั้นจำนวนของ overloaded methods ถูกกำหนดไว้ตั้งแต่ตอนคอมไพล์โปรแกรมและเพ่ิมไม่ได้ในภายหลัง แต่ polymorphism method นั้นสามารถรับพารามิเตอร์ที่แตกต่างกันได้ไม่จำกัด เพราะสามารถขยายคลาสเพ่ิมขึ้นได้โดยไม่ต้องแก้ไขหรือคอมไพล์โปรแกรมเดิม

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

สำหรับประโยชน์ของ polymorphism คือสามารถจัดการกับ Inheritance ต่างคลาสกันด้วยวิธิเดียวกันเป็นการสนับสนุนการออกแบบโปรแกรมเพือให้ใช้งานร่วมกันหรือการนำ กลับมาใช้ได้อีก โดยไม่ต้องสร้างโปรแกรมขึ้นใหม่มื่อมีการสร้างคลาสใหม่
Syndicate content