DEV Community

Carlos Viana
Carlos Viana

Posted on

Composition vs. Inheritance

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

Quando programamos orientados a objetos, é importante entender a diferença entre Herança e Composição:

Herança
Uma classe herda de outra, reutilizando e estendendo seu comportamento.

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

class Carro extends Motor{}

$carro = new Carro();
$carro->ligar();
Enter fullscreen mode Exit fullscreen mode

Composição
Uma classe contém instâncias de outras classes para delegar responsabilidades. Muitas vezes, a composição é preferida para criar sistemas mais flexíveis e evitar problemas com herança profunda.

Exemplo Prático
Já parou para pensar que, quando ligamos o carro, estamos na verdade ligando o motor? Seguindo esse raciocínio, podemos criar dois objetos: um chamado Motor e outro chamado Carro. Dessa forma, o objeto Carro conterá uma instância do objeto Motor, que será responsável por ligar o carro.

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

Enter fullscreen mode Exit fullscreen mode

Entendendo
Em vez de a classe Carro ter a lógica de ligar o motor embutida diretamente, ela delega essa responsabilidade a um objeto Motor. Isso mantém a classe Carro focada apenas no que ela deve fazer, tornando o código mais modular e fácil de manter. No futuro, você pode alterar ou melhorar o motor sem modificar o código da classe Carro.

Testando

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

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

Top comments (0)