Aplicación del Principio de Sustitución de Liskov en Python
Clase 8 de 27 • Curso 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 elPaymentProcessor
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.