"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Composición versus herencia

Composición versus herencia

Publicado el 2024-11-08
Navegar:428

Composition vs. Inheritance

Herencia vs. Composición en PHP ?

Cuando programamos orientado a objetos, es importante entender la diferencia entre Herencia y Composición:

Herencia
Una clase hereda de otra, reutilizando y extendiendo su comportamiento.

class Motor
{
    public function ligar()
    {
        return "Motor Ligado!";
    }
}

class Carro extends Motor{}

$carro = new Carro();
$carro->ligar();

Composición
Una clase contiene instancias de otras clases para delegar responsabilidades. A menudo se prefiere la composición para crear sistemas más flexibles y evitar problemas con la herencia profunda.

Ejemplo práctico
¿Alguna vez te has parado a pensar que cuando arrancamos el coche, en realidad estamos arrancando el motor? Siguiendo este razonamiento, podemos crear dos objetos: uno llamado Motor y otro llamado Coche. De esta manera, el objeto Car contendrá una instancia del objeto Engine, que será responsable de arrancar el auto.

Código

class Motor
{
    public function ligar()
    {
        return "Motor Ligado!";
    }
}

class Carro
{
    private Motor $motor;

    public function __construct(Motor $motor)
    {
        $this->motor = $motor;
    }

    public function ligar()
    {
        return $this->motor->ligar();
    }
}

Comprensión
En lugar de que la clase Car tenga la lógica para arrancar el motor directamente integrada, delega esta responsabilidad a un objeto Engine. Esto mantiene a la clase Car enfocada en lo que se supone que debe hacer, haciendo que el código sea más modular y más fácil de mantener. En el futuro, podrás cambiar o mejorar el motor sin modificar el código de clase de Auto.

Pruebas

$motorV4 = new Motor();
$carro = new Carro($motorV4);
echo $carro->ligar(); // Saída: Motor Ligado!

Ventajas
Este enfoque es más flexible porque permite que el automóvil tenga diferentes tipos de motor (por ejemplo, un V4, V6 o un motor eléctrico) sin tener que cambiar la clase de automóvil. Esta modularidad facilita el mantenimiento y la expansión del sistema.

Declaración de liberación Este artículo se reproduce en: https://dev.to/carloseduardoalvesviana/composition-vs-inheritance-98a?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3