En mi búsqueda por escribir un código mejor y más limpio, estoy aprendiendo acerca de los principios SOLID. En esto, LSP está demostrando ser poco difícil de entender adecuadamente.
Mi duda es ¿qué pasa si tengo algunos métodos adicionales en mi subtipo, S, que no estaban allí en tipo, T, esto siempre será una violación de LSP? En caso afirmativo, ¿cómo hago extend
mis clases?
Por ejemplo, digamos que tenemos un Bird
tipo. Y sus subtipos son Eagle
y Humming Bird
. Ahora ambos subtipos tienen un comportamiento común como el Bird
. Pero Eagle
también tiene un buen comportamiento depredador (que no está presente en el Bird
tipo general ), que quiero usar . Por lo tanto, ahora no podré hacer esto:
Bird bird = new Eagle();
Entonces, ¿dar Eagle
ese comportamiento extra está rompiendo el LSP?
En caso afirmativo, ¿eso significa que no puedo extender mis clases porque eso causaría una violación de LSP?
class Eagle extends Bird {
//we are extending Bird since Eagle has some extra behavior also
}
La extensión de clases debe permitirse de acuerdo con el principio de Abierto / Cerrado ¿verdad?
Gracias de antemano por responder! Como puede ver claramente, LSP me tiene confundido como cualquier cosa.
Editar: consulte esta respuesta SO. En esto nuevamente, cuando Car
tiene un comportamiento adicional como ChangeGear
, viola el LSP. Entonces, ¿cómo ampliamos una clase, sin violar el LSP?