You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Problema identificado: El método main utiliza un gran switch para manejar diferentes opciones de menú, donde cada caso llama a un método específico de la clase Urbanizacion. Este enfoque no es muy flexible; si se agregan nuevas opciones de menú, se requiere modificar el switch en varios lugares. Además, el switch hace que el código sea menos orientado a objetos y más propenso a errores si no se actualiza correctamente.
Técnica de refactorización aplicada: Reemplazar Condicional con polimorfismo.
Beneficios de la refactorización:
• Flexibilidad y Extensibilidad: Puedes agregar nuevas opciones de menú simplemente creando nuevas clases que extienden de una clase base o implementan una interfaz, sin necesidad de modificar un switch.
• Eliminación de Código Repetido: Elimina la necesidad de mantener un switch o múltiples condicionales, haciendo que el código sea más limpio y fácil de entender.
• Mayor Cohesión: Cada opción del menú se maneja por separado en su propia clase, lo que facilita el mantenimiento y la prueba de cada opción de manera independiente.
Solución aplicada:
• Antes:
• Después:
Se crea una clase por cada opción del switch y al final se lo implementa correctamente en el main de Sistema.
public abstract class MenuOpcion {
protected Urbanizacion urbanizacion;
public MenuOpcion(Urbanizacion urbanizacion) {
this.urbanizacion = urbanizacion;
}
public abstract void ejecutar();
}
public class MenuUrbanizacion extends MenuOpcion {
public MenuUrbanizacion(Urbanizacion urbanizacion) {
super(urbanizacion);
} @OverRide
public void ejecutar() {
System.out.println("\tUrbanizacion\n");
urbanizacion.menuUrbanizacion();
}
}
public class MenuResidentes extends MenuOpcion {
public MenuResidentes(Urbanizacion urbanizacion) {
super(urbanizacion);
} @OverRide
public void ejecutar() {
System.out.println("\tResidentes\n");
urbanizacion.menuResidentes();
}
}
Otras clases para cada opción.
public class Sistema {
public static void main(String[] args) {
Urbanizacion u1 = inicializarSistema();
Map<Integer, MenuOpcion> opcionesMenu = new HashMap<>();
opcionesMenu.put(1, new MenuUrbanizacion(u1));
opcionesMenu.put(2, new MenuResidentes(u1));
...
int valorMenu;
do {
System.out.println("-----Menú del Sistema-------");
// Mostrar el menú...
System.out.print("Elija una opción: ");
valorMenu = entra.nextInt();
entra.skip("\n");
MenuOpcion opcion = opcionesMenu.get(valorMenu);
if (opcion != null) {
opcion.ejecutar();
} else {
System.out.println("Ese numero no se encuentra entre las opciones del menú");
}
} while (valorMenu != 8);
}
}
The text was updated successfully, but these errors were encountered:
Problema identificado: El método main utiliza un gran switch para manejar diferentes opciones de menú, donde cada caso llama a un método específico de la clase Urbanizacion. Este enfoque no es muy flexible; si se agregan nuevas opciones de menú, se requiere modificar el switch en varios lugares. Además, el switch hace que el código sea menos orientado a objetos y más propenso a errores si no se actualiza correctamente.
Técnica de refactorización aplicada: Reemplazar Condicional con polimorfismo.
Beneficios de la refactorización:
• Flexibilidad y Extensibilidad: Puedes agregar nuevas opciones de menú simplemente creando nuevas clases que extienden de una clase base o implementan una interfaz, sin necesidad de modificar un switch.
• Eliminación de Código Repetido: Elimina la necesidad de mantener un switch o múltiples condicionales, haciendo que el código sea más limpio y fácil de entender.
• Mayor Cohesión: Cada opción del menú se maneja por separado en su propia clase, lo que facilita el mantenimiento y la prueba de cada opción de manera independiente.
Solución aplicada:
• Antes:
• Después:
Se crea una clase por cada opción del switch y al final se lo implementa correctamente en el main de Sistema.
public abstract class MenuOpcion {
protected Urbanizacion urbanizacion;
public MenuOpcion(Urbanizacion urbanizacion) {
this.urbanizacion = urbanizacion;
}
public abstract void ejecutar();
}
public class MenuUrbanizacion extends MenuOpcion {
public MenuUrbanizacion(Urbanizacion urbanizacion) {
super(urbanizacion);
}
@OverRide
public void ejecutar() {
System.out.println("\tUrbanizacion\n");
urbanizacion.menuUrbanizacion();
}
}
public class MenuResidentes extends MenuOpcion {
public MenuResidentes(Urbanizacion urbanizacion) {
super(urbanizacion);
}
@OverRide
public void ejecutar() {
System.out.println("\tResidentes\n");
urbanizacion.menuResidentes();
}
}
Otras clases para cada opción.
public class Sistema {
public static void main(String[] args) {
Urbanizacion u1 = inicializarSistema();
Map<Integer, MenuOpcion> opcionesMenu = new HashMap<>();
opcionesMenu.put(1, new MenuUrbanizacion(u1));
opcionesMenu.put(2, new MenuResidentes(u1));
...
int valorMenu;
do {
System.out.println("-----Menú del Sistema-------");
// Mostrar el menú...
System.out.print("Elija una opción: ");
valorMenu = entra.nextInt();
entra.skip("\n");
MenuOpcion opcion = opcionesMenu.get(valorMenu);
if (opcion != null) {
opcion.ejecutar();
} else {
System.out.println("Ese numero no se encuentra entre las opciones del menú");
}
} while (valorMenu != 8);
}
}
The text was updated successfully, but these errors were encountered: