COMPARTE ESTE ARTÍCULO

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 y colas. A continuación, se presentan las instrucciones y el ejercicio a realizar.

Instrucciones

  1. El examen consta de un solo ejercicio práctico.
  2. Deberás implementar varias clases siguiendo los principios de la programación orientada a objetos.
  3. Utiliza correctamente los conceptos de herencia y polimorfismo.
  4. Implementa y utiliza estructuras de datos como arrays de objetos, ArrayList, pilas y colas.
  5. 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 una biblioteca digital. La biblioteca tiene diferentes tipos de recursos y cada recurso tiene características específicas. Además, se deben gestionar los préstamos de los recursos, usando estructuras de datos para almacenar las colas de espera y las listas de préstamos.

Requisitos

  1. Clases y Subclases:
    • Crea una clase base llamada Recurso con los siguientes atributos:
      • titulo (String)
      • identificador (String)
    • Incluye un método llamado mostrarInfo que devuelva un String con la información del recurso.
    • Crea al menos dos subclases de Recurso: Libro y Video, cada una con su implementación del método mostrarInfo.
  2. Polimorfismo:
    • Implementa una clase Biblioteca que tenga un método agregarRecurso para añadir diferentes tipos de recursos a una lista.
    • Crea un método mostrarRecursos que recorra la lista de recursos y llame al método mostrarInfo de cada uno, demostrando polimorfismo.
  3. Arrays de Objetos:
    • En la clase Biblioteca, crea un array de objetos Recurso que contenga una cantidad fija de recursos (por ejemplo, 3).
  4. ArrayList:
    • Usa un ArrayList en la clase Biblioteca para gestionar los recursos prestados.
  5. Pilas y Colas:
    • Implementa una clase Prestamo con los atributos usuario (String) y recurso (String).
    • Usa una pila (Stack) para almacenar el historial de préstamos.
    • Usa una cola (Queue) para gestionar la lista de espera de los usuarios para recursos específicos.

Ejemplo de Código

import java.util.*;

class Recurso {
    protected String titulo;
    protected String identificador;

    public Recurso(String titulo, String identificador) {
        this.titulo = titulo;
        this.identificador = identificador;
    }

    public String mostrarInfo() {
        return "Recurso: " + titulo + ", ID: " + identificador;
    }
}

class Libro extends Recurso {
    private String autor;

    public Libro(String titulo, String identificador, String autor) {
        super(titulo, identificador);
        this.autor = autor;
    }

    @Override
    public String mostrarInfo() {
        return "Libro: " + titulo + ", Autor: " + autor + ", ID: " + identificador;
    }
}

class Video extends Recurso {
    private int duracion; // duración en minutos

    public Video(String titulo, String identificador, int duracion) {
        super(titulo, identificador);
        this.duracion = duracion;
    }

    @Override
    public String mostrarInfo() {
        return "Video: " + titulo + ", Duración: " + duracion + " min, ID: " + identificador;
    }
}

class Biblioteca {
    private Recurso[] recursos;
    private ArrayList<Recurso> recursosPrestados;
    private Stack<Prestamo> historialPrestamos;
    private Queue<Prestamo> listaEspera;

    public Biblioteca() {
        recursos = new Recurso[3];
        recursosPrestados = new ArrayList<>();
        historialPrestamos = new Stack<>();
        listaEspera = new LinkedList<>();
    }

    public void agregarRecurso(Recurso recurso) {
        for (int i = 0; i < recursos.length; i++) {
            if (recursos[i] == null) {
                recursos[i] = recurso;
                return;
            }
        }
        System.out.println("No hay espacio en la biblioteca para más recursos.");
    }

    public void mostrarRecursos() {
        for (Recurso recurso : recursos) {
            if (recurso != null) {
                System.out.println(recurso.mostrarInfo());
            }
        }
    }

    public void prestarRecurso(String identificador, String usuario) {
        for (int i = 0; i < recursos.length; i++) {
            if (recursos[i] != null && recursos[i].identificador.equals(identificador)) {
                recursosPrestados.add(recursos[i]);
                Prestamo prestamo = new Prestamo(usuario, identificador);
                historialPrestamos.push(prestamo);
                recursos[i] = null;
                return;
            }
        }
        listaEspera.add(new Prestamo(usuario, identificador));
    }

    public void devolverRecurso(String identificador) {
        for (Recurso recurso : recursosPrestados) {
            if (recurso.identificador.equals(identificador)) {
                recursosPrestados.remove(recurso);
                for (int i = 0; i < recursos.length; i++) {
                    if (recursos[i] == null) {
                        recursos[i] = recurso;
                        if (!listaEspera.isEmpty() && listaEspera.peek().recurso.equals(identificador)) {
                            historialPrestamos.push(listaEspera.poll());
                        }
                        return;
                    }
                }
            }
        }
    }
}

class Prestamo {
    private String usuario;
    private String recurso;

    public Prestamo(String usuario, String recurso) {
        this.usuario = usuario;
        this.recurso = recurso;
    }

    @Override
    public String toString() {
        return "Usuario: " + usuario + ", Recurso: " + recurso;
    }
}

public class Main {
    public static void main(String[] args) {
        Biblioteca biblioteca = new Biblioteca();

        Recurso libro1 = new Libro("El Principito", "L001", "Antoine de Saint-Exupéry");
        Recurso video1 = new Video("Documental Planeta Tierra", "V001", 60);

        biblioteca.agregarRecurso(libro1);
        biblioteca.agregarRecurso(video1);

        biblioteca.mostrarRecursos();

        biblioteca.prestarRecurso("L001", "Juan Pérez");
        biblioteca.prestarRecurso("V001", "Ana García");

        biblioteca.devolverRecurso("L001");
        biblioteca.devolverRecurso("V001");
    }
}

Conclusión

Este ejercicio te permitirá poner en práctica tus conocimientos sobre programación orientada a objetos y estructuras de datos de una manera asequible. 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

AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.

Contenido restringido

Acceso de usuarios existentes
   
Registro de un nuevo usuario
*Campo necesario

Tags:

Comments are closed

Estado de acceso
ESTADO DE ACCESO
TRADUCTORES
COMPARTENOS
error: CONTENIDO PROTEGIDO