Clases abstractas e interfaces

Mapa conceptual
- Programacion OO
- Clases
- Objetos
- Atributos
- Metodos self
- Encapsulamiento
- Public
- Private
- Properties
- Herencia
- Polimorfismo
- Abstractas
- Interfaces
- Composicion
- Sobre herencia
- Delegacion
- Acoplamiento
- Proyecto
- Paquetes
- Modulos
- Convenciones
- Clases
Clase abstracta
Una clase abstracta define métodos que la subclase está obligada a implementar. No se puede crear un objeto de ella directamente: funciona como base incompleta que fija una estructura común. En Python se construye con el módulo abc y el decorador abstractmethod.
El método abstracto
Un método abstracto se declara sin cuerpo (o con pass): es una promesa. Cualquier subclase concreta que no lo reemplace quedará ella misma como abstracta y tampoco podrá instanciarse. Así el compilador (en otros lenguajes) o la creación de objeto (en Python) avisa del incumplimiento.
Interfaz vs clase abstracta
- Interfaz: solo contratos, ningún estado ni implementación. «Qué sabes hacer».
- Clase abstracta: contratos además de algo de código e estado compartido. «Qué eres y qué haces».
Para qué sirven
Documentan el diseño: quien lee la base sabe qué debe ofrecer toda implementación. Y obligan: si añades un método abstracto, toda subclase que lo omita fallará al instanciarse, no cuando ya esté en producción.
| Concepto | Se instancia | Contiene | Uso |
|---|---|---|---|
| Clase concreta | Si | todo implementado | objetos reales |
| Clase abstracta | No | métodos abstractos y tal vez código | base para heredar |
| Interfaz | No | solo firmas de métodos | contrato de comportamiento |
¿Qué ocurre al intentar crear un objeto de una clase abstracta en Python?
El patrón de la estrategia
Una base abstracta permite escribir código que dependa del contrato («algo que puede procesar()») y no de implementaciones concretas. Puedes intercambiar estrategias (un normalizador, un validador) siempre que cumplan el contrato: bajo acoplamiento con un esqueleto común.
ABC y mixin
En Python, heredar de ABC marca la clase como abstracta. Un mixin, en cambio, es una clase pequeña que aporta comportamiento para componerse, no para ser una jerarquía. Ambos ayudan a organizar sin sobrecargar la herencia.
Una clase con un método abstracto puede instanciarse si el resto de métodos están implementados.
Interfaces implícitas: protocolo
Python no fuerza tipos, así que a menudo una interfaz es informal: se espera que el objeto tenga ciertos métodos (duck typing). Los Protocol de tipado estructurado permiten declarar esas interfaces de forma explícita para el chequeo estático, sin forzar la herencia.
Cuándo usarlas
- Hay un concepto general que nunca se instancia solo: usa una base abstracta.
- Solo quieres un contrato, sin compartir código: usa una interfaz (o Protocol).
- Necesitas que el error aparezca al instanciar, no al ejecutar: abstracta.
Errores frecuentes
- Hacer abstracta una clase que sí tendría instancias lógicas.
- Dejar métodos concretos que en realidad todo hijo debería redefinir.
- Confundir interfaz con jerarquía profunda: a veces basta un Protocol y nada de herencia.
Clasifica cada elemento:
Arrastra cada ficha a su categoría (o tócala y luego toca la categoría). También puedes usar el teclado.
Python DocsMódulo abc: clases y métodos abstractos.
Diseña una base abstracta Exportador con métodos abstractos escribir() y soporta_formato(). Describe dos subclases concretas (CSV, JSON) y explica qué ganarías al dejar la base abstracta.
Tu texto se guarda sólo en este dispositivo.
Python: ClassesTutorial oficial de clases en Python 3.
Comentarios
Inicia sesión para comentar.
Todavía no hay comentarios. Sé la primera persona en opinar.