Ejercicio de Nivel Medio
Introducción
Este examen final está diseñado para evaluar tus conocimientos sobre clases y subclases, polimorfismo, arrays de objetos, ArrayList, pilas y colas. Sigue las instrucciones y desarrolla el ejercicio práctico para demostrar tu comprensión de estos conceptos.
Instrucciones
- El ejercicio se basa en un sistema de gestión de bibliotecas.
- Deberás crear varias clases siguiendo los principios de la programación orientada a objetos.
- Utiliza correctamente los conceptos de herencia y polimorfismo.
- Implementa y usa 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 un sistema de gestión de una biblioteca. La biblioteca tiene diferentes tipos de materiales y cada material tiene características específicas. Además, se deben gestionar los préstamos y devoluciones de los materiales usando estructuras de datos adecuadas.
Requisitos
- Clases y Subclases:
- Crea una clase base llamada
Material
con los siguientes atributos:titulo
(String)codigo
(String)
- Incluye un método llamado
descripcion
que devuelva un String con una descripción del material. - Crea al menos dos subclases de
Material
:Libro
yRevista
, cada una con su implementación del métododescripcion
.
- Crea una clase base llamada
- Polimorfismo:
- Implementa una clase
Biblioteca
que tenga un métodoagregarMaterial
para añadir diferentes tipos de materiales a una lista. - Crea un método
mostrarDescripciones
que recorra la lista de materiales y llame al métododescripcion
de cada uno, demostrando polimorfismo.
- Implementa una clase
- Arrays de Objetos:
- En la clase
Biblioteca
, crea un array de objetosMaterial
que contenga una cantidad fija de materiales (por ejemplo, 5).
- En la clase
- ArrayList:
- Usa un
ArrayList
en la claseBiblioteca
para gestionar los materiales prestados.
- Usa un
- Pilas y Colas:
- Implementa una clase
Prestamo
con los atributosnombreUsuario
(String) ycodigoMaterial
(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 materiales específicos.
- Implementa una clase
Ejemplo de Código
import java.util.*;
class Material {
protected String titulo;
protected String codigo;
public Material(String titulo, String codigo) {
this.titulo = titulo;
this.codigo = codigo;
}
public String descripcion() {
return "Material: " + titulo + ", Código: " + codigo;
}
}
class Libro extends Material {
private String autor;
public Libro(String titulo, String codigo, String autor) {
super(titulo, codigo);
this.autor = autor;
}
@Override
public String descripcion() {
return "Libro: " + titulo + ", Autor: " + autor + ", Código: " + codigo;
}
}
class Revista extends Material {
private int numero;
public Revista(String titulo, String codigo, int numero) {
super(titulo, codigo);
this.numero = numero;
}
@Override
public String descripcion() {
return "Revista: " + titulo + ", Número: " + numero + ", Código: " + codigo;
}
}
class Biblioteca {
private Material[] materiales;
private ArrayList<Material> prestados;
private Stack<Prestamo> historialPrestamos;
private Queue<Prestamo> listaEspera;
public Biblioteca() {
materiales = new Material[5];
prestados = new ArrayList<>();
historialPrestamos = new Stack<>();
listaEspera = new LinkedList<>();
}
public void agregarMaterial(Material material) {
for (int i = 0; i < materiales.length; i++) {
if (materiales[i] == null) {
materiales[i] = material;
return;
}
}
System.out.println("No hay espacio en la biblioteca para más materiales.");
}
public void mostrarDescripciones() {
for (Material material : materiales) {
if (material != null) {
System.out.println(material.descripcion());
}
}
}
public void prestarMaterial(String codigo, String nombreUsuario) {
for (int i = 0; i < materiales.length; i++) {
if (materiales[i] != null && materiales[i].codigo.equals(codigo)) {
prestados.add(materiales[i]);
Prestamo prestamo = new Prestamo(nombreUsuario, codigo);
historialPrestamos.push(prestamo);
materiales[i] = null;
return;
}
}
listaEspera.add(new Prestamo(nombreUsuario, codigo));
}
public void devolverMaterial(String codigo) {
for (Material material : prestados) {
if (material.codigo.equals(codigo)) {
prestados.remove(material);
for (int i = 0; i < materiales.length; i++) {
if (materiales[i] == null) {
materiales[i] = material;
if (!listaEspera.isEmpty() && listaEspera.peek().codigoMaterial.equals(codigo)) {
historialPrestamos.push(listaEspera.poll());
}
return;
}
}
}
}
}
}
class Prestamo {
private String nombreUsuario;
private String codigoMaterial;
public Prestamo(String nombreUsuario, String codigoMaterial) {
this.nombreUsuario = nombreUsuario;
this.codigoMaterial = codigoMaterial;
}
@Override
public String toString() {
return "Usuario: " + nombreUsuario + ", Código del material: " + codigoMaterial;
}
}
public class Main {
public static void main(String[] args) {
Biblioteca biblioteca = new Biblioteca();
Material libro1 = new Libro("Cien Años de Soledad", "L001", "Gabriel García Márquez");
Material revista1 = new Revista("National Geographic", "R001", 202);
biblioteca.agregarMaterial(libro1);
biblioteca.agregarMaterial(revista1);
biblioteca.mostrarDescripciones();
biblioteca.prestarMaterial("L001", "Ana García");
biblioteca.prestarMaterial("R001", "Juan Pérez");
biblioteca.devolverMaterial("L001");
biblioteca.devolverMaterial("R001");
}
}
Conclusión
Este ejercicio te permitirá poner en práctica tus conocimientos sobre programación orientada a objetos y estructuras de datos. 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
- Las maravillas de las ciencias biológicas según la Academia SanRoque
- La motivación en Academia SanRoque
- Los docentes también se divierten.
- Comandos Principales en MongoDB y sus Equivalentes en Java
- Las bondades de escribir y leer cada día: herramientas esenciales para la vida académica, empresarial y social
- Immanuel Kant: Disertación contra las IA
- Forma Normal de Boyce-Codd (FNBC) en Bases de Datos
- Las Formas Normales en Bases de Datos
- La importancia de rodearte de personas virtuosas para alcanzar tus metas
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