COMPARTE ESTE ARTÍCULO

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

  1. El ejercicio se basa en un sistema de gestión de bibliotecas.
  2. Deberás crear varias clases siguiendo los principios de la programación orientada a objetos.
  3. Utiliza correctamente los conceptos de herencia y polimorfismo.
  4. Implementa y usa 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 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

  1. 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 y Revista, cada una con su implementación del método descripcion.
  2. Polimorfismo:
    • Implementa una clase Biblioteca que tenga un método agregarMaterial 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étodo descripcion de cada uno, demostrando polimorfismo.
  3. Arrays de Objetos:
    • En la clase Biblioteca, crea un array de objetos Material que contenga una cantidad fija de materiales (por ejemplo, 5).
  4. ArrayList:
    • Usa un ArrayList en la clase Biblioteca para gestionar los materiales prestados.
  5. Pilas y Colas:
    • Implementa una clase Prestamo con los atributos nombreUsuario (String) y codigoMaterial (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.

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

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