Aplicación del Principio de Sustitución de Liskov en Python

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

Resumen

El principio de sustitución de Liskov nos permite escribir código flexible y reutilizable, pero también requiere que todas las clases o protocolos cumplan con una firma coherente. En esta clase, hemos aplicado este principio en Python reemplazando las clases abstractas con protocolos y detectando un bug deliberado que rompe este principio. Vamos a analizar cómo lo resolvimos y cómo aseguramos que las clases de notificación sean intercambiables sin modificar el código base.

¿Cómo reemplazamos las clases abstractas por protocolos?

  • Se sustituyeron las clases abstractas por protocolos en Python.
  • Los protocolos actúan de manera similar a las interfaces en otros lenguajes de programación.
  • En este caso, el Notifier y el PaymentProcessor fueron convertidos en protocolos.
  • Los métodos dentro de los protocolos fueron documentados usando docstrings en formato NumPy para mejorar la claridad.

¿Cómo se introdujo y detectó el bug?

  • Se introdujo un bug a propósito al cambiar la clase SMSNotifier.
  • El bug hizo que el método SendConfirmation no cumpliera con la firma requerida, ya que estaba aceptando un parámetro adicional: SMSGateway.
  • Esto provocaba que no fuera intercambiable con la clase EmailNotifier, lo que viola el principio de sustitución de Liskov.
  • Para detectarlo, se utilizó el debugger y un análisis de la firma del método.

¿Qué desafíos presenta el principio de sustitución de Liskov?

  • Mantener la consistencia en las firmas de los métodos entre clases hijas y protocolos es crucial.
  • Es fundamental evitar introducir parámetros adicionales o cambiar las firmas de los métodos, ya que esto rompe la intercambiabilidad de las clases.