Curso POO com PHP: #5 - Composição

E ai, escoteiro. Como está sendo sua jornada pelo mundo dos objetos? Está conseguindo fazer uma boa associação com o mundo real? No post de hoje vamos continuar com algumas analogias...

Como vimos até agora, um Objeto pode ter características (propriedades) e pode executar ações (métodos), além disso ele pode herdar essas propriedades e métodos de outros objetos. Porém um objeto do mundo real pode ser formado por vários outros objetos, como por exemplo um carro, que é composto por: Motor, Bancos, Volante, Pedais, Retrovisores, etc... E cada objeto desse pode ser formado por vários outros objetos.

Em Programação Orientada a Objetos essa característica é conhecida como Composição e é um conceito bem simples de ser implementado.

Vamos a um exemplo.

<?php

class Pessoa {
    private $nome;
    private $endereco;

    public function __construct(string $nome, Endereco $endereco) {
        $this->nome = $nome;
        $this->endereco = $endereco;
    }

    public function imprimirDadosPessoais() {
        echo "Nome: {$this->nome}\nEndereço: {$this->endereco->obterLogradouro()}";
    }
}

class Endereco {
    private $logradouro = "";

    public function __construct($logradouro) {
        $this->logradouro = $logradouro;
    }

    public function obterLogradouro() {
        return $this->logradouro;
    }
}

$endereco = new Endereco("Rua das Flore, 123, Centro - Salvador/BA");
$pessoa = new Pessoa("Bruna Pereira", $endereco);
$pessoa->imprimirDadosPessoais();

Nesse exemplo uma Pessoa tem um Endereço, ou seja, dentro dos itens que compõem uma pessoa, está o seu endereço. Talvez esse não seja o melhor exemplo, mas ele é simples o suficiente para explicar o conceito.

No construtor da classe Pessoa recebemos o nome como sendo uma string e o endereço como sendo uma instância da classe Endereco. Sendo assim, eu já sei que o que for passado como parâmetro ali terá obrigatoriamente o método "obterLogradouro", visto que a classe Endereco tem esse método e o que vai ser passado é uma instância dessa classe.

Não vou detalhar muito o que essas classes fazem, porque é basicamente o que já vimos várias vezes até aqui nos posts anteriores, mas é interessante perceber que a classe Pessoa tem 2 propriedades, e uma dessas propriedades é um Objeto do tipo Endereço. Bem louco né? Mas é assim que o mundo real funciona também.

Esse post vai ser mais curtinho mesmo, porque o conceito é bem simples e não tem muito o que ficar falando aqui. Espero que você esteja gostando e até a próxima, escoteiro!!!