Interface Segregation: cuándo separar contratos
Clase 9 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.
03:18 min - 8

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

Interface Segregation: cuándo separar contratos
Viendo ahora - 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
Domina la letra I de los principios S.O.L.I.: el principio de segregación de interfaces. Su enfoque es directo: los clientes no deberían depender de interfaces que no utilizan. Al separar comportamientos, se mejora la cohesión, se reduce el acoplamiento y se facilita la reutilización y las pruebas unitarias.
¿Qué es el principio de segregación de interfaces y por qué importa?
El Interface Segregation Principle (ISP) establece que una clase no debe verse obligada a implementar métodos que no necesita. En otras palabras, se deben segmentar los procedimientos en interfaces más pequeñas y específicas, evitando interfaces “infladas”. Así, cada entidad implementa solo lo que realmente usa.
- Cohesión alta: cada interfaz agrupa comportamientos relacionados y nada más.
- Acoplamiento bajo: los cambios en una interfaz no arrastran a otras clases.
- Reutilización de componentes: comportamientos separados se emplean en distintos contextos sin dependencias innecesarias.
- Pruebas unitarias más simples: al tener interfaces acotadas, el contexto de prueba es más concreto y manejable.
- Máxima clave: mejorar la cohesión y disminuir el acoplamiento.
¿Cómo se aplica con ejemplos prácticos de impresión y escaneo?
El contenido diferencia claramente operaciones de impresión y escaneo. Si una impresora multifuncional necesita ambos comportamientos, implementa dos interfaces segregadas; si no, cada dispositivo se mantiene enfocado.
- Impresora que solo imprime: implementa únicamente la interfaz de impresión.
- Escáner que solo escanea: implementa únicamente la interfaz de escaneo.
- Impresora multifuncional: implementa ambas interfaces, sin obligar a otras clases a heredar comportamientos que no usan.
Esta separación evita que una clase adopte métodos irrelevantes, promueve cohesión en cada interfaz y reduce acoplamiento entre componentes.
¿Cuándo conviene aplicarlo y qué beneficios aporta?
Hay señales claras para aplicar el ISP. Si una interfaz crece demasiado o muchas clases ignoran parte de sus métodos, es momento de segregar. Además, cuando un cambio en la interfaz afecta a múltiples clases, la separación se vuelve prioritaria.
- Interfaces con demasiados métodos irrelevantes.
- Clases que no usan todos los métodos definidos.
- Cambios en una interfaz que impactan a muchas clases.
Beneficios directos al aplicar el principio:
- Mejora la cohesión al mantener comportamientos relacionados juntos.
- Reduce el acoplamiento al aislar contratos y minimizar dependencias cruzadas.
- Permite reutilización de las interfaces específicas en distintas partes del código.
- Aísla cambios: modificar una interfaz no obliga a cambiar otras.
- Facilita pruebas unitarias gracias a contextos más pequeños y claros.
¿Tienes ideas para aplicarlo al código del procesador de pagos? Comparte en comentarios cómo segregarías interfaces y qué clases deberían implementar cada comportamiento.