Ejercicios Unidad 5: Iniciación a la Programación Orientada a Objetos
Resultados de Aprendizaje
Este boletín trabaja los siguientes RAs del módulo de Programación:
- RA2, RA4 — Escribe y depura código aplicando los principios de la POO: clases, objetos, encapsulamiento, constructores y métodos. Desarrolla programas organizados en clases con atributos y comportamiento propio.
Instrucciones Generales
- Crea un proyecto nuevo en tu IDE llamado
InicioPOO. - Para cada ejercicio, crea la clase que se pide (ej:
Libro.java) y una clase principal para probarla (ej:MainLibro.java).
1. La Biblioteca Básica
Enunciado: Crea una clase llamada Libro que represente un libro físico. Debe tener los siguientes atributos públicos:
titulo(String)autor(String)numPaginas(int)valoracion(int, del 0 al 10).
Incluye un método mostrarInfo() que imprima por consola los detalles (ej: "El libro 'Quijote' de Cervantes tiene 500 páginas...").
Finalmente, ponlo a prueba en el main: crea dos objetos Libro distintos, asígnales valores directamente a sus atributos públicos y llama a su método mostrarInfo.
2. La Playlist Protegida
Enunciado: Crea una clase Cancion donde los datos estén protegidos (encapsulamiento).
Define los atributos privados:
titulo(String)autor(String)duracion(int, en segundos).
Debes implementar los métodos Getters y Setters para todos los atributos.
- Lógica: En el método
setDuracion, si el valor recibido es negativo, asigna 0 e imprime un aviso por consola ("Error: Duración negativa").
Ponlo a prueba en el main: Intenta acceder a los atributos directamente (verás que falla). Usa los setters para configurar una canción (prueba a poner una duración negativa para ver el error) y usa los getters para imprimir el resultado final.
3. El Estudiante Constructor
Enunciado: Crea una clase Alumno que obligue a proporcionar datos al nacer (Constructores).
Tendrá atributos privados:
nombre(String)edad(int)curso(String).
Implementa dos constructores:
- Constructor Completo: Recibe los 3 datos y los asigna (usa
thispara diferenciar). - Constructor Rápido: Solo recibe
nombreyedad. Por defecto, asigna el curso "1º DAM".
Ponlo a prueba en el main: Crea un alumno "Juan" usando el constructor completo y una alumna "Maria" usando el constructor rápido. Muestra los datos de ambos para verificar que María ha sido matriculada correctamente en "1º DAM".
4. El Banco Seguro
Enunciado: Crea una clase CuentaBancaria con lógica de negocio real.
Tendrá atributos privados:
numCuenta(String)titular(String)-
saldo(double). -
Constructor: Obliga a introducir el nombre del titular al crear la cuenta. El saldo inicial será siempre 0.
-
Métodos:
ingresar(double cantidad): Suma la cantidad al saldo (solo si es positiva).retirar(double cantidad): Resta la cantidad. OJO: No se puede retirar si no hay saldo suficiente o si la cantidad es negativa. Muestra mensajes de error si la operación falla.- privado
generarNumCuenta(): Genera un número de cuenta de 12 dígitos (puedes usar random de la clase Math, como hemos visto en otras unidades)
Ponlo a prueba en el main: Crea una cuenta a tu nombre. Ingresa 1000€. Intenta retirar 2000€ (debe fallar). Luego retira 500€. Imprime el saldo final para comprobar que te quedan 500€.
5. La Flota de Bicicletas (Estáticos)
Enunciado: Vamos a gestionar una tienda de bicis. Crea una clase Bicicleta.
- Atributos de Instancia (Privados):
marca(String),modelo(String). - Atributo de Clase (Estático):
contadorBicicletas(int). Este contador es compartido por todas las bicis. - Constructor: Recibe marca y modelo. Además, debe aumentar en 1 el
contadorBicicletascada vez que se ejecute. - Método Estático:
getBicicletasTotales()que devuelva el valor actual del contador.
Ponlo a prueba en el main:
- Imprime el número de bicicletas antes de crear ninguna (debería ser 0).
- Crea 3 objetos
Bicicletadiferentes (ej: "Orbea", "Trek", "Specialized"). - Vuelve a imprimir el número total llamando al método estático de la clase
Bicicleta. ¿Marca 3?
6. El Restaurante Digital (Clase Básica)
Enunciado: Crea una clase llamada Plato para el menú de un restaurante.
Debe tener atributos públicos: nombre (String), precio (double), esVegano (boolean) y calorias (int).
Incluye un método imprimirDetalle() que muestre la información formateada (ej: "Hamburguesa (No vegano) - 12.50€ - 800 kcal").
Ponlo a prueba en el main: Crea dos platos (uno vegano y otro no), asigna sus valores y muestra sus detalles por pantalla.
7. La Cuenta de Usuario (Encapsulamiento y Validación)
Enunciado: Crea una clase Usuario para una web.
Atributos privados: username (String), email (String) y password (String).
Debes implementar los métodos Getters y Setters.
- Lógica: En el
setPassword, la contraseña debe tener al menos 8 caracteres. Si es más corta, muestra un error y no la cambies.
Ponlo a prueba en el main: Crea un usuario. Intenta ponerle una contraseña de "1234" (debe fallar) y luego una válida. Imprime el username y el email para verificar.
8. El Equipo de Fútbol (Constructores)
Enunciado: Crea una clase Jugador que represente a un futbolista.
Atributos privados: nombre (String), dorsal (int) y posicion (String).
Implementa dos constructores:
- Constructor Completo: Recibe nombre, dorsal y posición.
- Constructor "Sin Dorsal": Recibe solo nombre y posición. Por defecto, asigna el dorsal -1 (indicando que aún no tiene número).
Ponlo a prueba en el main: Ficha a dos jugadores usando ambos constructores. Muestra sus datos para ver cómo se ha asignado el dorsal por defecto.
9. El Termostato Inteligente (Lógica de Negocio)
Enunciado: Crea una clase Termostato.
Atributos privados: temperaturaActual (double) y estaEncendido (boolean).
- Constructor: Inicializa el termostato apagado y a 20.0 grados.
-
Métodos:
encender()/apagar(): Cambian el estado.subirTemperatura(double grados): Solo funciona si está encendido. Suma grados.bajarTemperatura(double grados): Solo funciona si está encendido. Resta grados.
Ponlo a prueba en el main: Intenta subir la temperatura con el termostato apagado (no debería cambiar). Enciéndelo, sube 5 grados e imprime el estado actual.
10. La Fábrica de Robots (Estáticos)
Enunciado: Vamos a fabricar robots en serie. Crea una clase Robot.
- Atributos de Instancia (Privados):
id(int),modelo(String). - Atributo de Clase (Estático):
contadorRobots(int). - Constructor: Recibe solo el
modelo. Elidse debe asignar automáticamente usando elcontadorRobots(el primer robot será ID 1, el segundo ID 2...). Recuerda aumentar el contador. - Método:
mostrarInfo()que diga "Robot modelo [X] con ID [Y]".
Ponlo a prueba en el main:
- Crea 3 robots de modelos distintos.
- Llama a
mostrarInfode cada uno. ¿Tienen IDs consecutivos (1, 2, 3)? - Imprime el total de robots fabricados consultando el atributo estático.