Programación Orientada a Objetos · Programación

Clases abstractas e interfaces

Definir contratos con clases abstractas e interfaces para forzar a las subclases a implementar ciertos comportamientos.

Clases abstractas e interfaces

Ilustracion de programacion orientada a objetos: jerarquia de clases con herencia y encapsulamiento.
Principios de la programacion orientada a objetos: clases, herencia y polimorfismo.

Mapa conceptual

Plantillas que no se usan solas Hay conceptos que no tienen instancia lógica: no existe «un Animal» genérico suelto, siempre es un perro o un gato. Una clase abstracta formaliza esa idea: se hereda, pero no se instancia.

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

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.

La base abstracta mezcla contrato y reutilización; la interfaz solo contrato.
ConceptoSe instanciaContieneUso
Clase concretaSitodo implementadoobjetos reales
Clase abstractaNométodos abstractos y tal vez códigobase para heredar
InterfazNosolo firmas de métodoscontrato 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

Errores frecuentes

Clasifica cada elemento:

Abstracta
Concreta
Interfaz

Python Docs
Mó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.

Python: Classes
Tutorial oficial de clases en Python 3.