Principio de Liskov en S.O.L.I.D.

Clase 7 de 27Curso de Patrones de Diseño y SOLID en Python

Resumen

Comprende y aplica con seguridad la L de S.O.L.I.D.: el principio de sustitución de Liskov garantiza coherencia, interoperabilidad y evita comportamientos inesperados. Propuesto por Barbara Liskov, establece una regla simple y poderosa: las subclases deben poder usarse en lugar de su clase base sin romper nada.

¿Qué es el principio de sustitución de Liskov y por qué importa?

El Liskov Substitution Principle define que las subclases deben ser sustituibles por sus clases base. Esto asegura que el sistema mantenga su consistencia y la correcta ejecución del programa al intercambiar implementaciones que comparten contrato y comportamiento.

En palabras simples: - Las subclases respetan el contrato de la clase base. - No cambian la firma de los métodos ni el tipo de retorno. - No requieren atributos nuevos para poder usar los métodos existentes. - Mantienen compatibilidad de interfaces y tipos. - No introducen excepciones inesperadas ni parámetros adicionales que rompan llamadas existentes.

¿Cómo se aplica en diseño de clases e interfaces?

Para que distintas implementaciones sean interoperables, quienes heredan de una clase o implementan una interfaz deben poder usarse de la misma forma que el original. Así se promueve la reutilización del código en múltiples contextos, sin cambios de última hora.

¿Qué significa respetar el contrato?

  • Mantener firma de métodos: mismos parámetros y orden.
  • Mantener el tipo de retorno acordado.
  • Conservar las reglas de uso: precondiciones y postcondiciones.
  • Evitar agregar requisitos nuevos para invocar un método.

¿Qué errores se evitan?

  • Cambios que exijan un parámetro extra o de otro tipo.
  • Retornos con tipos distintos a los esperados.
  • Excepciones inesperadas al usar una subclase en lugar de la clase base.

Estas prácticas fortalecen habilidades como el diseño de contratos claros, el control de precondiciones/postcondiciones y la gestión de tipos y excepciones en jerarquías de clases.

¿Cuándo detectarlo y qué beneficios ofrece?

Cuando hay violaciones del principio, aparecen señales claras: - Violación de precondiciones o postcondiciones: cambia cómo se invocan los métodos. - Parámetros adicionales o de otro tipo en subclases. - Tipo de retorno modificado respecto a la clase base. - Excepciones inesperadas en subclases al usarlas como la clase original.

Si notas estos síntomas, hay inconsistencia con el principio de sustitución de Liskov y la sustitución deja de ser fácil.

Beneficios de aplicarlo bien: - Reutilización del código en distintos contextos, sin tocar llamadas existentes. - Compatibilidad de interfaces y tipos a lo largo del sistema. - Menos errores en tiempo de ejecución por evitar situaciones inesperadas. - Coherencia entre componentes que comparten una misma interfaz o clase base.

¿Cómo lo aplicarías al proyecto del procesador de pagos? Comparte tu enfoque y ejemplos en los comentarios.