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