Composition vs. Inheritance

Linda Hamilton
发布: 2024-09-20 22:15:10
原创
901 人浏览过

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();
登录后复制

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.

以上是Composition vs. Inheritance的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!