Publicado en Tema 4 • Clases y Objetos

Proyecto Tema 4 – Sistema de gestión de Reservas

📌 Contexto

Una biblioteca municipal qué digitalizar la gestión de sus libros y préstamos. Para ello se desarrolla una aplicación sencilla en Java basada en programación orientada a objetos, utilizando clases, objetos y enumerados.

🎯 Objetivos del proyecto

  • Aplicar los conceptos de programación orientada a objetos.
  • Utilizar enumerados para representar estados.
  • Trabajar con referencias entre objetos.
  • Comprobar cómo los cambios en un objeto afectan a otros.

📦 Enumerado EstadoPrestamo

El enumerado EstadoPrestamo representa el estado en el qué puede encontrarse un libro dentro del sistema.

package Proyecto;

public enum EstadoPrestamo {
    DISPONIBLE,
    PRESTADO,
    RETRASADO
}

📘 Clase Libro

La clase Libro representa un libro de la biblioteca. Sus atributos son privados y solo se accede a ellos mediante métodos.

package Proyecto;

public class Libro {

    private String isbn;
    private String titulo;
    private String autor;
    private int annoPublicacion;
    private EstadoPrestamo estado;

    // Constructor
    public Libro(String isbn, String titulo, String autor, int annoPublicacion, EstadoPrestamo estado) {
        this.isbn = isbn;
        this.titulo = titulo;
        this.autor = autor;
        this.annoPublicacion = annoPublicacion;
        this.estado = estado;
    }

    public void mostrarInformacion() {
        System.out.println("ISBN: " + isbn);
        System.out.println("Título: " + titulo);
        System.out.println("Autor: " + autor);
        System.out.println("Año de publicación: " + annoPublicacion);
        System.out.println("Estado: " + estado);
    }

    public boolean esAntiguo() {
        return (2024 - annoPublicacion) > 20;
    }

    public void cambiarEstado(EstadoPrestamo nuevoEstado) {
        this.estado = nuevoEstado;
    }

    public EstadoPrestamo getEstado() {
        return estado;
    }
}

🔍 Aspectos destacados

  • Uso de atributos privados (Encapsulación).
  • Método para cambiar el estado del libro.
  • Método para comprobar si el libro es antiguo.

👤 Clase Usuario

Representa a un usuario de la biblioteca qué puede realizar préstamos.

package Proyecto;

public class Usuario {

    private String dni;
    private String nombre;
    private int edad;

    public Usuario(String dni, String nombre, int edad) {
        this.dni = dni;
        this.nombre = nombre;
        this.edad = edad;
    }

    public void mostrarDatos() {
        System.out.println("DNI: " + dni);
        System.out.println("Nombre: " + nombre);
        System.out.println("Edad: " + edad);
    }
}

📄 Clase Prestamo

La clase Prestamo relaciona un libro con un usuario. Al crear un préstamo, el estado del libro cambia automáticamente a PRESTADO.

package Proyecto;

public class Prestamo {

    private Libro libro;
    private Usuario usuario;
    private int diasPrestamo;

    public Prestamo(Libro libro, Usuario usuario, int diasPrestamo) {
        this.libro = libro;
        this.usuario = usuario;
        this.diasPrestamo = diasPrestamo;
        libro.cambiarEstado(EstadoPrestamo.PRESTADO);
    }

    public void mostrarDetalle() {
        System.out.println("DETALLE DEL PRÉSTAMO");
        libro.mostrarInformacion();
        System.out.println("Usuario:");
        usuario.mostrarDatos();
        System.out.println("Días de préstamo: " + diasPrestamo);
    }

    public void marcarRetraso() {
        libro.cambiarEstado(EstadoPrestamo.RETRASADO);
    }
}

▶️ Clase Main

En la clase principal se crean los libros, los usuarios y los préstamos, comprobando cómo el cambio de estado del libro se refleja en todas sus referencias.

package Proyecto;

public class Main {

    public static void main(String[] args) {

        Libro libro1 = new Libro("111", "El qué "Cervantes", 1605, EstadoPrestamo.DISPONIBLE);
        Usuario usuario1 = new Usuario("12345678A", "Angustias", 58);

        System.out.println("ESTADO INICIAL");
        libro1.mostrarInformacion();

        Prestamo prestamo1 = new Prestamo(libro1, usuario1, 15);

        System.out.println("\nDESPUÉS DEL PRÉSTAMO");
        libro1.mostrarInformacion();

        System.out.println();
        prestamo1.mostrarDetalle();

        prestamo1.marcarRetraso();

        System.out.println("\nDESPUÉS DE MARCAR RETRASO");
        libro1.mostrarInformacion();
    }
}

✅ Conclusiones

  • Se ha trabajado correctamente con clases, objetos y enumerados.
  • Se comprueba el uso de referencias entre objetos.
  • El estado del libro cambia automáticamente según el préstamo.
  • El proyecto simula un sistema real de gestión bibliotecaria.