SOLID - Liskov Substitution Principle (LSP)
Versão clássica 88 - Se, para cada objeto do tipo , existir um objeto do tipo T de modo que para todos os programas definidos em termo de o comportamento de é inalterado quando substituímos por . Então, é um subtipo de .
Versão mais facil 94 - Seja alguma propriedade provável de objetos do tipo . Então, deve ser verdade que para todos os objetos do tipo quando for um subtipo de .
Versão para burros - Subclasses devem ser substitutos válidos para suas superclasses.
Aqui vale destacar que a maioria das traduções literais aponta que a classe pai deve ser capaz de substituir a classe filha. Mas o foco é o contrário.
Como Uncle bob mesmo explica: Se temos uma função que recebe como argumento a classe e passamos no lugar uma classe que é derivada de . A função não deve mudar seu comportamento.
Referências
- Desenvolvedor.io - Curso Arquitetura
- https://objectmentor.com/resources/articles/lsp.pdf
- https://www.cs.tufts.edu/~nr/cs257/archive/barbara-liskov/data-abstraction-and-hierarchy.pdf
- https://dl.acm.org/doi/pdf/10.1145/197320.197383 (artigo: A Behavioral Notion of Subtyping - 1994)
- Agile Principles, Patterns, and Practices in C# cap 10