Ejercicio de Nivel Asequible
Introducción
Este examen final está diseñado para evaluar tus conocimientos básicos sobre clases y subclases, polimorfismo, arrays de objetos, ArrayList, pilas, colas y el uso de estructuras de control como switch
. A continuación, se presentan las instrucciones y el ejercicio a realizar, con un enfoque particular en pilas, colas y el uso de switch
.
Instrucciones
- El examen consta de un solo ejercicio práctico.
- Deberás implementar varias clases siguiendo los principios de la programación orientada a objetos.
- Utiliza correctamente los conceptos de herencia y polimorfismo.
- Implementa y utiliza estructuras de datos como arrays de objetos, ArrayList, pilas y colas.
- Utiliza la estructura de control
switch
para gestionar las opciones de un menú. - El código debe ser claro, comentado y bien estructurado.
Ejercicio
Contexto
Vamos a simular una pequeña aplicación para la gestión de tareas en una oficina. La oficina tiene diferentes tipos de empleados y cada uno tiene tareas específicas. Además, se deben gestionar las tareas pendientes y completadas usando estructuras de datos como pilas y colas. Utiliza un menú interactivo con switch
para gestionar las opciones de la aplicación.
Requisitos
- Clases y Subclases:
- Crea una clase base llamada
Empleado
con los siguientes atributos:nombre
(String)id
(String)
- Incluye un método llamado
mostrarInfo
que devuelva un String con la información del empleado. - Crea al menos dos subclases de
Empleado
:Gerente
yDesarrollador
, cada una con su implementación del métodomostrarInfo
.
- Crea una clase base llamada
- Polimorfismo:
- Implementa una clase
Oficina
que tenga un métodoagregarEmpleado
para añadir diferentes tipos de empleados a una lista. - Crea un método
mostrarEmpleados
que recorra la lista de empleados y llame al métodomostrarInfo
de cada uno, demostrando polimorfismo.
- Implementa una clase
- Arrays de Objetos:
- En la clase
Oficina
, crea un array de objetosEmpleado
que contenga una cantidad fija de empleados (por ejemplo, 5).
- En la clase
- ArrayList:
- Usa un
ArrayList
en la claseOficina
para gestionar los empleados.
- Usa un
- Pilas y Colas:
- Implementa una clase
Tarea
con los atributosdescripcion
(String) yprioridad
(int). - Usa una pila (
Stack
) para almacenar las tareas completadas. - Usa una cola (
Queue
) para gestionar la lista de tareas pendientes.
- Implementa una clase
- Menú con
switch
:- Implementa un menú interactivo que permita al usuario:
- Agregar un empleado
- Mostrar empleados
- Agregar una tarea
- Completar una tarea
- Mostrar tareas pendientes
- Mostrar tareas completadas
- Implementa un menú interactivo que permita al usuario:
Ejemplo de Código
import java.util.*;
class Empleado {
protected String nombre;
protected String id;
public Empleado(String nombre, String id) {
this.nombre = nombre;
this.id = id;
}
public String mostrarInfo() {
return "Empleado: " + nombre + ", ID: " + id;
}
}
class Gerente extends Empleado {
public Gerente(String nombre, String id) {
super(nombre, id);
}
@Override
public String mostrarInfo() {
return "Gerente: " + nombre + ", ID: " + id;
}
}
class Desarrollador extends Empleado {
public Desarrollador(String nombre, String id) {
super(nombre, id);
}
@Override
public String mostrarInfo() {
return "Desarrollador: " + nombre + ", ID: " + id;
}
}
class Tarea {
private String descripcion;
private int prioridad;
public Tarea(String descripcion, int prioridad) {
this.descripcion = descripcion;
this.prioridad = prioridad;
}
public String mostrarTarea() {
return "Tarea: " + descripcion + ", Prioridad: " + prioridad;
}
}
class Oficina {
private Empleado[] empleados;
private ArrayList<Empleado> listaEmpleados;
private Stack<Tarea> tareasCompletadas;
private Queue<Tarea> tareasPendientes;
public Oficina() {
empleados = new Empleado[5];
listaEmpleados = new ArrayList<>();
tareasCompletadas = new Stack<>();
tareasPendientes = new LinkedList<>();
}
public void agregarEmpleado(Empleado empleado) {
for (int i = 0; i < empleados.length; i++) {
if (empleados[i] == null) {
empleados[i] = empleado;
listaEmpleados.add(empleado);
return;
}
}
System.out.println("No hay espacio para más empleados.");
}
public void mostrarEmpleados() {
for (Empleado empleado : listaEmpleados) {
System.out.println(empleado.mostrarInfo());
}
}
public void agregarTarea(Tarea tarea) {
tareasPendientes.add(tarea);
}
public void completarTarea() {
if (!tareasPendientes.isEmpty()) {
Tarea tarea = tareasPendientes.poll();
tareasCompletadas.push(tarea);
System.out.println("Tarea completada: " + tarea.mostrarTarea());
} else {
System.out.println("No hay tareas pendientes.");
}
}
public void mostrarTareasPendientes() {
for (Tarea tarea : tareasPendientes) {
System.out.println(tarea.mostrarTarea());
}
}
public void mostrarTareasCompletadas() {
for (Tarea tarea : tareasCompletadas) {
System.out.println(tarea.mostrarTarea());
}
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Oficina oficina = new Oficina();
boolean salir = false;
while (!salir) {
System.out.println("Menú de opciones:");
System.out.println("1. Agregar empleado");
System.out.println("2. Mostrar empleados");
System.out.println("3. Agregar tarea");
System.out.println("4. Completar tarea");
System.out.println("5. Mostrar tareas pendientes");
System.out.println("6. Mostrar tareas completadas");
System.out.println("7. Salir");
System.out.print("Elija una opción: ");
int opcion = scanner.nextInt();
scanner.nextLine(); // Consumir el salto de línea
switch (opcion) {
case 1:
System.out.println("Agregar empleado:");
System.out.print("Nombre: ");
String nombre = scanner.nextLine();
System.out.print("ID: ");
String id = scanner.nextLine();
System.out.println("Tipo de empleado (1: Gerente, 2: Desarrollador): ");
int tipo = scanner.nextInt();
scanner.nextLine(); // Consumir el salto de línea
Empleado empleado;
if (tipo == 1) {
empleado = new Gerente(nombre, id);
} else {
empleado = new Desarrollador(nombre, id);
}
oficina.agregarEmpleado(empleado);
break;
case 2:
System.out.println("Mostrar empleados:");
oficina.mostrarEmpleados();
break;
case 3:
System.out.println("Agregar tarea:");
System.out.print("Descripción: ");
String descripcion = scanner.nextLine();
System.out.print("Prioridad: ");
int prioridad = scanner.nextInt();
scanner.nextLine(); // Consumir el salto de línea
Tarea tarea = new Tarea(descripcion, prioridad);
oficina.agregarTarea(tarea);
break;
case 4:
System.out.println("Completar tarea:");
oficina.completarTarea();
break;
case 5:
System.out.println("Mostrar tareas pendientes:");
oficina.mostrarTareasPendientes();
break;
case 6:
System.out.println("Mostrar tareas completadas:");
oficina.mostrarTareasCompletadas();
break;
case 7:
salir = true;
break;
default:
System.out.println("Opción no válida.");
}
}
scanner.close();
}
}
Conclusión
Este ejercicio te permitirá poner en práctica tus conocimientos sobre programación orientada a objetos y estructuras de datos, con un enfoque particular en pilas, colas y el uso de switch
. Asegúrate de seguir las instrucciones y de utilizar correctamente las técnicas mencionadas. ¡Buena suerte en tu examen!
¿QUÉ TE HA PARECIDO EL ARTÍCULO? Danos tu opinión al final de la página.
Deja tu comentario y ayúdanos a crecer.
¡SÍGUENOS EN TUS REDES FAVORITAS!
AYUDANOS A CRECER Y QUE LLEGUEMOS A TODAS LAS PERSONAS QUE NOS NECESITANA. SÍGUENOS EN TUS REDES.
Entra AQUÍ y elíge donde seguirnos.
NUESTRAS ÚLTIMAS PUBLICACIONES
- La importancia de rodearte de personas virtuosas para alcanzar tus metas
- La Importancia del Humor para Alcanzar el Éxito Social y Académico
- Aprender de las Derrotas: Un Camino hacia el Éxito
- Renuncia lo negativo. Lucha por lo que quieres
- Empezamos el año con fuerzas renovadas. ¡A por el 2025!
- Estándares de Programación: Low Camel, High Camel y Buenas Prácticas en Nombres de Código
- Regex y su Uso en Java: Guía Completa
- Reflexiones y Deseos de Prosperidad Académica para 2025
- FELICES FIESTAS.
ELIGE TU RED FAVORITA Y SÍGUENOS.
AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.
Contenido restringido
Comments are closed