การสืบทอดคลาส (inheritance)

ในมุมมองของการออกแบบคลาส การสืบทอด (inheritance)  หมายถึงการที่เราสร้างคลาสหนึ่งขึ้นมาเพื่อให้คลาสอื่นๆ สืบทอดทั้งคุณสมบัติ (property) และเมธอด (method) ไปใช้งาน รวมถึงสามารถสร้างคุณสมบัติและเมธอดของตัวเองขึ้นมาเพิ่มเติมได้ตามต้องการ

 

ยกตัวอย่างเช่น เราจะสร้างคลาสเกี่ยวกับพนักงานขึ้นมา ซึ่งในบริษัทมีพนักงานหลายแผนก แต่ละแผนกก็มีสิ่งที่เราสนใจเหมือนและแตกต่างกันดังนี้

 

 

 

จากภาพเราจะเห็นว่าทั้งผู้จัดการ พนักงานขาย และพนักงานฝ่ายผลิต มีข้อมูลที่คล้ายคลึงกันมาก แตกต่างแค่บางส่วนเท่านั้น เช่น

ผู้จัดการมีคุณสมบัติ ที่จอดรถ

พนักงานขายมีคุณสมับติ ค่าคอมมิชั่น

พนักงานฝ่ายผลิต มีค่าล่วงเวลา เป็นต้น

 

ถ้าเรานำข้อมูลนี้ไปสร้างคลาส และสร้างออบเจ็กต์จากคลาสนั้น ๆ ขึ้นมาใช้งานจริงก็ไม่มีปัญหาอะไร แต่จะดีกว่ามั้ยถ้าเราจะนำการสืบทอดมาใช้ โดยการจับกลุ่มสิ่งที่แต่ละคลาสมีเหมือนกันไปไว้ด้วยกัน แล้วเรียกมันว่า “คลาสแม่” จากนั้นก็ไปสร้างคลาสใหม่ มาสืบทอดสิ่งที่คลาสแม่มี แล้วเขียนเฉพาะสิ่งที่แตกต่างกันเอาไว้ใช้งานในคลาสของตัวเอง เราเรียกคลาสที่ไปสืบทอดคลาสอื่นว่า “คลาสลูก”

 

หากออกแบบคลาสใหม่เราจะได้ผลลัพธ์ดังนี้

 

 

ในอนาคต หากมีแผนกใหม่เกิดขึ้น เราก็แค่สร้างคลาสใหม่ขึ้นมาสืบทอดคลาสแม่ที่เราออกแบบเอาไว้แล้ว และเขียนโค้ดเพียงนิดหน่อยก็สามารถใช้งานโปรแกรมต่อได้ นี้คือประโยชน์ของการนำกลับมาใช้ซ้ำ หรือ reuse ซึ่งเป็นหลักการสำคัญของ OOP (Object Oriented Programming)

 

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

 

ลงมือเขียนโค้ด

การเขียนโค้ดเราต้องขียนเป็นภาษาอังกฤษนะคะ ถ้าเราแปลงภาพด้านบนเป็นภาษาอังกฤษ จะได้ดังนี้

 

 

ต่อมาก็ลงมือเขียนโค้ดและอ่านคอมเมนต์เพื่อทำความเข้าใจโค้ดนะคะ หากไม่เข้าใจตรงไหน พิมพ์คำถามไว้ด้านล่างได้เลยค่ะ 🙂

 

 

 

 

 

ทดสอบโปรแกรม

สร้างออบเจ็กต์จากคลาส Manager, Sales และ Production ขึ้นมา จากนั้นก็สั่งให้แสดงผลโดยส่งชื่อออบเจ็กต์ไป ระบบจะเรียกใช้งานเมธอด toString() อัตโนมัติ

 

 

ผลลัพธ์

จะเห็นว่าโปรแกรมแสดงข้อมูลของแต่ละออเจ็กต์ได้อย่างถูกต้อง

 

 

ธมนวรรณ มณีจันทร์

ธมนวรรณ มณีจันทร์

|:- เราเชื่อมั่นว่าการเสียสละและการแบ่งปันจะทำให้โลกใบนี้สวยงามมากขึ้น ทุกๆ จุดเริ่มต้นของการเรียนรู้ นำไปสู่การเรียนรู้ถัดไป เว็บไซต์แห่งนี้ขอเป็นส่วนหนึ่งของการแบ่งปันความรู้ที่ไม่มีที่สิ้นสุด มาร่วมกันผลักดันโลกของเราให้หมุนไปพร้อมกับพลังแห่งความรักด้วยกันนะคะ :) >>> |:- About Me! -:|