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
- 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.
- 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
- 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
yVideo
, cada una con su implementación del métodomostrarInfo
.
- Crea una clase base llamada
- Polimorfismo:
- Implementa una clase
Biblioteca
que tenga un métodoagregarRecurso
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étodomostrarInfo
de cada uno, demostrando polimorfismo.
- Implementa una clase
- Arrays de Objetos:
- En la clase
Biblioteca
, crea un array de objetosRecurso
que contenga una cantidad fija de recursos (por ejemplo, 3).
- En la clase
- ArrayList:
- Usa un
ArrayList
en la claseBiblioteca
para gestionar los recursos prestados.
- Usa un
- Pilas y Colas:
- Implementa una clase
Prestamo
con los atributosusuario
(String) yrecurso
(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.
- Implementa una clase
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
- La importancia de mantener un ritmo de estudio durante las navidades.
- Cómo Multiplicar Matrices en Java: Guía Completa con Ejemplo Práctico
- Triunfos y logros de nuestra Academia SanRoque
- Herramientas Imprescindibles para Realizar Ingeniería Inversa en Java
- ¿A qué nivel de conversación en inglés estás dispuesto a llegar con Academia SanRoque?
- Cómo Resolver una Ecuación de Segundo Grado con GNU Octave
- Cuando vienes a la Academia SaRoque justo antes del examen final.
- 25N Día Internacional para la Eliminación de la Violencia contra la Mujer
- Cuando el profesor nos da la última oportunidad.
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