LSP establece que las clases deberían ser sustituibles por sus clases base, lo que significa que las clases derivadas y base deberían ser semánticamente equivalentes.
Pero, ¿LSP también se aplica a las clases que implementan una interfaz? En otras palabras, si un método de interfaz implementado por una clase es semánticamente diferente de lo que el usuario espera que sea, ¿se consideraría una violación del LSP?
design-patterns
design-principles
liskov-substitution
usuario1483278
fuente
fuente
Respuestas:
Si la implementación es semánticamente diferente del comportamiento documentado a través de los invariantes de la interfaz y las condiciones previas y posteriores de sus métodos, entonces la respuesta es "sí", sería una violación del LSP. El principio establece las reglas para la abstracción y sus implementaciones, sin requerir que el lado de la abstracción esté presente en forma de clase.
Sin embargo, si hablamos de lo que los usuarios esperan , la respuesta sería "no necesariamente": los usuarios tienen derecho a tener expectativas equivocadas.
fuente
Name
que no se puede establecer ennull
, entoncesobj.Name != null
se dice que es una invariante de esa interfaz.