Orientação a Objetos no PHP5

Figura 1: Orientação a Objetos no PHP5

INTRODUÇÃO

A orientação a objetos é um paradigma que representa toda uma filosofia para construção de sistemas. Ao invés de construirmos um sistema formado por um conjunto de procedimentos e variáveis, nem sempre agrupadas de acordo com o contexto, como fazíamos em linguagens estruturadas (Cobol, Clipper, Pascal), na orientação a objetos, utilizamos uma ótica mais próxima do mundo real. Trabalhamos com objetos, estruturas que já conhecemos no nosso dia-a-dia e sobre as quais já possuímos maior entendimento.

Ao trabalharmos com orientação a objetos, é fundamental entendermos o conceito de classe e objeto. Uma classe é uma estrutura que define o tipo de dados, podendo conter variáveis (atributos) e também funções (métodos) para manipular esses atributos.

ALGUMAS CARACTERISTICAS DE TRABALHAR COM POO EM PHP5

Iremos ver uma lista das novas características da programação orientada a objetos (POO) em PHP5. Porém, não iremos descrever detalhadamente cada uma destas características.

  • Nome fixo para os construtores e destrutores: Em PHP5 temos que utilizar nomes pré-definidos para os métodos construtores e destrutores. Os que se encarregam de resumir as tarefas de
  • iniciação e de destruição dos objetos. Agora estes métodos se chamam _construct e _destruct.
  • Acesso public, private e protected a propriedades e métodos: Agora podemos utilizar os modificadores de acesso habituais da POO. Estes modificadores servem para definir como métodos e propriedades das classes são acessíveis para cada meio.
  • Possibilidade de uso de interface: As interfaces são utilizadas na POO para definir um conjunto de métodos que certas classes devem implementar. Uma classe pode implementar várias interfaces.
  • Na prática, interfaces são utilizadas muitas vezes para suprir a falta de herança múltipla de linguagens como PHP ou Java.
  • Métodos e classes final: Em PHP5 pode-se indicar que um método é “final”. Com isso, não se permite sobrescrever esse método, em uma classe que o herde. Se a classe é “final”, o que se indica é que esta classe não permite ser herdada por outras classes.
  • Operador instaceof: Utiliza-se para sabermos se um objeto é uma instância de uma classe determinada.
  • Atributos e métodos static: Em PHP5 podemos fazer uso de atributos e métodos “static”. São as propriedades e funcionalidades as quais se pode acessar a partir do nome de classe, sem a necessidade de haver instanciado um objeto de tal classe.
  • Classes e métodos abstratos: Também é possível criar classes e métodos abstratos. As classes abstratas não se pode instanciar, costumam ser utilizadas para herdá-la por outras classes que não têm porque serem abstratas.
  • Constantes de classe: Pode-se definir constantes dentro de classe. Logo, pode-se acessar tais constantes através da própria classe.
  • Funções que especificam a classe que recebem por parâmetro: Agora se pode definir funções e declarar que devem receber um tipo especifico de objeto. No caso de que o objeto não seja da classe correta, se produz um erro.
  • Função _autoload: É habitual que nós desenvolvedores escrevamos um arquivo por cada classe que realizamos, como técnica para organizarmos o código da aplicação. Por esta razão, às vezes é cansativo realizarmos os includes de cada um dos códigos das classes que se utiliza em um script. A função _autoload serve para tentar incluir o código de uma classe que se necessite, e que não tenha sido declarada ainda no código que está sendo executado.
  • Clonagem de objetos: Se desejarmos, podemos obter um objeto a partir da cópia exata de outro objeto. Para isso, utiliza-se a instrução clone. Também podemos definir o método _clone para realizar tarefas associadas a clonagem de objeto.

CLASSES

As classes, em programação orientada a objetos (POO), são definições dos elementos que formam um sistema, neste caso, definições dos objetos que vão intervir em nossas aplicações.

Um objeto se define indicando que propriedades e funcionalidades tem. Justamente essas declarações são o que formam uma classe. Quando fizemos uma classe simplesmente especificamos que propriedades e funcionalidades têm. Exemplo, um homem poderia ter como propriedades o nome, sobrenome, endereço e como funcionalidades, comer, mover-se ou dormir.

Criaremos uma classe homem a seguir como modelo, e declararemos dois atributos: o nome e o sobrenome que vem a ser duas variáveis. E também criaremos três métodos, com os procedimentos a seguir para que o homem possa comer, mover-se ou dormir. Estes métodos são definidos através de declaração de funções dentro da nossa classe.

Observação: É recomendável iniciarmos os nomes de classes com a letra maiúscula ede preferência" evitarmos a utilização do caractere “_”. Por exemplo,utilize NomeDaClasse e não Nome_da_Classe e não Nome_da_Classe.

Listagem 1: Exemplo de classe com funções

 
<?php 
class Homem 
{
  var $nome;
  var $sobrenome;
		
  function comer ($comendo)
  {
    // Aqui o código do método 
   }
   function moverse ($movendo)
   {
     // Aqio o código do método	
   }
   function dormir ($dormindo)
   {
	// Aqui o código do método 	
    }		
  }
?>

Podemos observar que esse código não traz diferença alguma das versões anteriores do PHP, que já tinha suporte a certas características do POO. Isso mudará quando exploramos um pouco mais as características mais avançadas do PHP5, que implementam melhoras que não estavam presente nas versões anteriores.

INSTANCIANDO OBJETO A PARTIR DA CLASSE

Podemos ver que uma classe é apenas uma definição. Porém, se quisermos trabalhar com as classes devemos instanciar objetos, processo que consiste em gerar um exemplar de uma classe. Como exemplo, temos a classe Homem que criamos anteriormente. Com essa classe em si não podemos fazer nada, mas podemos criar o objeto homem a partir dela. Cada objeto homem terá suas características próprias, como o nome ou o sobrenome. Ademais, poderá desempenhar uma função como comer ou mover-se, agora também, cada um comerá ou se moverá por sua própria conta quando lhe for solicitado, sem interferir à princípio no que pode estar fazendo outro homem.

Vamos aproveitar para vermos como fizemos para gerarmos dois homens, ou seja, como instanciaríamos dois objetos da classe Homem. Para isto utilizamos o operador new.

  • $homem1 = new nome;
  • $homem2 = new nome;

É importante nos darmos conta da diferença entre um objeto e uma classe. A classe é uma definição das características e funcionalidades, algo abstrato que se concretiza com a instanciação de um objeto de tal classe.

Um objeto já tem propriedades, com seus valores concretos, e podem ser passadas mensagens (chamar aos métodos) para que façam coisas.

CONSTRUTORES

Os construtores tem como função resumir as ações de iniciação dos objetos. Quando instanciamos um objeto, temos que realizar diversos passos em sua iniciação, como dar valores a seus atributos, e disso que se encarrega o construtor. Os construtores podem receber dados para iniciar os objetos como se deseje em cada caso.

A sintaxe para a criação de construtores varia em relação ao PHP 3 e 4, pois se deve chamar com um nome fixo __construct (são dois underlines antes da palavra construct).

Listagem 2: Exemplo __construct


function __construct($nome,$sobrenome)
{
	$this->nome=$nome; 
	$this->numero=$sobrenome; 
}

DESTRUTORES

Os destrutores são funções que se encargam de realizar as tarefas que se necessita executar quando um objeto deixa de existir. Quando um objeto já não está referenciado por nenhuma variável, deixa de ter sentido que esteja armazenado na memória, entretanto, o objeto deve ser destruído para liberar seu espaço. No momento de sua destruição, a função se chama destrutor, que pode realizar as tarefas que o programador achar oportuno realizar.

Porém, a criação de um destrutor é opcional. Somente devemos cria-lo, se desejarmos fazer alguma coisa quando um objeto se elimine da memória.

O destrutor é como qualquer outro método da classe, embora deve se declarar com um nome fixo: __destruct (são dois hifens baixos underlines antes da palavra destruct).

Listagem 4: Exemplo _destruct


function __destruct ()
{ 
  "<br>destruido:" . $this->nome;
}

Assim concluímos este artigo, onde tivemos como objetivo conhecer um pouco dos novos recursos disponíveis no PHP5 para orientação a objetos. Espero que o tema tenha sido de agrado e compreensão a todos os leitores.