Aplicando Patrones de Diseño
Construcción del Motor de Publicaciones

Objetivo General: El estudiante implementará los patrones Factory Method y Observer en Python para estructurar la creación de distintos tipos de contenido y automatizar el sistema de notificaciones a los seguidores en una plataforma de lectura digital.
Introducción Contextual: En el desarrollo de software a gran escala, reinventar la rueda suele conducir a un código frágil, altamente acoplado y difícil de mantener. Los patrones de diseño ofrecen soluciones probadas a problemas arquitectónicos recurrentes. Esta práctica sitúa al estudiante en el rol de ingeniero de backend de una plataforma de publicaciones emergente. El reto consiste en refactorizar el sistema para permitir la creación dinámica de múltiples formatos de contenido y asegurar que la base de usuarios reciba alertas en tiempo real mediante un diseño escalable.
Materiales o Recursos Necesarios:
- Entorno de desarrollo integrado (IDE recomendado: Visual Studio Code, PyCharm o Code lab).
- Intérprete de Python 3.8 o superior instalado.
- Código base proporcionado en esta guía.
Generación de Insumos Prácticos: El estudiante deberá utilizar el siguiente código base, contiene las interfaces y la estructura inicial. Las secciones marcadas con comentarios requieren la implementación de la lógica correspondiente a los patrones de diseño.
Instrucciones Paso a Paso:
- Configuración del entorno: El estudiante debe crear un archivo llamado
motor_publicaciones.pyen su IDE y pegar el código base proporcionado. Este paso asegura que todos partan de la misma estructura arquitectónica. - Análisis de la Estructura Base: Se debe leer el código detenidamente, identificando los bloques abstractos (
ABC) y las áreas marcadas con[TAREA]. Esto ayuda a comprender la separación de responsabilidades antes de codificar. - Implementación de Clases Concretas (Tarea 1): El estudiante completará la lógica dentro de los métodos
mostrar()de las clasesArticuloyPostCorto. Esto demuestra el polimorfismo inherente al patrón Factory. - Desarrollo del Factory Method (Tarea 2): Se construirá la lógica condicional dentro de
FabricaPublicaciones.crear_publicacion(). Esto garantiza que la instanciación de objetos se centralice y el cliente (en este caso, la claseAutor) no dependa de las clases concretas de publicación. - Implementación del Observador y el Sujeto (Tareas 3 y 4): El estudiante completará el método
notificar_seguidores()iterando sobre la lista de dependientes y enviándoles el mensaje. Esto establece la comunicación de uno a muchos característica del patrón Observer. - Ejecución y Verificación: Se debe ejecutar el script en la terminal usando
python motor_publicaciones.py. El estudiante verificará que se impriman correctamente las publicaciones y que los lectores reciban las notificaciones simuladas en consola.
Recomendaciones para el Estudiante:
- Prestar especial atención a las importaciones abstractas (
from abc import ABC, abstractmethod), son fundamentales para forzar la implementación de métodos en las clases hijas. - Recordar que un patrón de diseño no es una librería que se importa, sino una forma de estructurar las clases y sus relaciones.
- Probar ingresar un tipo de publicación no válido en el bloque de prueba para validar que la excepción se active adecuadamente.
- Leer la traza de ejecución en consola cuidadosamente; el orden de los
printconfirmará si la notificación ocurre después de que se crea el contenido. - Reflexionar sobre cómo este mismo sistema podría usarse para enviar correos electrónicos reales en una aplicación de producción.
Posible Problema y Solución Rápida:
- Problema: Al intentar instanciar un
Articulo, Python arroja el errorTypeError: Can't instantiate abstract class Articulo with abstract methods mostrar. - Solución: Este error ocurre porque el estudiante olvidó definir el método
mostrar(self):dentro de la claseArticulo(o tiene un error tipográfico en el nombre del método). Para corregirlo, el estudiante debe asegurar que el método se llame exactamente igual al definido en la interfaz abstractaPublicaciony contenga una implementación válida.