Arquitetura de SoftwareProgramação

S.O.L.I.D na prática: Liskov Substitution Principle (LSP)

Neste post veremos o Liskov Substitution Principle (LSP) – Princípio de Substituição de Liskov, que corresponde a terceira letra do acrônimo SOLID.

Chegamos ao quarto post da série sobre os 5 princípios SOLID.

O que é o Liskov Substitution Principle (LSP)?

O Princípio de Substituição de Liskov, diz que (calma que no início essa definição pode bugar sua cabeça mesma 😀 ):

“Se, para cada objeto o1 do tipo S há um objeto o2 de tipo T, de modo que, para todos os programas P definidos em termos de T, o comportamento de P não seja modificado quando o1 for substituído por o2, então S é um subtipo de T”.

Barbara Liskov, 1988

O conceito talvez tenha ficado mais popular na definição de Robert C. Martin (Uncle Bob):

“Classes derivadas devem poder ser substituídas por suas classes base”.

Em outras palavras, esse princípio nos orienta sobre o conceito de substituição de objetos (classes), considerando a relação hierárquica existente entre os objetos.

De certa forma, podemos dizer que essa abordagem nos ajuda a validar o comportamento de um subtipo ou que se um objeto (ou classe) pode ou não ser considerado um Subtipo de um determinado Tipo.

Portanto o termo “substituição” vem basicamente do questionamento se um objeto filho (derivado) pode ou não ser substituído pelo seu objeto pai (classe base) correspondente.

No vídeo a seguir falo sobre todas essas definições e mostro exemplos de violações e adequações ao Princípio da Substituição de Liskov (LSP). Também relaciono com outros conceitos fundamentais da Orientação a Objetos, como a Herança e o Polimorfismo, por exemplo.

Vídeo sobre o LSP do canal

Se quiser entender melhor sobre as principais motivações de compreendermos estes princípios e ter a visão geral sobre essa série de posts, acesse o primeiro artigo da série pelo link a seguir:

Clique aqui caso queira acessar o primeiro post da série sobre SOLID

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *