PHP: Programação Orientada a Objectos

PHP: Programação Orientada a Objectos

A Programação Orientada a Objecto, ou POO, é um padrão de programação em que o software é composto por uma variedade de blocos de código, por si independentes, mas que juntos, montam todo o nosso sistema que estamos a desenvolver.

O PHP não é excepção, tendo também esta linguagem suporte a Orientação a Objectos.

Existem várias vantagens no uso de POO, tais como:

  • Economização de tempo, por meio da reutilização de código;
  • O código pode ser interpretado e adicionado mais facilmente;
  • Torna a manutenção muito mais prática e eficiente;

Conceitos fundamentais do POO:

  • Classes – uma classe é representada por vários objectos;
  • Objectos – um objecto, é uma entidade do “real”, concreta ou abstracta, que seja aplicável ao sistema;
  • Abstracção – São tipos abstractos de dados;
  • Atributos / Propriedades – são características de um determinado objecto.

Classes e Objectos

As principais dúvidas sobre este tema, recaem sempre sobre o mesmo ponto: qual é a diferença entre uma Classe e um Objecto?

Se começas-te os teus primeiros passos em POO, ou em programação em geral, a explicação é simples. Por norma temos tendência a investigar sobre os temas, e procuramos coisa complexas demais para entender, o que nos leva a criar mais dúvidas.

Vou apresentar agora algumas definições e exemplos práticos.

Podemos de certa forma, olhar para uma Classe, como quem rege tudo o que acontece. Os seus súbditos, de certa forma, são os objectos. A Classe, define as suas características e comportamentos. Cada característica é representada por um atributo e cada comportamento é definido por um método.

Dessa forma, uma Classe não é um Objecto, mas sim, uma abstracção da sua estrutura, em que podemos definir quantos objectos queremos ter.

<?php
  Class Conta {
  }
  $conta  = new Conta();
  $conta2 = new Conta();
  $conta3 = new Conta();
?>

Criamos uma classe vazia, com o nome conta. Depois definimos 3 variáveis, conta, conta2 e conta3.

Podemos dizer então que os três objectos são do tipo conta. E é dessa maneira que funciona todo objecto, seu tipo será sempre a classe a partir do qual ele é criado.

Atributos e Métodos

Uma classe é composta por atributos e métodos, que juntos dão fundamento e utilidade a um objecto.

<?php
 Class Conta {
   public $saldo = 500;
   public $titular;
  
   function levantar($valor){
  
   }
  
   function depositar($valor){
  
   }
  
   function verSaldo(){
  
   }
 }
                         
  $conta1 = new Conta();
  $conta1->depositar(500);
  $conta1->levantar(20);
  
  $conta2 = new Conta();
  $conta2->depositar(250);
  $conta2->verSaldo();
?>

A classe Conta tem como atributos o saldo da conta e o titular. E como métodos possui depositar(), levantar() e verSaldo().

Para aceder o método depositar() do objecto $conta1 precisamos utilizar uma seta (->). Denominando-se “Operador de Acesso a Objectos”, e é através dessa seta que indicamos que queremos aceder a um determinado atributo ou método de um objecto.

<?php
  Class Conta{
    public $saldo = 0;
    public $titular;
 
    function depositar($valor){
      $this->saldo += $valor;
    }
  
    function levantar($valor){
      if(($this->saldo > 0) && ($this->saldo >= $valor))
      {
        $this->saldo -= $valor;
      }else{
        echo "Saldo insuficiente";    
      }
    }
     
    function verSaldo(){
      echo "Saldo Atual:".$this->saldo. "<br>";
    }
  }
  
  $novaConta = new Conta();
  $novaConta->verSaldo();
  $novaConta->depositar(500);
  $novaConta->verSaldo();
  $novaConta->levantar(150);
  $novaConta->verSaldo();
?>

Se prestares atenção, para aceder aos nossos atributos dentro dos métodos, utilizamos a variável reservada $this. Se fosse preciso chamar algum método da própria classe dentro de um outro método, teríamos de usar o $this, que é usado para aceder aos atributos e métodos da própria classe e só existe dentro deste “scope”. No PHP, este, é fundamental e obrigatório, mas noutras linguagens de programação, o $this acaba por ser opcional.

Ainda a muito mais sobre POO, sendo que no próximo artigo, vamos falar sobre Herança de Classes, como extender, entre outros temas.

Para futuras referências, todos os código deste artigos, e futuros artigos, estarão disponíveis na minha conta de Github. Podem usar todo o código de forma totalmente gratuita, e para os fins que entenderem.

Mais desta série:

Continua a acompanhar a nossa série sobre PHP, com o artigo PHP: Heranças