Práctica

Aplicando Patrones de Diseño

Construcción del Motor de Publicaciones

Aplicando patrones de Diseño

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:

  1. Configuración del entorno: El estudiante debe crear un archivo llamado motor_publicaciones.py en su IDE y pegar el código base proporcionado. Este paso asegura que todos partan de la misma estructura arquitectónica.
  2. 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.
  3. Implementación de Clases Concretas (Tarea 1): El estudiante completará la lógica dentro de los métodos mostrar() de las clases Articulo y PostCorto. Esto demuestra el polimorfismo inherente al patrón Factory.
  4. 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 clase Autor) no dependa de las clases concretas de publicación.
  5. 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.
  6. 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 print confirmará 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 error TypeError: 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 clase Articulo (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 abstracta Publicacion y contenga una implementación válida.

Leave a Reply

Your email address will not be published. Required fields are marked *