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
Materialcon los siguientes atributos:titulo(String)codigo(String)
- Incluye un método llamado
descripcionque devuelva un String con una descripción del material. - Crea al menos dos subclases de
Material:LibroyRevista, cada una con su implementación del métododescripcion.
- Crea una clase base llamada
- Polimorfismo:
- Implementa una clase
Bibliotecaque tenga un métodoagregarMaterialpara añadir diferentes tipos de materiales a una lista. - Crea un método
mostrarDescripcionesque recorra la lista de materiales y llame al métododescripcionde cada uno, demostrando polimorfismo.
- Implementa una clase
- Arrays de Objetos:
- En la clase
Biblioteca, crea un array de objetosMaterialque contenga una cantidad fija de materiales (por ejemplo, 5).
- En la clase
- ArrayList:
- Usa un
ArrayListen la claseBibliotecapara gestionar los materiales prestados.
- Usa un
- Pilas y Colas:
- Implementa una clase
Prestamocon 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
- Propuestas de actividades avanzadas con XML, DTD, XPath y XSLT
- Apuntes extensos de XML y XSLT
- El momento IDEAL para impulsar tu FORMACIÓN y alcanzar tus Metas Académicas: LAS NAVIDADES.

- 20 ejercicios de funciones avanzadas en Python (al estilo de Ackermann)
- Cómo guardar una página web completa en MySQL con PHP (urlencode, BLOB y otras técnicas)
- 60 ejercicios de funciones recursivas en Python para la carrera de Informática
- SIMULACRO 2 – FP Programación de Videojuegos
- Simulacro de examen – FP Programación de Videojuegos
- ALERTA METEOROLÓGICA

ELIGE TU RED FAVORITA Y SÍGUENOS.
AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.
Contenido restringido





































































































































































































































































INFORMACIÓN SOBRE 







Comments are closed