# LSP: A Fundação da Herança Efetiva no SOLID

Anderson L Pereira
3 min readSep 4, 2023

--

Dentro da robusta estrutura dos princípios SOLID, o Princípio da Substituição de Liskov (Liskov Substitution Principle, LSP) desempenha um papel crítico. É a terceira letra do acrônimo SOLID e enfatiza a importância de garantir que uma classe derivada possa substituir sua classe base sem afetar a corretude do programa. No coração deste princípio está a ideia de que as subclasses devem ser permutáveis por suas superclasses. Neste artigo, mergulharemos nos benefícios do LSP, acompanhados de estatísticas e exemplos de código que elucidam sua relevância.

## O que é o Princípio da Substituição de Liskov (LSP)?

Nomeado em homenagem à cientista da computação Barbara Liskov, que introduziu o conceito em uma palestra em 1987, o LSP se baseia na ideia de que objetos de uma superclasse devem poder ser substituídos por objetos de uma subclasse sem afetar a corretude do programa.

## Benefícios do LSP

Adotar o LSP tem vários benefícios:

1. **Manutenção e Extensibilidade** — Adotar o LSP torna o software mais fácil de manter e estender. Quando as subclasses são permutáveis com suas superclasses, os desenvolvedores podem introduzir novas subclasses com confiança.

2. **Robustez** — Ao seguir o LSP, asseguramos que novas subclasses não introduzirão comportamentos inesperados, o que contribui para a robustez do software.

3. **Reusabilidade** — Classes que aderem ao LSP são mais genéricas e, portanto, mais reutilizáveis, reduzindo a duplicação de código.

## Estatísticas sobre o LSP

Embora a disponibilidade de estatísticas específicas para o LSP seja limitada, estudos mostram que a adoção dos princípios SOLID, incluindo o LSP, pode reduzir os bugs em até 55% e aumentar a produtividade em 60%. Projetos que adotam SOLID tendem a ter um menor custo total de propriedade devido à facilidade de manutenção.

## Exemplificação Prática

Aqui, vamos examinar exemplos práticos de código para ilustrar uma má prática e uma boa prática na implementação do LSP.

### Má Prática

class Passaro:
def voar(self):
return "O pássaro está voando"

class Pinguim(Passaro):
def voar(self):
raise Exception("Pinguins não voam!")

Neste exemplo, `Pinguim` é uma subclasse de `Pássaro`. No entanto, ao tentar fazer um pinguim voar, o programa lançará uma exceção, violando o LSP.

### Boa Prática

from abc import ABC, abstractmethod

class Passaro(ABC):
@abstractmethod
def mover(self):
pass

class Andorinha(Passaro):
def mover(self):
return "A andorinha está voando"

class Pinguim(Passaro):
def mover(self):
return "O pinguim está nadando"

Neste design, `Pássaro` é uma classe abstrata com um método abstrato `mover()`. As subclasses `Andorinha` e `Pinguim` implementam esse método de acordo com suas características específicas, garantindo a substituição sem problemas.

## Conclusão

O Princípio da Substituição de Liskov é uma pedra angular na construção de sistemas orientados a objetos robustos e sustentáveis. Ao garantir que subclasses possam ser usadas no lugar de suas superclasses sem efeitos colaterais indesejados, promovemos a modularidade, extensibilidade e robustez do software.

Como os outros princípios SOLID, o LSP deve ser visto não apenas como uma diretriz técnica, mas como parte de uma filosofia maior de desenvolvimento que prioriza a clareza, a manutenibilidade e a robustez. Adotar esses princípios, incluindo o LSP, equipa os desenvolvedores com ferramentas e abordagens que facilitam a criação de software de alta qualidade em um mundo em rápida evolução.

Para os desenvolvedores que buscam aprimorar constantemente suas habilidades e construir software que resista ao teste do tempo, compreender e aplicar o Princípio da Substituição de Liskov é fundamental. Ele não apenas melhora a qualidade do código, mas também serve como um lembrete contínuo da importância de construir sistemas flexíveis e robustos.

--

--