Herencia vs composición
La herencia y la composición son dos conceptos importantes que se encuentran en OOP (programación orientada a objetos). En términos simples, tanto la composición como la herencia se ocupan de proporcionar propiedades o comportamientos adicionales a una clase. La herencia es la capacidad de una clase para heredar las propiedades y el comportamiento de una clase principal extendiéndola. Por otro lado, la composición es la capacidad de una clase para contener objetos de diferentes clases como datos miembros.
Que es la herencia?
Como se mencionó anteriormente, la herencia es la capacidad de una clase para heredar las propiedades y el comportamiento de una clase principal extendiéndola. La herencia esencialmente proporciona una reutilización de código al permitir la extensión de las propiedades y el comportamiento de una clase existente por una clase recientemente definida. Si la clase A se extiende B, entonces la clase B se llama clase principal (o Super Clase) y la clase A se llama clase infantil (o clase derivada/subcase). En este escenario de ejemplo, la clase A heredará todos los atributos y métodos públicos y protegidos de la súper clase (b). La subclase puede anular opcionalmente (proporcionar funcionalidad nueva o extendida a los métodos) el comportamiento heredado de la clase principal.
La herencia representa una relación "IS-A" en OOP. Esto esencialmente significa que A también es B. En otras palabras, B puede ser la clase con una descripción general de una determinada entidad del mundo real, pero A especifica una cierta especialización. En un problema de programación del mundo real, la clase de persona podría extenderse para crear la clase de empleados. Esto se llama especialización. Pero también podrías crear primero la clase de empleados y luego generalizarla a una clase de persona también (yo.mi. generalización). En este ejemplo, el empleado tendrá todas las propiedades y comportamientos de la persona (i.mi. El empleado también es una persona) y puede contener alguna funcionalidad adicional (por lo tanto, la persona no es un empleado) también.
Que es la composición?
La composición es la capacidad de una clase para contener objetos de diferentes clases como datos miembros. Por ejemplo, la clase A podría contener un objeto de clase B como miembro. Aquí, todos los métodos públicos (o funciones) definidos en B se pueden ejecutar dentro de la Clase A. La clase A se convierte en el contenedor, mientras que la clase B se convierte en la clase contenida. La composición también se conoce como contenedor. En este ejemplo, se puede decir que la clase A está compuesta por la Clase B. En OOP, la composición representa una relación "ha-a". Es importante tener en cuenta que, a pesar de que el contenedor tiene acceso para ejecutar todos los métodos públicos de la clase contenida, no puede alterar o proporcionar una funcionalidad adicional. Cuando se trata de un problema de programación del mundo real, un objeto de la caja de texto de clase puede estar contenido en el formulario de clase y, por lo tanto, se puede decir que un formulario contiene un cuadro de texto (o alternativamente, una forma está compuesta de un cuadro de texto).
¿Cuál es la diferencia entre la herencia y la composición??
Aunque la herencia y la composición son dos conceptos OOP, son bastante diferentes en lo que permiten que el programador logre. La herencia es la capacidad de una clase para heredar las propiedades y el comportamiento de una clase principal extendiéndola, mientras que la composición es la capacidad de una clase para contener objetos de diferentes clases como datos miembros. Si se extiende una clase, hereda todas las propiedades/comportamientos públicos y protegidos y esos comportamientos pueden ser anulados por la subclase. Pero si una clase está contenida en otra, el contenedor no obtiene la capacidad de cambiar o agregar comportamiento al contenido. La herencia representa una relación "is-a" en OOP, mientras que la composición representa una relación "ha-a".