บทที่ 6 กระบวนการพอลิมอร์ฟิซึม (Polymorphism)
การพ้องรูป (Polymorphism)
รากฐานของการพ้องรูป
(Polymorphism) ก็คือ การถ่ายทอดคุณสมบัติ
เพราะถ้าไม่มีการถ่ายทอดคุณสมบัติก็จะไม่เกิดสภาวะการพ้องรูป
การถ่ายทอดคุณสมบัติเป็นเครื่องมือยืนยันได้ว่าคลาสลูกที่เกิดจากคลาสแม่เดียวกันย่อมมีคุณสมบัติเหมือนกัน
Polymorphism หมายถึง
การที่เราสามารถเขียนเมธอดชื่อเดียวกันให้สามารถรับพารามิเตอร์ได้หลายชนิดและการเขียนเมธอดชื่อเดียวกับคลาสที่สืบทอดมา
แต่ทำงานคนละอย่างกัน โดยความหมายแล้ว poly แปลว่าหลายหรือมาก
ส่วนคำว่า morphism นั้นมาจากคำว่า morph ซึ่งแปลว่ารูปร่าง เมื่อนำสองคำมารวมกันจะมีความหมายคือ
การที่วัตถุสามารถมีรูปร่างได้หลากหลาย
ในเนื้อหาบทนี้หากจะกล่าวเรื่องของการพ้องรูป
หรือการพอลิมอร์ฟิซึมให้เข้าใจได้ชัดเจนยิ่งขึ้นคงจะเป็นเรื่องของการ Overrides Overridable
และ Overloads
นั้นคือการที่มีเมธอดในคลาสลูกที่มีชื่อซ้ำกับเมธอดนั้นคลาสแม่ หรือ
การที่เมธอดในคลาสลูกมีชื่อซ้ำกันที่มากกว่าหนึ่ง
ดังนั้นกระบวนการดังกล่าวจึงถือเป็น กระบวนการพอลิมอร์ฟิซึมด้วย
1. การโอเวอร์ไรด์เมธอด
(Overrides
Method)
คือ การที่คลาสลูกสามารถมีเมธอดชื่อ
และรายการพารามิเตอร์ของเมธอดจะต้องมีชื่อและชนิดเหมือนกับคลาสแม่
ซึ่งการเข้าถึงจากออบเจ็กต์นั้นจะสามารถเข้าถึงได้จากเมธอดของคลาสลูกก่อน เช่น จากตัวอย่างคลาสสัตว์มีเมธอด นอน()
และคลาสลูกคือ คลาสปลา ก็มีเมธอดนอน() เช่นเดียวกัน ซึ่งแสดงถึงพฤติกรรมที่เปลี่ยนไปจากคลาสแม่
ดังภาพ
เมื่อคลาสปลามีเมธอด
นอน ที่ซ้ำกับคลาสสัตว์
ดังนั้นการเขียนโค้ดเพื่อสร้างออบเจ็กต์การเข้าถึงข้อมูลจะเข้าถึงเมธอด นอน
ของคลาสปลาก่อนเสมอ ดังภาพ จะแสดงถึงการมองเห็นเมธอดจากออบเจ็กต์ที่สร้างขึ้น
จากภาพออบเจ็กต์ ส
จะเข้าถึงเมธอดนอน() จากคลาสสัตว์ ออบเจ็กต์ ล จะเข้าถึงเมธอดนอน() จากการสืบทอดคลาสสัตว์ ส่วนออบเจ็กต์ ป
นั้นเมธอดนอนจะอยู่ในกระบวนการโอเวอร์ไรด์ คือมีเมธอดซ้ำกับคลาสสัตว์ที่สืบทอดมา ดังนั้นการเข้าถึงจะเข้าถึงเมธอดนอน
() ในคลาสปลาก่อนเสมอ
ตัวอย่างโปรแกรมการโอเวอร์ไรด์เมธอด
ในตัวอย่างนี้จะขอต่อยอดจากเนื้อหาที่ผ่านมาในคลาสสัตว์
เพื่อให้นักศึกษามีความเข้าใจอย่าต่อเนื่องจากเนื้อหาที่ผ่านมา
(1) ในเนื้อหาทีผ่านมาเราได้สร้างฟอร์มสำหรับ ซึ่งเป็นส่วนติดต่อกับผู้ใช้ก่อนโดยให้ออกแบบหน้าจอและตั้งชื่อที่คุณสมบัติ
Name ดังภาพ
(2) ในตัวอย่างนี้เราจะใช้เมธอดนอน()
เป็นเมธอดเพื่อทดสอบการทำโอเวอร์ไรด์
เนื่องจากการสอนของสัตว์แต่ละชนิดอาจมีความแตกต่างกัน เช่น
ลิงนอนไม่เหมือนสัตว์อื่นคือนอนบนต้นไม้ เป็นต้น
ซึ่งการเขียนคำสั่งในเมธอดนอน
สำหรับคลาสสัตว์ (คลาสแม่) นั้นเราจะใช้ คำสั่ง Overridable
เพื่อบอกให้ตัวแปรภาษาทราบว่าจะมีการทำโอเวอร์ไรด์เมธอดเกิดขึ้นดังโค้ดบรรทัดที่ 9
(3) จากนั้นไปแก้ไขที่คลาสลิง
โดยการสร้าเมธอด นอน() ในคลาสลิง ซึ่งจะมีคำสั่ง Overrides เพื่อบอกให้ระบบตัวแปรภาษาทราบว่าตอนนี้คลาสลูกได้มีการสร้างเมธอดชื่อเดียวกันกับคลาสแม่
ดังนี้
(4) เมื่อนำมาสร้างออบเจ็กต์ในฟอร์มจากคลาสสัตว์และคลาสลิง
ซึ่งในขณะนี้อย่าลืมว่าคลาสลิง ได้รับการสืบทอดจากคลาสสัตว์อยู่ ดังนี้
|1| Public Class Form1
|2| Private Sub Button1_Click(....)
Handles Button1.Click
|3| Dim ลิงกัง As New ลิง
|4| MsgBox(ลิงกัง.นอน("บนต้นไม้"))
|5|
|6| Dim หนู As New สัตว์
|7| MsgBox(หนู.นอน("ในรู"))
|8| End Sub
|9| End Class
ความคิดเห็น
แสดงความคิดเห็น