Aprende en casa Ir a KODOTI
Aprende en casa KODOTI

Liskov Substituion Principle - PHP

Vamos a entender el principio de sustitución de Liskov a través de un ejemplo claro con PHP.

Rodríguez Patiño, Eduardo
Rodríguez Patiño, Eduardo
2020-07-09 | 118 lecturas

Este principio nos dice que una clase hija debe ser usada como una clase padre sin cambiar su comportamiento.

Ejemplo

Cuando queremos reutilizar código es común que hagamos uso de herencia. Vamos a crear un clase abstracta que será un animal.

abstract class Animal 
{
    public function run() : void { }
    public function walk() : void { }
    public function hunt() : void { }
}

Ahora vamos a decirle a las clases derivadas que hereden de la clase Animal

class Tiger extends Animal 
{

}

class Turtle extends Animal 
{
    public function run() : void
    {
        throw new Exception("Cannot be implemented");
    }

    public function hunt()  : void
    {
        throw new Exception("Cannot be implemented");
    }
}

No veo el problema

EL problema esta en que la clase tortuga no puede implementar correctamente el comportamiento porque no puede correr ni cazar y lo que solemos hacer en estos casos es arrojar excepciones diciendo que el método no puede ser implementando.

Solución

Una posible solución es hacerlo a través de interfaces para definir mejor el comportamiento de una animal.

interface IRun
{
    function run(): void;
}

interface IHunt
{
    function hunt(): void;
}

interface IWalk
{
    function walk(): void;
}

Ahora si podría especificar lo que una tortuga sería capaz de hacer.

class Turtle implements IWalk
{
    public function walk(): void
    {

    }
}

Lo mismo pasaría para el tigre.

class Tiger implements IHunt, IWalk, IRun
{
    public function hunt(): void
    {

    }

    public function run(): void
    {

    }

    public function walk(): void
    {

    }
}

Estudia con nosotros

🚀 Mejora tus oportunidades laborales