O Liskov Substitution Principle – Entendendo SOLID – Parte 3

O Liskov Substitution Principle – Entendendo SOLID – Parte 3

Seguimos nossa jornada sobre SOLID! Ainda faltando os 3 últimos princípios, no post de hoje falaremos sobre o Liskov Substitution Principle. Lembrando que se você não viu os primeiros posts, você pode acompanhá-los aqui.

A definição do princípio, diz que: “Classes filhas nunca devem infringir as definições de tipo da classe pai”. O princípio, proposto por Barbara Liskov em 1987 não é nada intuitivo de se entender. Em outras palavras, o que realmente ele quer dizer de acordo com Robert Martin é que subtipos de uma classe devem poder ser substituídos por suas classes bases sem quebrar nenhuma interface ou ter qualquer comportamento inesperado.

Seguindo o LSP garantimos que nossas abstrações estejam corretas, nos ajudando a criar códigos mais reutilizáveis e organizar melhor a hierarquia de nossas classes. Mas, chega de texão e vamos logo pro momento show me the code.

O Liskov Substitution Principle

falha liskov substitution principle

Observe que no código acima o LSP é violado. Temos duas classes, a classe base Estatisticas e uma classe filha, EstatisticasAdmin. A classe filha viola o LSP por que ela redefine totalmente a classe base quando redefine o que o método posts  retorna.

Enquanto a classe base retorna um array de posts, ela retorna uma string com dados filtrados de acordo com a popularidade dos posts. Isso é grave, pois imagine um exemplo onde em um sistema, poderíamos ter uma coleção de objetos do tipo estatistica sejam eles admin ou base e que desejamos iterar sobre essa coleção chamando o método post sobre cada um desses objetos. Como o retorno desses métodos é diferente, comportamentos estranhos e inesperados podem ocorrer.

Vejamos agora como refatorar esse código para que ele cumpra o Liskov Substitution principle:  

exemplo liskov substitution principle

Agora classes base e filha ambas respondem posts com um array de posts, mantendo a mesma interface na hierarquia.

Ficou alguma dúvida sobre o que é o Liskov Substitution Principle?  Não hesite em usar a área de comentário para discutirmos, tirarmos dúvidas e gerando mais informação! Espero vocês aqui na semana que vem para mais um post da nossa série.

Algumas fontes utlizadas nesse post:

Sobre nós

Vivemos em uma era onde a tecnologia se faz presente em todo setor corporativo, independente do ramo de atividade. Surgimos visando esta crescente demanda.

Nossos contatos

+55 (11) 2528 7798
+55 (11) 98081 4290