DEV Community

Carlos Viana
Carlos Viana

Posted on • Edited on

1 1 1 1 1

PHP Orientado a Objetos: Herança vs Composição

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

Image of Timescale

Timescale – the developer's data platform for modern apps, built on PostgreSQL

Timescale Cloud is PostgreSQL optimized for speed, scale, and performance. Over 3 million IoT, AI, crypto, and dev tool apps are powered by Timescale. Try it free today! No credit card required.

Try free

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more