image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Giuliano Dias
Giuliano Dias19/11/2024 11:19
Compartilhe

Aplicando o Princípio da Substituição de Liskov em PHP

  • #PHP

1. O que é o Princípio de Liskov (LSP)

O Princípio de Substituição de Liskov (LSP) é um dos cinco pilares dos princípios SOLID, criado por Barbara Liskov. Ele afirma que uma subclasse deve ser substituível pela sua superclasse sem alterar o comportamento do sistema. O comportamento da classe filha deve ser o mesmo da classe mãe para que a funcionalidade não seja alterada.

image

2. Para que Serve o LSP ?

O LSP serve para garantir que as heranças sejam consistentes e previsíveis, o que ajuda a manter o código limpo e modular. Com ele, é possível construir classes e sistemas complexos sem surpresas indesejadas, evitando bugs que aparecem quando uma subclasse não age como esperado. Isso significa desenvolver com classes de fácil reutilização e integração.

3. Exemplo de Violação do LSP

class Pagamento {
  public function processaPagamento(float $valorPagamento) {
      echo "Processando o valor do pagamento";
  }
}

class CreditoPagamento extends Pagamento {
  public function processaPagamento(float $valorPagamento) {
      echo "Processando o pagamento do cartão de crédito";
  }
}

class PaypalPagamento extends Pagamento {
  public function processaPagamento(float $valorPagamento) {
      throw new Exception("PayPal não é um tipo de pagamento suportado.");
  }
}

Ao substituir Pagamento por PaypalPagamento, o método processaPagamento quebra, porque PaypalPagamento lança uma exceção inesperada. Isso viola o princípio pois PaypalPagamento não se comporta como a classe base Pagamento.

4. Forma correta de implementar o LSP

interface PagamentoInterface {
  public function processaPagamento(float $valorPagamento): void;
}


class CreditoPagamento implements PagamentoInterface {
  public function processaPagamento(float $valorPagamento): void {
      echo "Processando pagamento por cartão de crédito";
  }
}

class PaypalPagamento implements PagamentoInterface {
  public function processaPagamento(float $valorPagamento): void {
      echo "Processando pagamento por Paypal";
  }
}

class ProcessoPagamento {
  public function pagar(PagamentoInterface $metodoPagamento, float $valorPagamento): void       {
   $metodoPagamento->processaPagamento($valorPagamento);
  }
}

$processo = new ProcessoPagamento();
$cartaoCredito = new CreditoPagamento();
$paypal = new PaypalPagamento();

$processo->pagar($cartaoCredito, 100.00);
$processo->pagar($paypal, 50.00);

Podemos observar que o método PaypalPagamento tem o mesmo comportamento de CreditoPagamento, pois não está lançando uma exceção e segue exatamente o padrão da interface implementada.

5. Benefícios do LSP

Seguir o LSP em PHP promove um código mais robusto e preparado para mudanças. Isso evita surpresas e retrabalho, facilitando a extensão das funcionalidades sem comprometer o código existente. O LSP é essencial para quem busca desenvolver sistemas bem organizados e escaláveis em PHP. Se você adicionar um novo método de pagamento, como PixPagamento, basta implementar PagamentoInterface e o sistema continuará funcionando.

Gostou? Me segue nas redes sociais

Linkedin: https://www.linkedin.com/in/giuliano-criscuoli/

Github: https://github.com/GiulianoCriscuoli

Instagram: @giucriscuoli e @southlaser

#DesenvolvimentoPHP #SOLIDPrincípios #Backend

Compartilhe
Comentários (0)