PHP: Classes e Métodos Finais

PHP: Classes e Métodos Finais

No ultimo artigo sobre Programação Orientada a Objectos em PHP, falamos sobre as Abstracções, formas de aplicar, com dois exemplos práticos.
Neste artigo, vamos abordar Métodos e Classes Finais, e as hierarquias das mesmas.
Por outras palavras, estas classes e métodos, não podem ser reescritas nos seus filhos, ou mesmo estendidas.

Classes finais

Uma Classe Final, é uma classe que não pode ser estendida por nenhuma outra classe, ou seja, a Classe Final não tem herdeiros.

No nosso exemplo, temos uma Conta Poupança que, pela regra de negócio da banca, não possui uma derivação.
Isto é, não deve ser estendida.
Para estes casos definimos a classe como final, sendo que, somente existirão objectos da classe poupança e não filhos da mesma. O correto é que todas as contas estendam da classe pai Conta e mais nenhuma outra classe.

<?php
 final class ContaPoupanca {
   public function levantar($valor) {
   }
   public function verSaldo() { 
   } 
 }
  
 $poupanca = new ContaPoupanca();
 $poupanca->levantar(250);
?>

Métodos Finais

Também podemos ter métodos finais, que jamais podem ser reescritos nas classes filhas.

Nos exemplos que estamos a usar de agências bancárias, o método de Levantar dinheiro de uma Conta, é um padrão que se repete de conta para conta, independente do seu tipo.
Definir um método como final, previne que alterações as regras do negócio estabelecido inicialmente, sejam quebradas quando estendidas pela classe pai, não permitindo que o padrão seja quebrado.

<?php
class Conta {
   public function depositar($valor) {
   }

   final public function levantar($valor) { 
      # método final, não pode ser reescrito  
   }
}
  
class ContaCorrente extends Conta {
  public function depositar() {
  }
} 
?>

As Classes e Métodos finais, não costuma ser muito utilizadas. No entanto, é uma ferramenta util, por exemplo, em questões de regras de negócio muito bem pensadas e estruturadas.
Por norma, a tendência é usar algo padrão, que a qualquer momento é alterado. Dessa forma, são mais sustivésseis a erros, pois não previne a alteração da regra de negócio ao longo do projecto.

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.

Verifica outros artigos sobre a serie de PHP, aqui no blog.