Herança vs. Composição em PHP 🚗

Carlos Viana - Sep 20 - - Dev Community

Herança vs. Composição em PHP 🚗

Quando programamos com Orientação a Objetos, é importante entender a diferença entre Herança e Composição:

Herança
É um dos princípios fundamentais da Programação Orientada a Objetos (OOP) e permite que uma classe herde propriedades e métodos de outra classe. Em termos simples, herança possibilita a criação de uma nova classe (chamada de subclasse ou classe filha) que reutiliza, estende ou modifica o comportamento de uma classe existente (chamada de superclasse ou classe pai).

<?php 

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

class Carro extends Motor
{
    public function ligar()
    {
        return "O motor do carro está ligado!";
    }
}

$carro = new Carro();
echo $carro->ligar(); // Saída: O motor do carro está ligado!
Enter fullscreen mode Exit fullscreen mode

Composição
Agora, imagine que estamos modelando um carro que é composto por várias partes, como motor e rodas. Em vez de criar uma única classe "Carro" com todos os detalhes, podemos dividir essas funcionalidades em classes menores. O carro será composto por objetos de outras classes, como um Motor.

<?php 

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();
    }
}

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

Enter fullscreen mode Exit fullscreen mode

Entendendo
Em vez de a classe Carro conter a lógica de ligar o motor diretamente, ela delega essa responsabilidade ao objeto Motor. Isso mantém a classe Carro focada em sua própria responsabilidade, tornando o código mais modular e fácil de manter. No futuro, você pode modificar ou melhorar o Motor sem precisar alterar o código da classe Carro.

Vantagens
Essa abordagem é mais flexível porque permite que o carro tenha diferentes tipos de motor (por exemplo, um motor V4, V6 ou elétrico), sem precisar mudar a classe Carro. Essa modularidade facilita a manutenção e a expansão do sistema.

Você pode executar o código em https://onecompiler.com/php

. . . . . . .