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