# Inheritance ใน OOP คือศาสตร์แห่งการรับมรดก...ของ Object!
การเขียนโปรแกรมด้วยแนวคิด Object-Oriented Programming (OOP) เป็นหนึ่งในกระบวนทัศน์ที่มีชื่อเสียงและเป็นที่นิยมอย่างมากในวงการพัฒนาซอฟต์แวร์ และ "Inheritance" หรือ "การสืบทอด" คือหัวใจหลักหนึ่งในสี่ของ OOP (อีกสามอย่างได้แก่ Encapsulation, Polymorphism, และ Abstraction) ซึ่งให้โอกาสในการสร้างโครงสร้างของ object ที่เป็นลำดับชั้น โดยอนุญาตให้ class หนึ่งสามารถรับคุณสมบัติหรือโค้ดที่มีมาจาก class อื่นได้โดยไม่ต้องเขียนใหม่ทั้งหมด
ภาษาที่เราจะใช้สำหรับดูศาสตร์การสืบทอดใน OOP ครั้งนี้คือ JavaScript – ภาษาที่รองรับ OOP ด้วยแนวคิดโปรโตไทป์ (prototype-based) ตัวตนของ inheritance ใน JavaScript นั้นอยู่ในรูปแบบของพร็อพเพอร์ตี้ __proto__ หรือการใช้งานตัวคำสั่งชั้นสูงอย่าง `class` ตั้งแต่ ES6 เป็นต้นมา
ตัวอย่างที่ 1: Inheritance สุดคลาสสิกด้วย `class`
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a sound.`);
}
}
class Dog extends Animal {
constructor(name) {
super(name); // ส่งต่อ name ไปยัง constructor ของ Animal
}
speak() {
console.log(`${this.name} barks.`);
}
}
const dog1 = new Dog('Rex');
dog1.speak(); // Rex barks.
ในตัวอย่างนี้ `Dog` คือ subclass ที่สืบทอดมาจาก `Animal` ซึ่งการใช้คำสั่ง `extends` ให้เราสามารถรับทุกอย่างจาก `Animal` และการใช้ `super()` ใน constructor ช่วยให้เราสามารถเรียก constructor ของ parent class.
ตัวอย่างที่ 2: Overriding method แบบมีเสน่ห์
class Cat extends Animal {
speak() {
super.speak(); // เรียกใช้เมธอด speak จาก Animal
console.log(`${this.name} meows.`);
}
}
const cat1 = new Cat('Misty');
cat1.speak(); // Misty makes a sound. และ Misty meows.
`Cat` ไม่เพียงแต่สืบทอด `speak` จาก `Animal` แต่ยังเพิ่มเติมลักษณะพิเศษของมันเองได้อีกด้วยการเรียกใช้ `super.speak()` และเพิ่มโค้ดในเมธอดเดียวกัน
Usecase 1: ระบบจัดการผู้ใช้
ลองคิดถึงระบบจัดการผู้ใช้งานต่างๆในแอปพลิเคชั่น สมมติว่ามี `User` ซึ่งเป็นคลาสพื้นฐานที่มีคุณสมบัติทั่วไป เช่น username และ password จากนั้นอาจมี `AdminUser` ที่สืบทอดมาจาก `User` และมีเมธอดพิเศษเช่น `banUser()` หรือ `promoteUser()` ที่ใช้จัดการกับ users อื่นภายในระบบ.
Usecase 2: การพัฒนาเกม
ในการพัฒนาเกม, คุณอาจจะมี `GameObject` ตัวพื้นฐานกับคุณสมบัติแบบ `x`, `y` และ `render()` method. จุดต่อขึ้นมาคือคลาสได้แก่ `Player`, `Enemy` หรือ `Item` ที่สืบทอดจาก `GameObject` และมีคุณลักษณะเฉพาะตัว หรือพฤติกรรมพิเศษ เช่นการเคลื่อนที่, การโจมตี, หรือเงื่อนไขการเก็บไอเท็ม.
การเข้าใจและใช้งาน inheritance ได้คล่องแคล่วไม่ใช่แค่ทำให้โค้ดของคุณสวยงาม, ทั้งยังช่วยลดความซับซ้อน, และทำให้โครงสร้างของโปรแกรมมีความยืดหยุ่นและอนุรักษ์ทรัพยากรได้ดียิ่งขึ้น
คลาสสิกแค่ไหนก็ตาม แต่ Inheritance ใน OOP ไม่เคยล้าสมัย ถ้าคุณต้องการทำความเข้าใจให้ลึกซึ้งหรือประยุกต์ใช้งานในโปรเจกต์ของตนเอง ณ EPT ที่นี่มีครูผู้เชี่ยวชาญที่พร้อมจะพาคุณไปรู้จัก inheritance อย่างถ่องแท้ สนุกสนานกับการเรียนรู้ และยกระดับทักษะการเขียนโปรแกรมของคุณให้ไปอีกระดับ สู่ความเป็นมืออาชีพ!
สนใจเรียนรู้การเขียนโปรแกรม? สำรวจคอร์สเรียนได้ที่ Expert-Programming-Tutor และพัฒนาทักษะการเขียนโปรแกรมของคุณไปพร้อมกับเรา!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
Tag ที่น่าสนใจ: inheritance oop object-oriented_programming javascript subclass extends super() prototype-based class method_overriding gameobject player enemy item
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com