บทที่ 5 การสืบทอดคลาส (Inheritance)
1.
การสืบทอดคลาส (Inheritance)
Inheritance แปลว่าการสืบทอด เป็นคุณสมบัติที่สำคัญของรูปแบบการเขียนโปรแกรมเชิงวัตถุ
ดังนั้น การที่คลาสมีความสามารถในการสืบทอดได้
ในความเป็นจริงเรารู้ว่ารถมีหลากหลายประเภท รถตุ๊กตุ๊ก รถมอเตอร์ไซค์ รถเก๋ง
รถกระบะ รถหกล้อ รถสิบล้อ และอาจจะมีรถแปลกๆได้อีกมาก ถ้าหากนักศึกษาจะสร้างคลาสรถย่อยๆเหล่านี้ใหม่หมด
ก็อาจต้องเขียนคุณสมบัติและความสามารถเอาไว้ว่า รถมีสี รถมีล้อ รถมีเครื่องยนต์
รถมีความเร็วรถวิ่งได้ เบรคได้ ใส่ไว้ในคลาสรถสิบล้อ รถกระบะ รถตุ๊กตุ๊ก
ทั้งๆที่เรารู้อยู่แล้วว่า รถเหล่านี้
ก็มีคุณสมบัติและความสามารถเหล่านี้เหมือนกันหมด เราจึงมีการสืบทอดคลาส
โดยการยึดเอา รถ เป็นต้นแบบของรถอื่นๆทั้งหมด และให้คลาส รถ มีคุณสมบัติและความสามารถพื้นฐานที่ยังรถประเภทอื่นก็ต้องมีคุณสมบัติและความสามารถนี้แน่นอน
ซึ่งการสืบทอดคลาสรถนี้ถือได้ว่าเป็นคลาสแม่ และคลาสรถชนิดต่างๆ
คือคลาสลูกที่ได้รับการถ่ายทอดคุณสมบัติและความสามารถมาจากคลาสแม่ทั้งหมดซึ่งในคลาสลูกสามารถเพิ่มเติมคุณสมบัติและความสามารถเข้าไปได้เพื่อให้เกิดเอกสารลักษณ์ของคลาสลูกนั้น
จะเห็นได้ว่าการสืบทอดจากคลาสแม่ไปยังคลาสลูกนั้นมีความประหยัดเวลาในการเขียนโปรแกรมมากเนื่องจากนักศึกษาไม่ต้องเขียนรายละเอียดของคลาสใหม่ทั้งหมด
ตัวอย่างการสืบทอดคลาส
หากนำมาแต่งเป็นประโยคของการสืบทอดคลาสเมื่อนำคำว่า
“เป็น” เข้ามาช่วยในประโยคจะได้ดังนี้
(1) “ลิงเป็นสัตว์” ถูกต้อง เพราะลิงเป็นสัตว์ประเภทหนึ่ง
(2) “สัตว์เป็นลิง” ผิด เพราะสัตว์จะรวมถึงสิ่งมีชีวิตต่างๆ
(3) “ลิงไซบอร์กเป็นลิงและหุ่นยนต์”
ถูก
เพราะลิงไซบอร์กเป็นลิงผสมเครื่องยนต์
(4) “รถยนต์เป็นพาหนะ” ถูก เพราะ รถยนต์ถือว่าเป็นอีกชนิดของพาหนะ
อีกตัวอย่างหนึ่งที่น่าสนใจคือ คลาสสัตว์ต่างๆ ซึ่งในตัวอย่างนี้ขอยกเอา
คลาสแมว คลาสปลา และคลาสลิง มาพอเป็นตัวอย่างให้ได้มองเห็นแนวคิดในการสืบทอดคลาส ให้สังเกตสัตว์ทั้ง
3 ชนิดนี้ซึ่งจะมีคุณสมบัติหรือ
แอททริบิวต์และเมธอดที่คล้ายๆกันดังนี้
คลาสแมว
แอททริบิวต์ ได้แก่ อายุ และ ความหิว
เมธอด ได้แก่ กิน() และ นอน()
แอททริบิวต์ ได้แก่ อายุ และ ความหิว
เมธอด ได้แก่ กิน() และ นอน()
คลาสปลา
แอททริบิวต์ ได้แก่ อายุ ความหิว และชื่อ (เช่น ปลานีโม)
เมธอด ได้แก่ กิน() และ นอน()
คลาสลิง
แอททริบิวต์ ได้แก่ อายุ และ ความหิว
เมธอดได้แก่ กิน() นอน() และเก็บลูกมะพร้าว()
แอททริบิวต์ ได้แก่ อายุ ความหิว และชื่อ (เช่น ปลานีโม)
เมธอด ได้แก่ กิน() และ นอน()
คลาสลิง
แอททริบิวต์ ได้แก่ อายุ และ ความหิว
เมธอดได้แก่ กิน() นอน() และเก็บลูกมะพร้าว()
เมื่อนำมาจัดกลุ่มแล้วเขียนเป็นแผนภาพจะเห็นได้ว่าการที่สัตว์ต่างๆมี
แอททริบิวต์และเมธอดที่คล้ายกัน
แทนที่จะเขียนแอททริบิวต์และเมธอดของสัตว์ต่างๆเหมือนกันทั้งหมดทุกคลาส
นักศึกษาสามารถนำเอาแอททริบิวต์และเมธอดมาสร้างรวมเป็นเพียงคลาสเดียวคือคลาสสัตว์ซึ่งจะได้
จากนั้นจึงทำการสืบทอดหรือถ่ายทอดคุณสมบัติจากคลาสสัตว์(คลาสแม่) ไปยัง
คลาสแมว คลาส ปลา คลาสลิง (คลาสลูก) ดังภาพ
จากภาพจะเห็นได้ว่ามีการรวมความเหมือนกันของคลาสสัตว์ต่างๆ
มาสร้างเป็นคลาสสัตว์ ซึ่งได้แก่ แอททริบิวต์ อายุ ความหิว ส่วนเมธอดนั้นไดแก่
กิน() นอน()
ส่วนคลาสแมวนั้นและคลาสปลาจะมีแอททริบิวต์ ชื่อ และคลาสลิงก็มีเมธอด เก็บลูกมะพร้าว
เมื่อมีการสืบทอดคลาสเสร็จสิ้นคลาสแมว คลาสปลา
และคลาสลิงก็จะมีแอททริบิวต์และเมธอดที่คลาสสัตว์อนุญาตให้สืบทอดทั้งหมด
รูปแบบการสืบทอดคลาส (Inheritance)
Inherits ชื่อของคลาสแม่
ตัวอย่าง
|1| Public
Class ลิง
|2| Inherits
สัตว์
|3| End Class
เมื่อนำคลาสทั้งหมดมาเขียนโปรแกรมในภาษา VB.NET ในตัวอย่างต่อไปนี้จะตั้งชื่อแอททริบิวต์และเมธอดเป็นอักษรภาษาไทยเพื่อให้นักศึกษาได้เข้าใจแนวคิดการสืบทอดก่อน
(1)
เริ่มจากการสร้างฟอร์มสำหรับเป็นส่วนติดต่อกับผู้ใช้ก่อนโดยให้ออกแบบหน้าจอและตั้งชื่อที่คุณสมบัติ
Name ดังภาพ
(2) จากนั้นสร้างคลาสสัตว์
โดยตั้งชื่อคลาสคือ “สัตว์.vb” แล้วเขียนโค้ดเพื่อสร้างแอททริบิวต์และเมธอด
ดังนี้
(2) จากนั้นสร้างคลาสลิง
โดยตั้งชื่อคลาสคือ “ลิง.vb” แล้วเขียนโค้ดคำสั่งในการสืบทอดจากคลาสสัตว์
ดังนี้
|1| Public Class ลิง
|2| Inherits สัตว์
|3| End Class
(3) เมื่อกลับไปที่คลาสฟอร์ม ทดลองเรียกใช้เมธอดจากคลาสลิง
ดังนี้
|1| Public Class Form1
|2| Private Sub Button1_Click(....)
Handles Button1.Click
|3| Dim ลิงน้อย As New ลิง
|4| TextBox1.Text = ลิงน้อย.นอน
|5| End Sub
|6| End Class
ในขณะที่เขียนโค้ดคำสั่งสามารถสังเกตเห็นรายการแอททริบิวต์และเมธอดจากคลาสสัตว์ซึ่งขณะนี้ได้สืบทอดมายังคลาสลิงแล้ว
ดังภาพ
ความคิดเห็น
แสดงความคิดเห็น