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!
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!
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
Top comments (0)