บทที่ 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









ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

บทที่ 11 ตอน 3 การออกแบบรายงานด้วย Crystal Report

บทที่ 11 ตอน 3 การออกแบบรายงานด้วย Crystal Report Ex2