Programação Orientada a Objetos em PHP

Pode ser mania de programador, mas às vezes no meu tempo livre gosto de abrir o VSCode e escrever algumas classes e objetos em PHP para praticar um pouco. Essa é a linguagem de programação que mais gosto de escrever, e quando estou “brincando” com POO, procuro colocar vários conceitos juntos para vê-los funcionando.

Abaixo estarei mostrando um pouco de código seguindo esse paradigma de programação: Orientação a Objetos no PHP. A ideia será a mesma em outras linguagens que implementam esse paradigma, apenas alterando alguns detalhes de código.

O código que usarei como exemplo refere-se a uma parte de um sistema voltado a veículos, onde são criados dois objetos, sendo um carro e um caminhão. Começarei por uma classe com um método abstrato, apenas para exibir mensagens.

Classe abstrata apenas para exibir mensagens no console.

Uma classe abstrata não pode ser instanciada para um objeto, e seus métodos poderão ser chamados a qualquer momento. Eu criei esse método para não precisar usar a constante “PHP_EOL” sempre que precisar exibir uma mensagem na tela. Essa constante faz com que seja inserida uma quebra de linha ao final, dessa forma a próxima mensagem irá ser exibida na linha de baixo na saída.

Interfaces servem como regras (ou contratos) para as classes que a implementarem. Nelas informamos alguns métodos que deverão ser implementados pelas classes. No exemplo abaixo, criei três interfaces. Veremos suas implementações mais abaixo.

Três regras a serem seguidas pelas classes que as implementarem

Mais abaixo essas implementações farão sentido. Resumindo: os veículos deverão ter um método de exibir as informações em forma de relatório, e precisam adicionar a kilometragem rodada. Para os Carros, como eles tem uma quantidade de pessoas a serem transportadas, deverá implementar o método de adicionar pessoas, assim como Caminhões carregam uma certa quantidade de peso, deverá implementar o método para adicionar essa quantidade.

Quando estudamos sobre Orientação a Objetos, vemos um princípio chamado Herança. No código abaixo criei a classe Veículo, que será herdada pelas classes Carro e Caminhao.

A classe Veículo guarda as propriedades e métodos que servem tanto para Carros quanto para Caminhões. Ela está marcada como abstrata pois não poderá ser instanciada, apenas herdada.

Independente do objeto ser um carro ou um caminhão, ele terá os atributos “marca”, “modelo” e “km”. Dessa forma, essas propriedades são informadas nessa classe que será “pai” das classes Carro e Caminhão. Perceba que essa classe está implementando a interface “regrasVeiculos”, e deverá conter os métodos “andar” e “relatorio”.

Abaixo estou criando a classe Carro, que será um objeto instanciado na aplicação e herdará da classe Veículo.

Classe Carro, herda propriedades e métodos de Veiculo, e implementa as regras da interface regrasCarro.

Um carro pode transportar um certo número de pessoas, na verdade um caminhão também, mas para um efeito didático, separei as responsabilidades de transporte deles, sendo o carro para transportar pessoas e o caminhão para transportar carga.

Perceba que o método construtor do carro está usando o mesmo método de sua classe pai, pois temos três propriedades que são comuns a ela. Apenas a propriedade maxPessoas pertence ao carro. No caminhão ocorre a mesma situação na construção do objeto, onde apenas a propriedade cargaMaxima pertence ao caminhão.

Classe filha Caminhão, herdando propriedades e métodos de Veículo e implementando as regras da interface regrasCaminhao

A classe Caminhao segue a mesma premissa da classe Carro, apenas diferenciando algumas características.

Para finalizar, temos o código que irá utilizar essas classes, criando dois objetos, um Carro e um Caminhão.

Código de teste, criando os objetos e utilizando seus métodos.

Os blocos “try..catch” foram colocados para que, caso os limites de pessoas ou carga sejam atingidos, o programa irá exibir a mensagem que está sendo “jogada” como uma Exceção.

A saída desse código será a seguinte:

O método “relatorio” implementado na classe pai “Veiculo” exibirá as propriedades dos objetos criados.

Existem alguns detalhes nessas implementações que não irei comentar aqui para não deixar esse artigo muito grande. Porém, se você estiver estudando, poderá percebê-los implementados no código.

Se tiver alguma dúvida/sugestão/crítica, fique á vontade para me escrever. Muito obrigado por acompanhar este artigo.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *