Skip to content

Instantly share code, notes, and snippets.

@LaChivaloca69
Created October 7, 2025 00:32
Show Gist options
  • Select an option

  • Save LaChivaloca69/9aedcc1b6e59892e1d72c21821db87ef to your computer and use it in GitHub Desktop.

Select an option

Save LaChivaloca69/9aedcc1b6e59892e1d72c21821db87ef to your computer and use it in GitHub Desktop.

📘 CASO DE USO: CU-05 – Optimización de Recursos en la Representación de Árboles (Patrón Flyweight)


🧩 Identificador

CU-05 – Aplicar patrón estructural Flyweight para reducir duplicación de datos compartidos en objetos Arbol.


🎯 Propósito

Optimizar el uso de memoria en la representación de múltiples objetos visuales (Arbol) dentro de un entorno (Bosque), compartiendo los datos comunes (textura, color, tipo) entre instancias similares.


👥 Actores Principales

  • Analista de Software: Identifica la duplicación de datos y propone la refactorización mediante el patrón Flyweight.
  • Desarrollador: Implementa la estructura propuesta (clases ArbolTipo, ArbolFactory y Arbol).
  • Sistema (Bosque): Administra los objetos y garantiza el uso eficiente de recursos.

🧠 Descripción General

En el sistema actual, cada árbol contiene atributos repetidos (Tipo, Textura, Color), lo cual genera una alta duplicación de memoria.
El analista determina que la mayoría de estos datos son intrínsecos y compartidos entre instancias.

La solución propuesta consiste en aplicar el patrón Flyweight, separando:

  • Datos intrínsecos (compartidos): Tipo, Textura, Color.
  • Datos extrínsecos (únicos): Coordenadas X, Y.

Una fábrica de flyweights (ArbolFactory) gestionará los objetos compartidos (ArbolTipo), reutilizándolos cuando sea posible.


⚙️ Flujo Normal del Caso de Uso

Paso Actor / Componente Descripción
1 Analista Detecta duplicación de datos en la clase Arbol.
2 Analista Propone aplicar el patrón Flyweight para separar datos intrínsecos y extrínsecos.
3 Desarrollador Implementa clase ArbolTipo (contiene datos intrínsecos).
4 Desarrollador Crea clase ArbolFactory para gestionar y reutilizar los objetos ArbolTipo.
5 Desarrollador Modifica clase Arbol para mantener solo coordenadas (X, Y) y una referencia a ArbolTipo.
6 Sistema Al plantar árboles en el Bosque, reutiliza los tipos ya creados si existen.
7 Sistema Al dibujar, utiliza los flyweights para representar visualmente cada árbol con su tipo compartido.
8 Analista Verifica la reducción de memoria y correcto funcionamiento de la refactorización.

🔁 Flujo Alternativo

Caso Descripción
A1 Si se intenta crear un nuevo tipo de árbol no existente, ArbolFactory lo instancia y lo agrega al diccionario de flyweights.
A2 Si ya existe un tipo igual (mismo tipo, textura y color), se reutiliza el existente sin crear un nuevo objeto.

🔒 Precondiciones

  • Existe una clase base Arbol con atributos redundantes.
  • El sistema maneja grandes volúmenes de árboles (más de 1,000 instancias).
  • Se dispone de la estructura Bosque para contener los árboles.

🎯 Postcondiciones

  • Los objetos Arbol comparten sus datos comunes mediante ArbolTipo.
  • El uso de memoria se reduce significativamente.
  • El sistema puede escalar a miles de árboles sin degradar el rendimiento.

Observaciones Técnicas

  • El patrón Flyweight reduce la memoria cuando hay muchas instancias con estados repetidos.
  • Ideal para sistemas gráficos, simulaciones o videojuegos con entidades visualmente repetitivas.
  • El rendimiento mejora sin comprometer la calidad visual.
  • Es fundamental gestionar correctamente la fábrica de objetos para evitar duplicados.

Conclusión del Analista

“Se ha identificado una duplicación del 90% en los datos de los objetos Arbol. La aplicación del patrón Flyweight permite reutilizar los datos intrínsecos mediante una fábrica centralizada, logrando una reducción significativa en el consumo de memoria y mejorando la escalabilidad del sistema.”

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment