Sobes.tech
Junior — Middle

Podes dar um exemplo de como o princípio de substituição de Liskov é aplicado na prática da programação?

sobes.tech IA

Resposta da IA

O Princípio da Substituição de Liskov (Liskov Substitution Principle, LSP) afirma que objetos de uma subclasse devem poder ser usados no lugar de objetos da classe base sem alterar a correção do programa.

Exemplo em JavaScript (Node.js):

class Bird {
  fly() {
    console.log('O pássaro voa');
  }
}

class Sparrow extends Bird {
  fly() {
    console.log('O pardal voa');
  }
}

class Ostrich extends Bird {
  fly() {
    throw new Error('A avestruz não consegue voar');
  }
}

function makeBirdFly(bird) {
  bird.fly();
}

const sparrow = new Sparrow();
makeBirdFly(sparrow); // O pardal voa

const ostrich = new Ostrich();
makeBirdFly(ostrich); // Erro — viola o LSP

Aqui, a classe Ostrich viola o princípio de substituição de Liskov, pois a subclasse não suporta o comportamento da classe base (o método fly). Para cumprir o LSP, é melhor dividir as classes em aves que voam e aves que não voam, por exemplo, através de interfaces ou classes base separadas.