Boletín de Ejercicios Adicional: Diseño de Clases en Java
Aquí tienes una serie de ejercicios para seguir practicando el diseño de clases en Java.
Ejercicio A1: Gestión de Libros en una Biblioteca
Crea una aplicación para gestionar libros en una biblioteca con 2 clases:
-
Libro: Representará un libro con la siguiente información:- Atributos:
titulo(String),autor(String),isbn(String),numeroDeCopiasDisponibles(int). - Constructores:
- Uno que reciba todos los atributos.
- Otro que reciba
titulo,autor,isbny establezcanumeroDeCopiasDisponiblesa 1 por defecto.
- Métodos:
getterspara todos los atributos.setNumeroDeCopiasDisponibles(int numero)prestarLibro(): Decrementa el número de copias disponibles en 1 si hay copias. Devuelvetruesi se pudo prestar,falseen caso contrario.devolverLibro(): Incrementa el número de copias disponibles en 1.toString(): Devuelve una representación en cadena del libro (ej: “El Quijote por Miguel de Cervantes (ISBN: XXX) - Copias: Y”).
- Atributos:
-
Biblioteca: Gestionará una colección de objetosLibro.- Atributos: Un array de
Libroy una variable que indica cuántos libros distintos hay (no el total de copias). La capacidad inicial del array debe ser de 20 (CAPACIDAD_INICIAL). - Constructores:
- Uno sin argumentos que inicialice el array con
CAPACIDAD_INICIAL.
- Uno sin argumentos que inicialice el array con
- Métodos:
agregarLibro(Libro nuevoLibro): Añade un libro a la biblioteca. Si el libro (mismo ISBN) ya existe, simplemente incrementa sunumeroDeCopiasDisponiblescon las delnuevoLibro. Si es un libro nuevo y no hay espacio, el array debe redimensionarse (aumentar su capacidad en 10).buscarLibroPorIsbn(String isbn): Devuelve elLibrocon ese ISBN, onullsi no se encuentra.listarLibrosDisponibles(): Imprime por consola los detalles de todos los libros que tengan al menos una copia disponible.totalLibrosDistintos(): Devuelve la cantidad de títulos diferentes en la biblioteca.
- Atributos: Un array de
Ejercicio A2: Mejoras en la Gestión de Biblioteca
Realizar algunas mejoras sobre el ejercicio A1:
- Mejorar el método
Biblioteca.agregarLibro(...):- Si se añade un libro con un ISBN que ya existe, en lugar de solo incrementar las copias, se debe actualizar el objeto
Libroexistente con la información delnuevoLibro(título, autor) y sumar lasnumeroDeCopiasDisponibles. - La operación de redimensionar el array si está lleno debe extraerse a un método privado
redimensionarCatalogo().
- Si se añade un libro con un ISBN que ya existe, en lugar de solo incrementar las copias, se debe actualizar el objeto
- Añadir a la clase
Bibliotecaun métodolibrosPorAutor(String autor)que devuelva unLibro[](oArrayList<Libro>) con todos los libros de un autor específico.
Ejercicio A3: Simulación de Cuenta Bancaria
Crea una clase CuentaBancaria para simular las operaciones básicas de una cuenta.
- Atributos:
numeroCuenta(String, único),nombreTitular(String),saldo(double),tipoCuenta(String, ej: “Ahorro”, “Corriente”). - Constructores:
- Uno que reciba
numeroCuenta,nombreTitular, ytipoCuenta. El saldo inicial será 0. - Otro que reciba todos los atributos, incluyendo el saldo inicial.
- Uno que reciba
- Métodos:
depositar(double cantidad): Incrementa el saldo. La cantidad debe ser positiva.retirar(double cantidad): Decrementa el saldo.- Si la cantidad es positiva y hay saldo suficiente, realiza la operación y devuelve
true. - Si la cantidad es negativa o no hay saldo suficiente, no hace nada y devuelve
false, imprimiendo un mensaje adecuado por consola.
- Si la cantidad es positiva y hay saldo suficiente, realiza la operación y devuelve
consultarSaldo(): Devuelve el saldo actual.getNumeroCuenta(),getNombreTitular(),getTipoCuenta().transferir(CuentaBancaria cuentaDestino, double cantidad): Transfiere unacantidaddesde la cuenta actual acuentaDestino. Debe verificar que hay saldo suficiente en la cuenta origen y que la cantidad es positiva. Devuelvetruesi la transferencia fue exitosa,falseen caso contrario.
Crea una clase EjercicioA3Main con un método main que demuestre el funcionamiento: crea dos cuentas, realiza depósitos, retiradas y una transferencia entre ellas. Muestra los saldos después de cada operación relevante.
Ejercicio A4: Generador de Equipos Aleatorios
Se necesita una clase GeneradorEquipos para formar equipos de jugadores.
-
Clase interna (o separada)
Jugador:- Atributos:
nombre(String),nivelHabilidad(int, 1-10). - Constructor para inicializar
nombreynivelHabilidad. getterspara sus atributos.toString()que devuelva “Nombre (Nivel: X)“.
- Atributos:
-
Clase
GeneradorEquipos:- Atributos: Un
ArrayList<Jugador>llamadolistaJugadoresDisponibles. - Constructores:
- Uno vacío que inicialice la lista de jugadores.
- Métodos:
agregarJugador(Jugador jugador): Añade un jugador a la lista de disponibles.eliminarJugador(String nombreJugador): Elimina un jugador de la lista.generarEquipos(int numeroDeEquipos):- Recibe el número de equipos a formar.
- Distribuye los jugadores disponibles de la forma más equitativa posible entre el
numeroDeEquiposespecificado. La equidad se puede basar primero en cantidad y luego intentar balancear pornivelHabilidad(opcional, para mayor desafío). - Devuelve un
ArrayList<ArrayList<Jugador>>, donde cadaArrayList<Jugador>interno representa un equipo. - Si no hay suficientes jugadores para formar los equipos (ej. 1 jugador para 2 equipos), debe devolver una lista vacía o
nully mostrar un mensaje.
mostrarEquipos(ArrayList<ArrayList<Jugador>> equipos): Método estático (o de instancia) que imprime la conformación de los equipos de forma clara.
- Atributos: Un
Implementa también una clase EjercicioA4Main para probar la funcionalidad: añade varios jugadores y genera 2 o 3 equipos.
Ejercicio A5: Sistema de Reservas de Vuelos Sencillo
Escribir una clase Vuelo y una clase SistemaReservas.
-
Vuelo:- Atributos:
codigoVuelo(String),origen(String),destino(String),capacidad(int),asientosOcupados(int). - Constructor: Recibe
codigoVuelo,origen,destino,capacidad. InicializaasientosOcupadosa 0. - Métodos:
getterspara todos los atributos.getAsientosDisponibles(): Devuelvecapacidad - asientosOcupados.reservarAsiento(): Si hay asientos disponibles, incrementaasientosOcupadosen 1 y devuelvetrue. Si no, devuelvefalse.cancelarReserva(): Si hay asientos ocupados, decrementaasientosOcupadosen 1 y devuelvetrue. Si no, devuelvefalse.toString(): Devuelve “Vuelo [CODIGO] de [ORIGEN] a [DESTINO] - Asientos disponibles: X/Y”.
- Atributos:
-
SistemaReservas:- Atributos: Un
ArrayList<Vuelo>para almacenar los vuelos disponibles. - Constructor: Inicializa la lista de vuelos.
- Métodos:
agregarVuelo(Vuelo vuelo): Añade un nuevo vuelo al sistema.buscarVuelo(String codigoVuelo): Devuelve el objetoVuelocorrespondiente al código, onullsi no existe.realizarReserva(String codigoVuelo): Busca el vuelo y, si existe y hay disponibilidad, llama a su métodoreservarAsiento(). Devuelvetruesi la reserva fue exitosa,falseen caso contrario.cancelarReservaVuelo(String codigoVuelo): Busca el vuelo y, si existe, llama a su métodocancelarReserva(). Devuelvetruesi la cancelación fue posible,falseen caso contrario.mostrarEstadoVuelos(): Itera sobre todos los vuelos e imprime su estado usando el métodotoString()deVuelo.
- Atributos: Un
Crea una clase principal para probar el sistema: añade vuelos, realiza y cancela reservas, y muestra el estado.