Sobes.tech
Junior — Middle

Explique o que significa o princípio de substituição de Liskov e como ele é aplicado na programação orientada a objetos.

sobes.tech IA

Resposta da IA

O Princípio da Substituição de Liskov (Liskov Substitution Principle, LSP) é um dos cinco princípios SOLID na programação orientada a objetos. Ele afirma que objetos de uma subclasse devem poder ser usados no lugar de objetos da classe base sem alterar a correção do programa.

Simplificando, se a classe B herda de A, então objetos de B devem comportar-se de modo que possam ser usados no lugar de objetos de A sem erros inesperados ou mudanças na lógica.

Isso é alcançado garantindo que a subclasse não viole:

  • Os invariantes da classe base.
  • As pré-condições dos métodos (exigindo dados de entrada mais rigorosos).
  • As pós-condições (fornecendo resultados menos garantidos).

Exemplo:

class Bird {
    func fly() {
        print("O pássaro voa")
    }
}

class Sparrow: Bird {
    override func fly() {
        print("O pardal voa")
    }
}

// Violação do LSP ao adicionar uma classe Penguin que não consegue voar
class Penguin: Bird {
    override func fly() {
        fatalError("O pinguim não consegue voar")
    }
}

Neste exemplo, Penguin viola o LSP, pois não pode ser usado no lugar de Bird sem erros. Seria mais adequado definir uma interface separada para pássaros que voam.

Assim, o LSP ajuda a criar hierarquias de classes que são fáceis de expandir e manter, evitando erros inesperados ao substituir objetos.