Concepto del principio de sustitución de Liskov
El principio de sustitución de Liskov, el tercer principio de los cinco principios SOLID, es uno de los más complicados. Su concepto puro indica que si S es un subtipo de T, instancias de T deberían poder sustituirse por instancias de S sin alterar las propiedades del programa.
Analizando el concepto vemos que al crear una extensión de cualquier clase, allí donde se usa la clase padre deberiamos poder sustituirlo por la clase hija y el programa debe seguir funcionando de igual forma.
Visto de otra forma, teniendo una clase padre, en la cual existe un contrato, al crear una jerarquía de clases, el contrato del padre se mantiene en los hijos, por lo que sustituir el padre por cualquiera de los hijos no afectará al funcionamiento.
Este principio, junto con el principio de responsabilidad única, es la base para que el principio abierto/cerrado se cumpla. La realidad es que el principio de sustitucion de Liskov es uno de los que más se incumple, ya que al realizar extensiones de clases, en muchas de ellas se sobreescriben métodos cambiando la funcionalidad y el contrato del padre.
A la hora de extender clases hay que tener muy en cuenta este principio, de lo contrario no podremos realizar modificaciones futuras de una manera rápida, sencilla y, sobre todo, segura.