CU-05 – Aplicar patrón estructural Flyweight para reducir duplicación de datos compartidos en objetos Arbol.
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.
- 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,ArbolFactoryyArbol). - Sistema (Bosque): Administra los objetos y garantiza el uso eficiente de recursos.
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.
| 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. |
| 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. |
- Existe una clase base
Arbolcon atributos redundantes. - El sistema maneja grandes volúmenes de árboles (más de 1,000 instancias).
- Se dispone de la estructura
Bosquepara contener los árboles.
- Los objetos
Arbolcomparten sus datos comunes medianteArbolTipo. - El uso de memoria se reduce significativamente.
- El sistema puede escalar a miles de árboles sin degradar el rendimiento.
- 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.
“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.”