O LSP afirma que as classes devem ser substituíveis por suas classes base, o que significa que as classes derivada e base devem ser semanticamente equivalentes.
Mas o LSP também se aplica a classes que implementam uma interface? Em outras palavras, se um método de interface implementado por uma classe é semanticamente diferente do que o usuário espera que seja, isso seria considerado uma violação do LSP?
design-patterns
design-principles
liskov-substitution
user1483278
fonte
fonte
Respostas:
Se a implementação for semanticamente diferente do comportamento documentado através dos invariantes da interface e de pré e pós-condições de seus métodos, a resposta será "sim", isso seria uma violação do LSP. O princípio estabelece as regras para a abstração e suas implementações, sem exigir que o lado da abstração esteja presente na forma de uma classe.
No entanto, se falarmos sobre o que os usuários esperam , a resposta seria "não necessariamente": os usuários têm direito a ter expectativas erradas.
fonte
Name
que não pode ser configuradanull
, entãoobj.Name != null
é considerado invariante dessa interface.