Inspirado por esta respuesta:
El principio de sustitución de Liskov requiere que
- Las condiciones previas no pueden fortalecerse en un subtipo.
- Las condiciones posteriores no pueden debilitarse en un subtipo.
- Las invariantes del supertipo deben conservarse en un subtipo.
- Restricción del historial (la "regla del historial"). Los objetos se consideran modificables solo a través de sus métodos (encapsulación). Dado que los subtipos pueden introducir métodos que no están presentes en el supertipo, la introducción de estos métodos puede permitir cambios de estado en el subtipo que no están permitidos en el supertipo. La restricción de la historia lo prohíbe.
Esperaba que alguien publicara una jerarquía de clases que violara estos 4 puntos y cómo resolverlos en consecuencia.
Estoy buscando una explicación elaborada con fines educativos sobre cómo identificar cada uno de los 4 puntos en la jerarquía y la mejor manera de solucionarlo.
Nota:
esperaba publicar una muestra de código para que las personas trabajen, pero la pregunta en sí misma es sobre cómo identificar las jerarquías defectuosas :)