Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Dúvida] Dúvida conceitual sobre a definição do LSP (Princípio de Substituição de Liskov)

Estou fazendo o curso Flutter: melhore a qualidade do app com design patterns e fiquei com uma dúvida no Para saber mais: princípios SOLID.

Lendo a definição do Liskov Substitution Principle (LSP), notei o seguinte trecho:

"Ele diz que uma classe derivada (uma classe que herda algo de uma classe base) deve ser substituível por sua classe base".

Fiquei confuso com a direção dessa substituição. Pelo que estudei, o princípio diz o oposto: que a classe base deve ser capaz de ser substituída por qualquer uma de suas classes derivadas (filhas) sem que o programa quebre.

No próprio exemplo dado logo abaixo, a função espera receber a classe base (Funcionario) e nós passamos as classes derivadas (Gerente ou Vendedor) no lugar dela.

Isso não significa que a classe base foi substituída pelas derivadas?

A definição do texto acabou ficando invertida por engano ou tem alguma outra interpretação que deixei passar?

Obrigado!

1 resposta

Olá!

A interpretação está correta: no LSP, uma instância da classe derivada deve poder ser usada no lugar da classe base sem alterar o comportamento esperado do programa. Por isso, no exemplo, Gerente e Vendedor podem ser passados para uma função que recebe Funcionario. A frase “a classe derivada deve ser substituível por sua classe base” pode mesmo causar essa confusão, pois a ideia fica mais clara como “objetos da classe derivada devem poder substituir objetos da classe base”.