Ser Programador

Iniciando com orientação a objetos no PHP

Entenda de forma fácil a utilização da orientação a objetos.


Sem sombra de dúvidas a orientação a objetos nos ajuda muito na organização e desenvolvimento do projeto, principalmente porque nos propicia a reutilização de código de uma forma inteligente.

Quanto eu estava estudando e aprendendo sobre a orientação a objetos, a maioria dos artigos que eu lia mostrava como criar objetos, mas não como aplica-los. Eu jamais tive ideia de como aplicar a OO (Orientação a Objetos) dentro de um sistema, até que por conta própria comecei a aplicar a OO onde eu entendia que cabia e a perceber seus benefícios.



Sem mais delongas, vamos ao que interessa: imagine que em um sistema no qual você esteja trabalhando, seja necessário efetuar diferentes cálculos monetários e que esses cálculos entram em várias regras dentro das diversas áreas deste sistema.

Vamos então criar um arquivo PHP em branco chamado calculate.php e escrever uma classe que atuará como controladora desses cálculos:

    	<?php
    	class Calculate
        {
		}
        
    

Essa classe será nosso o objeto.



Uma vez que nosso objeto está criado, precisamos então criar os métodos desse objeto.

Vamos imaginar que precisamos extrair a média de uma gama de valores retornados do banco de dados.

Sendo assim, vejamos como construir um método que extraia a média destes valores:

    	function media($valores)
        {
            $soma	= array_sum($valores);
            $qtd	= count($valores);
            $media	= $soma / $qtd;
            
            return $media;
    	}
    

Onde:

Na linha 1, estamos recebendo como parâmetro o array de valores;

Na linha 3, utilizamos a função array_sum do PHP para somar os valores do array;

Na linha 4, utilizamos a função count do PHP para contar os valores do array;

Na linha 5, efetuamos o cálculo matemático para obter a média;

Na linha 7, retornamos a média para quem está requisitando o método;



Vejamos o código completo deste objeto:

	    <?php
    	class Calculate
        {
        
            function media($valores)
            {
                $soma	= array_sum($valores);
                $qtd	= count($valores);
                $media	= $soma / $qtd;
                
                return $media;
            }
        }
        
    

Pronto, nosso objeto está finalizado.



Precisamos agora carregar o arquivo do nosso objeto dentro do arquivo onde é necessário ter acesso aos recursos que nosso objeto fornece. Podemos utilizar require ou include:

        <?php
    	require 'calculate.php';
        
    

A string entre aspas é o caminho de onde o arquivo está salvo.

Neste caso estamos assumindo que o arquivo do nosso objeto foi criado no mesmo diretório do arquivo no qual estamos trabalhando.



Uma vez o arquivo carregado, vamos fazer load do objeto:

        <?php
    	require 'calculate.php';
        
        $calculate = new Calculate;
        
    

Onde: new Calculate é literalmente a criação de um objeto na memória utilizando a classe Calculate que criamos (na qual foi carregada do arquivo calculate.php que fizemos load através do require). Depois estamos armazenando esse objeto na variável $calculate.



Vamos então ver como aplicar o método media do objeto calculate. Imaginemos que os valores a ser extraído a média sejam os seguintes:

    	$valoresBanco = array(100, 500, 3000, 789, 1024, 42);
    


Somente o que precisamos fazer é isto:

        <?php
	    require 'calculate.php';
        
    	$valoresBanco	= array(100, 500, 3000, 789, 1024, 42);
        
        $calculate		= new Calculate;
        $mediaValores	= $calculate->media($valoresBanco);
        
    

Onde:

Hífen + maior (->) é o sinal que utilizamos para referenciar um método que está dentro de um objeto;

$mediaValores irá receber o retorno do cálculo efetuado dentro do método media;



No caso de seu objeto ter mais de um método, você não precisa efetuar novos includes ou requires do arquivo do objeto, tampouco instanciar novamente o objeto (linha 5 do exemplo acima). Basta utilizar a mesma variável que está sendo usada como objeto e referenciar o outro objeto no qual você deseja.

Por exemplo:

        <?php
	    require 'calculate.php';
        
    	$valoresBanco	= array(100, 500, 3000, 789, 1024, 42);
        
        $calculate		= new calculate;
        $mediaValores	= $calculate->media($valoresBanco);
        $mediaComJuros	= $calculate->aplicarJuros($mediaValores, 0.8);
        $valorFinal		= $calculate->formatarParaMonetario($mediaValores);
        
    

Onde:

Na linha 8 estamos enviando dois parâmetros: o resultado da média para efetuar o ajuste de juros, e o valor porcentagem de 80%;

Na linha 9 estamos enviando o valor com juros para arredondamento e receber o resultado em formato monetário;



Contando com os dois métodos do exemplo acima, nosso calculate.php ficaria assim:

    	<?php
        class Calculate
        {
        
            function media($valores)
            {
                $soma	= array_sum($valores);
                $qtd	= count($valores);
                $media	= $soma / $qtd;
                
                return $media;
            }
            
            function aplicarJuros($valor, $juros)
            {
            	return $valor * (1 + $juros);
            }
            
			function formatarParaMonetario($valor)
            {
            	return number_format($valor, 2, ',', '.');
            }
        }
        
    


Você pode (e deve) criar vários métodos para o mesmo objeto (várias funções para uma mesma classe) desde que os demais métodos tenham o mínimo de similaridade entre si.

Por exemplo: este método que criamos é responsável por efetuar cálculos monetários. Jamais você deve inserir dentro dele algum método que trabalha com manipulação de strings.

O correto neste caso seria criar um objeto específico para essa finalidade e preenchê-lo com diferentes métodos que trabalham com strings, de acordo com sua necessidade.


Pronto! Agora sempre que for necessário efetuar um cálculo monetário, você não mais reescreverá este cálculo, mas sim, efetuará o load do objeto e trabalhará com os métodos construídos nele.

Essa prática evita a reescrita de código constante. Claro que em nosso exemplo os métodos são muitos simples, todavia, eu mesmo já escrevi métodos com mais de 300 linhas =D.

Um ótimo motivo para utilizar a OO é que quando for necessário alterar a regra de negócio, você fará alterações apenas no método do objeto. Sem a OO você teria que aplicar manutenção no seu sistema todo, em cada local onde você aplica aquela regra de negócio.


Conclusão: utilizar Orientação a Objetos é muito melhor e você só tem a ganhar!