El tercero de los puntos de SOLID es el principio de sustitucion de Liskov. Fue desarrollado por Barvara Liskov y Jeannette Marie Wing en la decada de los noventa. En su definición más formal tenemos que: si S es un subtipo de T, entonces los objetos de tipo T en un programa de computadora pueden ser sustituidos por objetos de tipo S (es decir, los objetos de tipo S pueden sustituir objetos de tipo T), sin alterar ninguna de las propiedades deseables de ese programa (la corrección, la tarea que realiza, etc.).
Esto traducido al ámbito de la orientación a objetos, nos dice que si a un método M le podemos pasar objetos t1 de la clase T, el método hace correctamente su función. Entonces si tenemos que La clase S hereda de T e instanciamos un objeto s1 de la clase S, entonces podríamos pasarle este objeto s1 al metodo M y todo funcionará sin ningun problema.
En el mundo de la orientacion a objetos el concepto de herencia o extension se puede traducir al lenguaje hablado como: "ES UN". Cuando decimos X es un Y, entonces podemos aplicar herencia entre nuestras dos entidades:
class Felino
{
public function comer()
{
echo "soy un depredador";
}
}
class Gato extends Felino
{
}
class Leon extends Felino
{
}
$f1 = new Leon();
$f1->comer();
class Mamifero{
function __construct (Felino $felino){
}
}
$l1 = new Leon();
$m1 = new Mamifero ($l1); // podemos pasar a la clase mamifero un objeto de tipo Leon