PHP: Abstrações

php_poo_abstracoes

No ultimo artigo, abordamos a utilização das heranças de classes em PHP, e como essas heranças podem ser usadas nas classes filhas da mesma, tal como que em PHP, as classes não têm herança múltipla, podendo apenas extender de uma classe apenas.

Classes Abstratas

Uma Classe Abstrata, é uma classe que não pode ser instanciada como um objecto directamente. Esta classe, tem de ser estendida numa outra classe, e assim que um objecto desta classe é criado.
Dessa forma, este herda todos os métodos e atributos que a classe abstracta estendida possui.

Exemplo:

<?php
  abstract class Conta {
    public $saldo = 0;
    public function levantar() {
    }
                                    
    public function depositar($valor) {
    }
  }
  
  class ContaPoupanca extends Conta {
    public function resgatar($valor) {
    }
  }
  
  
  $conta1 = new ContaPoupanca();
  $conta1->depositar(500);
  $conta1->resgatar(250); 
?>

No exemplo acima, a classe estendida usa os métodos declarados na classe abstracta, sendo que o conceito de herança é o mesmo em classes abstractas e concretas.

Mas, para que serve uma Classe Abstracta?

Vamos pensar no funcionamento de um banco!

Os clientes podem ter uma conta corrente e uma de poupança: o funcionamento de uma conta segue um determinado padrão, o que difere uma da outra são as sua operações que podem ser executadas em cada uma.

Métodos Abstractos

Também os métodos podem ser abstractos. Todo método abstracto precisa, obrigatoriamente, ser implementado na classe filha. Ou seja, todas as contas, independentemente do seu tipo (Conta ou Conta Poupança, como no exemplo), devem ter as operações básicas para levantamento do dinheiro, o seu depósito, transferência e por fim, a consulta.

<?php
  abstract class Conta {
    public $saldo = 0;
    public function levantar() {
  
    }
    public function depositar($valor) {
    }
  }
  
  class ContaPoupanca extends Conta {
    public function resgatar($valor) {
    }
  }
  
  $conta1 = new ContaPoupanca();
  $conta1->depositar(500);
  $conta1->resgatar(250);
?>

As contas de tipos diferentes, podem tratar estas operações, também elas de formas diferentes.

Por exemplo: um depósito numa conta de poupança, gera um determinado rendimento ao saldo aplicado. Para este caso, um método abstracto é uma forma de garantir que este método seja implementado na classe ContaPoupança, tal como nas restantes que a estendam.

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.