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.
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.
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.
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.
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.
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.
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:
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.