Principio de sustitución de Liskov para niños
El Principio de Sustitución de Liskov o LSP (por sus siglas en inglés, Liskov Substitution Principle) es una idea importante en la programación orientada a objetos. Imagina que tienes un tipo de objeto, como un "animal". Si luego creas un tipo más específico, como un "perro", el Principio de Sustitución de Liskov dice que deberías poder usar un "perro" en cualquier lugar donde esperes un "animal", y todo debería seguir funcionando correctamente.
En otras palabras, si una clase (como "Perro") hereda de otra clase (como "Animal"), puedes usar los objetos de la clase "Perro" como si fueran objetos de la clase "Animal" sin que el programa falle o se comporte de forma inesperada. Este principio fue presentado por la científica de la computación Barbara Liskov en 1987.
Contenido
¿Qué es el Principio de Sustitución de Liskov (LSP)?
El Principio de Sustitución de Liskov es una regla que ayuda a los programadores a crear programas más estables y fáciles de mantener. Se asegura de que cuando una clase "hija" (llamada subtipo) se crea a partir de una clase "padre" (llamada supertipo), la clase hija pueda reemplazar a la clase padre sin causar problemas.
¿Por qué es importante el LSP?
Este principio es crucial porque garantiza que los programas funcionen de manera predecible. Si no se sigue el LSP, un programa podría tener errores inesperados cuando se usa un objeto de una clase hija en lugar de su padre. Esto hace que el código sea más difícil de entender y de corregir.
Barbara Liskov y Jeannette Wing explicaron este principio de forma más detallada en 1994. Su idea principal es que si algo funciona para un objeto de un tipo general (el padre), también debe funcionar para un objeto de un tipo más específico (el hijo).
Reglas clave del Principio de Sustitución de Liskov
Para que una clase hija pueda sustituir a su clase padre sin problemas, hay algunas reglas que se deben seguir. Estas reglas se basan en cómo interactúan las clases con sus condiciones de entrada (precondiciones), condiciones de salida (postcondiciones) y propiedades que siempre deben ser ciertas (invariantes).
- Precondiciones: Son las condiciones que deben cumplirse antes de que un método (una acción) se ejecute. Una clase hija no puede pedir más requisitos que su clase padre. Es decir, si el padre necesita algo para funcionar, el hijo no puede pedir algo adicional.
- Postcondiciones: Son las condiciones que deben ser ciertas después de que un método se ha ejecutado. Una clase hija no puede prometer menos resultados que su clase padre. Si el padre garantiza un resultado, el hijo también debe garantizarlo.
- Invariantes: Son las propiedades que siempre deben ser verdaderas para un objeto, sin importar lo que pase. Las propiedades que el padre establece como invariantes también deben ser mantenidas por la clase hija.
La Regla Histórica
Existe una regla adicional llamada la "Restricción histórica". Esta regla dice que los objetos solo deben ser modificados a través de sus métodos (acciones). Si una clase hija introduce nuevos métodos que no existen en la clase padre, estos nuevos métodos no deberían cambiar el objeto de una manera que sería imposible o incorrecta para el padre.
Por ejemplo, imagina una clase "PuntoInmutable" (un punto en un gráfico que no puede cambiar de lugar una vez creado). Si creamos una clase hija "PuntoMutable" (un punto que sí puede cambiar de lugar), esto violaría la regla histórica. Un "PuntoInmutable" siempre está en el mismo lugar desde que se crea, mientras que un "PuntoMutable" puede moverse. Usar un "PuntoMutable" donde se espera un "PuntoInmutable" causaría un problema porque el "PuntoInmutable" no tiene la capacidad de moverse.
Sin embargo, si una clase hija añade nuevas características que no afectan cómo se comporta el padre, eso está bien. Por ejemplo, una clase "Círculo" con un centro fijo pero un radio que puede cambiar, podría derivarse de un "PuntoInmutable" sin violar el LSP, siempre y cuando el "PuntoInmutable" solo se use para representar el centro fijo.
Véase también
En inglés: Liskov substitution principle Facts for Kids