Principio de Liskov en S.O.L.I.D.
Clase 7 de 27 • Curso de Patrones de Diseño y SOLID en Python
Contenido del curso
Principios SOLID
- 2

Principio de responsabilidad única en SOLID
05:59 min - 3

Refactorizando código Python con principios SOLID
11:14 min - 4

Cómo aplicar SRP en un procesador de pagos con Stripe
25:19 min - 5

Open Closed Principle: extensión sin modificación
02:39 min - 6

Cómo usar clases abstractas en Python
14:46 min - 7

Principio de Liskov en S.O.L.I.D.
Viendo ahora - 8

Principio de sustitución de Liskov en Python
06:38 min - 9

Interface Segregation: cuándo separar contratos
02:33 min - 10

Segregación de interfaces en procesadores de pagos
09:05 min - 11

Principio de inversión de dependencias explicado
04:13 min - 12

Principio de inversión de dependencias: servicio de pagos flexible
05:56 min
Reestructuración del proyecto
Patrones de Diseño
- 14

Qué son los patrones de diseño: definición y categorías
03:54 min - 15

Strategy Pattern con Python y setprocessor
01:55 min - 16

Strategy Pattern para pagos en Python
10:58 min - 17

Factory Pattern: centralizar creación de objetos
03:05 min - 18

Patrón Factory para procesar pagos con match
11:06 min - 19

Patrón Decorator en 5 pasos para funcionalidad dinámica
03:06 min - 20

Patrón decorador en servicios de pagos
12:57 min - 21

Builder Pattern: construcción paso a paso
01:28 min - 22

Builder pattern para servicios de pagos
18:55 min - 23

Observer Pattern en sistemas de eventos
01:48 min - 24

Observer en sistemas de pagos con Python
11:11 min - 25

Chain of Responsibility para validar pagos
02:04 min - 26

Chain of Responsibility en servicios de pagos
16:27 min - 27

Arquitectura robusta para procesadores de pago
03:19 min
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.