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.
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