การสืบทอดเทียบกับองค์ประกอบ
การสืบทอดและองค์ประกอบเป็นสองแนวคิดที่สำคัญที่พบใน OOP (การเขียนโปรแกรมเชิงวัตถุ) ในแง่ง่ายๆ ทั้งองค์ประกอบและการสืบทอดจะจัดการกับคุณสมบัติหรือลักษณะการทำงานเพิ่มเติมแก่คลาส การสืบทอดคือความสามารถของคลาสในการสืบทอดคุณสมบัติและพฤติกรรมจากคลาสพาเรนต์โดยการขยายคลาส ในทางกลับกัน องค์ประกอบคือความสามารถของคลาสในการเก็บอ็อบเจ็กต์ของคลาสต่าง ๆ เป็นข้อมูลสมาชิก
มรดกคืออะไร
ดังที่กล่าวไว้ข้างต้น การสืบทอดคือความสามารถของคลาสในการสืบทอดคุณสมบัติและพฤติกรรมจากคลาสพาเรนต์โดยการขยายคลาสการสืบทอดจะจัดเตรียมการใช้รหัสซ้ำโดยอนุญาตให้ขยายคุณสมบัติและพฤติกรรมของคลาสที่มีอยู่โดยคลาสที่กำหนดใหม่ หากคลาส A ขยาย B คลาส B จะถูกเรียกว่าคลาสพาเรนต์ (หรือซูเปอร์คลาส) และคลาส A จะถูกเรียกว่าคลาสย่อย (หรือคลาสที่ได้รับมา/คลาสย่อย) ในสถานการณ์ตัวอย่างนี้ คลาส A จะสืบทอดแอตทริบิวต์และเมธอดสาธารณะและที่ได้รับการป้องกันทั้งหมดของซูเปอร์คลาส (B) คลาสย่อยสามารถเลือกแทนที่ (ให้ฟังก์ชันการทำงานใหม่หรือแบบขยายให้กับเมธอด) พฤติกรรมที่สืบทอดมาจากคลาสพาเรนต์
การสืบทอดแสดงถึงความสัมพันธ์แบบ “is-a” ใน OOP โดยพื้นฐานแล้วหมายความว่า A ก็เป็น B เช่นกัน กล่าวอีกนัยหนึ่ง B สามารถเป็นคลาสที่มีคำอธิบายทั่วไปของเอนทิตีในโลกแห่งความเป็นจริง แต่ A ระบุความเชี่ยวชาญเฉพาะบางอย่าง ในปัญหาการเขียนโปรแกรมในโลกแห่งความเป็นจริง คลาส Person สามารถขยายเพื่อสร้างคลาส Employee ได้ นี้เรียกว่าความเชี่ยวชาญ แต่คุณสามารถสร้างคลาส Employee ก่อน แล้วจึงสรุปไปยังคลาส Person ได้เช่นกัน (i.อี ลักษณะทั่วไป) ในตัวอย่างนี้ พนักงานจะมีคุณสมบัติและพฤติกรรมทั้งหมดของบุคคล (เช่น พนักงานก็เป็นบุคคลด้วย) และอาจมีฟังก์ชันเพิ่มเติมบางอย่าง (เช่น บุคคลไม่ใช่พนักงาน) เช่นกัน
องค์ประกอบคืออะไร
Composition คือความสามารถของคลาสที่จะบรรจุอ็อบเจ็กต์ของคลาสต่าง ๆ เป็นข้อมูลสมาชิก ตัวอย่างเช่น คลาส A อาจมีออบเจ็กต์ของคลาส B ในฐานะสมาชิก ที่นี่ เมธอดสาธารณะทั้งหมด (หรือฟังก์ชัน) ที่กำหนดไว้ใน B สามารถดำเนินการได้ภายในคลาส A คลาส A กลายเป็นคอนเทนเนอร์ ในขณะที่คลาส B กลายเป็นคลาสที่มีอยู่ องค์ประกอบเรียกอีกอย่างว่า Containership ในตัวอย่างนี้ อาจกล่าวได้ว่าคลาส A ประกอบด้วยคลาส B ใน OOP องค์ประกอบแสดงถึงความสัมพันธ์แบบ "has-a" สิ่งสำคัญที่ควรทราบคือ แม้ว่าคอนเทนเนอร์จะมีสิทธิ์เข้าถึงเพื่อเรียกใช้เมธอดสาธารณะทั้งหมดของคลาสที่มีอยู่ แต่ก็ไม่สามารถแก้ไขหรือจัดเตรียมฟังก์ชันเพิ่มเติมได้ เมื่อพูดถึงปัญหาการเขียนโปรแกรมในโลกแห่งความเป็นจริง ออบเจ็กต์ของกล่องข้อความคลาสอาจมีอยู่ในฟอร์มของคลาส ดังนั้นจึงอาจกล่าวได้ว่าฟอร์มมีกล่องข้อความ (หรืออีกวิธีหนึ่งคือฟอร์มประกอบด้วยกล่องข้อความ)
มรดกและองค์ประกอบต่างกันอย่างไร
แม้ว่า Inheritance และ Composition จะเป็นแนวคิด OOP สองแบบ แต่ก็ค่อนข้างแตกต่างกันในสิ่งที่พวกเขาอนุญาตให้โปรแกรมเมอร์ประสบความสำเร็จ การสืบทอดคือความสามารถของคลาสในการสืบทอดคุณสมบัติและพฤติกรรมจากคลาสพาเรนต์โดยการขยาย ขณะที่องค์ประกอบคือความสามารถของคลาสในการเก็บอ็อบเจ็กต์ของคลาสต่างๆ เป็นข้อมูลสมาชิก ถ้าคลาสถูกขยาย คลาสนั้นจะสืบทอดคุณสมบัติ/พฤติกรรมสาธารณะและที่ได้รับการป้องกันทั้งหมด และพฤติกรรมเหล่านั้นอาจถูกแทนที่โดยคลาสย่อย แต่ถ้าคลาสอยู่ในอีกคลาสหนึ่ง คอนเทนเนอร์จะไม่ได้รับความสามารถในการเปลี่ยนหรือเพิ่มลักษณะการทำงานให้กับที่มีอยู่ การสืบทอดแสดงถึงความสัมพันธ์แบบ “is-a” ใน OOP ในขณะที่องค์ประกอบแสดงถึงความสัมพันธ์ “has-a”