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!!!