Café y Código

POO Básico

Desafíos de POO — Básico

20 clases únicas (10 clásicas + 10 con temática gamer) sin herencia para dominar atributos, métodos y creación de objetos. Cada ejercicio trae su diagrama de clase interactivo (una sola caja). Ideal como primer paso antes de herencia e interfaces.

Ruta canónica: /challenges/poo · También disponible: /challenges/inheritance (herencia) y /challenges/interface (interfaces).

Modal con tarjetas — misma presentación que los ejercicios.

20 clases · clic para expandir diagrama y checklist

1. Lámpara de Mesa

Lampara · 3 attrs · 3 métodos

Una lámpara con brillo regulable. Debe recordar si está encendida y en qué nivel está.

Qué hacer: Implementa la clase Lampara. Crea una lámpara, enciéndela, cambia el brillo a 2 y luego apágala. Valida que el nivel sea 1-3.

UMLClase Lampara
Lampara
-color: StringString colorcolorcolor
-esta_encendida: booleanboolean esta_encendidaesta_encendidaesta_encendida
-nivel_brillo: intint nivel_brillonivel_brillonivel_brillo
+encender()encender()encender()encender()
+apagar()apagar()apagar()apagar()
+cambiar_brillo(nuevo_nivel: int)cambiar_brillo(nuevo_nivel: int)cambiar_brillo(nuevo_nivel)cambiar_brillo(nuevo_nivel)
🔍 Clic para ampliar y hacer zoom

2. Taza de Café

Taza · 3 attrs · 3 métodos

Una taza con capacidad fija que se llena, se bebe y se vacía.

Qué hacer: Implementa Taza. Llena con "café", bebe 80 ml, intenta beber más de lo disponible y vacíala.

UMLClase Taza
Taza
-capacidad_ml: doubledouble capacidad_mlcapacidad_mlcapacidad_ml
-cantidad_actual_ml: doubledouble cantidad_actual_mlcantidad_actual_mlcantidad_actual_ml
-tipo_bebida: StringString tipo_bebidatipo_bebidatipo_bebida
+llenar(tipo: String)llenar(tipo: String)llenar(tipo)llenar(tipo)
+beber(ml_a_tomar: double)beber(ml_a_tomar: double)beber(ml_a_tomar)beber(ml_a_tomar)
+vaciar()vaciar()vaciar()vaciar()
🔍 Clic para ampliar y hacer zoom

3. Semáforo

Semaforo · 3 attrs · 2 métodos

Un semáforo de calle que solo admite Rojo, Amarillo o Verde y puede quedar fuera de servicio.

Qué hacer: Implementa Semaforo. Cambia a Verde, luego a Amarillo y simula una falla con apagar_por_falla().

UMLClase Semaforo
Semaforo
-color_luz: StringString color_luzcolor_luzcolor_luz
-ubicacion_calle: StringString ubicacion_calleubicacion_calleubicacion_calle
-esta_operativo: booleanboolean esta_operativoesta_operativoesta_operativo
+cambiar_luz(nuevo_color: String)cambiar_luz(nuevo_color: String)cambiar_luz(nuevo_color)cambiar_luz(nuevo_color)
+apagar_por_falla()apagar_por_falla()apagar_por_falla()apagar_por_falla()
🔍 Clic para ampliar y hacer zoom

4. Termómetro Digital

Termometro · 2 attrs · 3 métodos

Un termómetro que mide, convierte unidad y muestra la lectura.

Qué hacer: Implementa Termometro. Toma 36.6°C, muestra la lectura, cambia a Fahrenheit y vuelve a mostrar.

UMLClase Termometro
Termometro
-temperatura_actual: doubledouble temperatura_actualtemperatura_actualtemperatura_actual
-unidad: StringString unidadunidadunidad
+tomar_temperatura(valor: double)tomar_temperatura(valor: double)tomar_temperatura(valor)tomar_temperatura(valor)
+cambiar_unidad()cambiar_unidad()cambiar_unidad()cambiar_unidad()
+mostrar_lectura()mostrar_lectura()mostrar_lectura()mostrar_lectura()
🔍 Clic para ampliar y hacer zoom

5. Reloj Despertador

RelojDespertador · 3 attrs · 3 métodos

Un despertador que guarda la hora actual, la alarma y si suena.

Qué hacer: Implementa RelojDespertador. Configura alarma a las 07:00, actívala y llama a sonar_alarma().

UMLClase RelojDespertador
RelojDespertador
-hora_actual: StringString hora_actualhora_actualhora_actual
-hora_alarma: StringString hora_alarmahora_alarmahora_alarma
-alarma_activada: booleanboolean alarma_activadaalarma_activadaalarma_activada
+configurar_alarma(hora: String)configurar_alarma(hora: String)configurar_alarma(hora)configurar_alarma(hora)
+activar_alarma()activar_alarma()activar_alarma()activar_alarma()
+sonar_alarma()sonar_alarma()sonar_alarma()sonar_alarma()
🔍 Clic para ampliar y hacer zoom

6. Puerta de Acceso

Puerta · 3 attrs · 4 métodos

Una puerta que se abre/cierra y se bloquea con llave. No se puede abrir si está con llave.

Qué hacer: Implementa Puerta. Intenta abrir con llave puesta (debe fallar), quita la llave y abre.

UMLClase Puerta
Puerta
-material: StringString materialmaterialmaterial
-esta_abierta: booleanboolean esta_abiertaesta_abiertaesta_abierta
-esta_con_llave: booleanboolean esta_con_llaveesta_con_llaveesta_con_llave
+abrir()abrir()abrir()abrir()
+cerrar()cerrar()cerrar()cerrar()
+poner_llave()poner_llave()poner_llave()poner_llave()
+quitar_llave()quitar_llave()quitar_llave()quitar_llave()
🔍 Clic para ampliar y hacer zoom

7. Marcador de Puntos (Score)

MarcadorJuego · 3 attrs · 3 métodos

Marcador de dos jugadores con tiempo restante.

Qué hacer: Implementa MarcadorJuego. Suma 2 puntos a J1, 1 a J2, muestra el marcador y reinícialo.

UMLClase MarcadorJuego
MarcadorJuego
-puntos_jugador_1: intint puntos_jugador_1puntos_jugador_1puntos_jugador_1
-puntos_jugador_2: intint puntos_jugador_2puntos_jugador_2puntos_jugador_2
-tiempo_restante_segundos: intint tiempo_restante_segundostiempo_restante_segundostiempo_restante_segundos
+sumar_punto_j1()sumar_punto_j1()sumar_punto_j1()sumar_punto_j1()
+sumar_punto_j2()sumar_punto_j2()sumar_punto_j2()sumar_punto_j2()
+reiniciar_marcador()reiniciar_marcador()reiniciar_marcador()reiniciar_marcador()
🔍 Clic para ampliar y hacer zoom

8. Alcancía de Ahorro

Alcancia · 3 attrs · 3 métodos

Alcancía que guarda dinero hasta su capacidad y se rompe para retirarlo.

Qué hacer: Implementa Alcancia. Guarda $5000, intenta exceder la capacidad (debe rechazar) y rompe la alcancía.

UMLClase Alcancia
Alcancia
-dueno: StringString duenoduenodueno
-total_ahorrado: doubledouble total_ahorradototal_ahorradototal_ahorrado
-capacidad_maxima: doubledouble capacidad_maximacapacidad_maximacapacidad_maxima
+guardar_dinero(monto: double)guardar_dinero(monto: double)guardar_dinero(monto)guardar_dinero(monto)
+romper_alcancia()romper_alcancia()romper_alcancia()romper_alcancia()
+ver_total()ver_total()ver_total()ver_total()
🔍 Clic para ampliar y hacer zoom

9. Billetera Simple

Billetera · 2 attrs · 3 métodos

Billetera con saldo que se carga y se gasta. No permite gastar más de lo disponible.

Qué hacer: Implementa Billetera. Agrega $10000, gasta $3500, intenta gastar $10000 de nuevo (debe fallar) y consulta el saldo.

UMLClase Billetera
Billetera
-titular: StringString titulartitulartitular
-dinero_disponible: doubledouble dinero_disponibledinero_disponibledinero_disponible
+agregar_dinero(monto: double)agregar_dinero(monto: double)agregar_dinero(monto)agregar_dinero(monto)
+gastar_dinero(monto: double)gastar_dinero(monto: double)gastar_dinero(monto)gastar_dinero(monto)
+consultar_plata()consultar_plata()consultar_plata()consultar_plata()
🔍 Clic para ampliar y hacer zoom

10. Ventilador

Ventilador · 3 attrs · 4 métodos

Ventilador con 4 velocidades (0 apagado .. 3 máxima) que puede girar oscilando.

Qué hacer: Implementa Ventilador. Sube a velocidad 2, activa el giro, baja a 1 y apaga.

UMLClase Ventilador
Ventilador
-marca: StringString marcamarcamarca
-velocidad: intint velocidadvelocidadvelocidad
-esta_girando: booleanboolean esta_girandoesta_girandoesta_girando
+subir_velocidad()subir_velocidad()subir_velocidad()subir_velocidad()
+bajar_velocidad()bajar_velocidad()bajar_velocidad()bajar_velocidad()
+alternar_giro()alternar_giro()alternar_giro()alternar_giro()
+apagar()apagar()apagar()apagar()
🔍 Clic para ampliar y hacer zoom

11. Héroe de Videojuego RPG

PersonajeRPG · 5 attrs · 4 métodos

Un personaje jugable con estadísticas de vida, maná, nivel y estado vivo/muerto en una partida.

Qué hacer: Implementa PersonajeRPG. Recibe 40 de daño, usa poción para curar 25 HP, gasta maná para lanzar un hechizo y sube de nivel aumentando sus estadísticas.

UMLClase PersonajeRPG
PersonajeRPG
-nombre: StringString nombrenombrenombre
-nivel: intint nivelnivelnivel
-puntos_vida: intint puntos_vidapuntos_vidapuntos_vida
-puntos_mana: intint puntos_manapuntos_manapuntos_mana
-esta_vivo: booleanboolean esta_vivoesta_vivoesta_vivo
+recibir_danio(cantidad: int)recibir_danio(cantidad: int)recibir_danio(cantidad)recibir_danio(cantidad)
+curar(cantidad: int)curar(cantidad: int)curar(cantidad)curar(cantidad)
+gastar_mana(costo: int)gastar_mana(costo: int)gastar_mana(costo)gastar_mana(costo)
+subir_nivel()subir_nivel()subir_nivel()subir_nivel()
🔍 Clic para ampliar y hacer zoom

12. Inventario del Jugador (Mochila)

Inventario · 4 attrs · 4 métodos

Un inventario de ítems con límite de slots de almacenamiento y peso máximo soportado.

Qué hacer: Implementa Inventario. Agrega ítems validando capacidad y peso, usa consumibles, suelta objetos y verifica si queda espacio libre.

UMLClase Inventario
Inventario
-capacidad_maxima: intint capacidad_maximacapacidad_maximacapacidad_maxima
-items_actuales: intint items_actualesitems_actualesitems_actuales
-peso_maximo_kg: doubledouble peso_maximo_kgpeso_maximo_kgpeso_maximo_kg
-peso_actual_kg: doubledouble peso_actual_kgpeso_actual_kgpeso_actual_kg
+agregar_item(peso_item: double)agregar_item(peso_item: double)agregar_item(peso_item)agregar_item(peso_item)
+usar_item(peso_item: double)usar_item(peso_item: double)usar_item(peso_item)usar_item(peso_item)
+soltar_item(peso_item: double)soltar_item(peso_item: double)soltar_item(peso_item)soltar_item(peso_item)
+tiene_espacio()tiene_espacio()tiene_espacio()tiene_espacio()
🔍 Clic para ampliar y hacer zoom

14. Jefe de Mazmorra (Raid Boss)

JefeMazmorra · 5 attrs · 4 métodos

Un poderoso jefe de calabozo con múltiples fases de combate, barra de vida y modo furia activado al bajar del 30% de salud.

Qué hacer: Implementa JefeMazmorra. Aplica daño al jefe, pasa a la fase 2 al vaciar la primera barra, activa furia para potenciar ataques y reinicia el encuentro si los jugadores caen.

UMLClase JefeMazmorra
JefeMazmorra
-nombre_jefe: StringString nombre_jefenombre_jefenombre_jefe
-vida_maxima: intint vida_maximavida_maximavida_maxima
-vida_actual: intint vida_actualvida_actualvida_actual
-fase_combate: intint fase_combatefase_combatefase_combate
-modo_furia: booleanboolean modo_furiamodo_furiamodo_furia
+recibir_danio(danio: int)recibir_danio(danio: int)recibir_danio(danio)recibir_danio(danio)
+cambiar_fase()cambiar_fase()cambiar_fase()cambiar_fase()
+activar_furia()activar_furia()activar_furia()activar_furia()
+reiniciar_jefe()reiniciar_jefe()reiniciar_jefe()reiniciar_jefe()
🔍 Clic para ampliar y hacer zoom

15. Carta Coleccionable de Batalla (TCG)

CartaTCG · 5 attrs · 4 métodos

Una carta coleccionable estilo juego de cartas táctico con coste de energía, poder de ataque, puntos de defensa y rareza dorada.

Qué hacer: Implementa CartaTCG. Invoca la carta restando coste, ejecuta ataques contra cartas rivales, aplica bonificadores de daño y recibe ataques enemigos.

UMLClase CartaTCG
CartaTCG
-nombre_carta: StringString nombre_cartanombre_cartanombre_carta
-costo_energia: intint costo_energiacosto_energiacosto_energia
-puntos_ataque: intint puntos_ataquepuntos_ataquepuntos_ataque
-puntos_defensa: intint puntos_defensapuntos_defensapuntos_defensa
-es_dorada: booleanboolean es_doradaes_doradaes_dorada
+invocar()invocar()invocar()invocar()
+atacar(objetivo: String)atacar(objetivo: String)atacar(objetivo)atacar(objetivo)
+potenciar_ataque(bonus: int)potenciar_ataque(bonus: int)potenciar_ataque(bonus)potenciar_ataque(bonus)
+recibir_ataque(danio: int)recibir_ataque(danio: int)recibir_ataque(danio)recibir_ataque(danio)
🔍 Clic para ampliar y hacer zoom

16. Mando de Consola Inalámbrico

MandoConsola · 4 attrs · 4 métodos

Un periférico/gamepad inalámbrico con indicador de batería, conexión Bluetooth, motores de vibración háptica y asignación de jugador.

Qué hacer: Implementa MandoConsola. Conéctalo a la consola, dispara pulsos de vibración en colisiones, gestiona la batería y apágalo al desconectar.

UMLClase MandoConsola
MandoConsola
-id_jugador: intint id_jugadorid_jugadorid_jugador
-bateria_porcentaje: intint bateria_porcentajebateria_porcentajebateria_porcentaje
-esta_conectado: booleanboolean esta_conectadoesta_conectadoesta_conectado
-vibracion_activa: booleanboolean vibracion_activavibracion_activavibracion_activa
+conectar()conectar()conectar()conectar()
+desconectar()desconectar()desconectar()desconectar()
+activar_vibracion(duracion_ms: int)activar_vibracion(duracion_ms: int)activar_vibracion(duracion_ms)activar_vibracion(duracion_ms)
+recargar_bateria(porcentaje: int)recargar_bateria(porcentaje: int)recargar_bateria(porcentaje)recargar_bateria(porcentaje)
🔍 Clic para ampliar y hacer zoom

17. Cofre de Recompensas (Loot Chest)

CofreLoot · 4 attrs · 4 métodos

Un cofre de tesoro con recompensas de oro según su rareza, bloqueo por llave y posibilidad de ser un monstruo Mímico.

Qué hacer: Implementa CofreLoot. Intenta forzar apertura, desbloquea con la llave correcta, recoge las monedas de oro y activa la trampa si resulta ser mímico.

UMLClase CofreLoot
CofreLoot
-tipo_rareza: StringString tipo_rarezatipo_rarezatipo_rareza
-monedas_oro: intint monedas_oromonedas_oromonedas_oro
-esta_bloqueado: booleanboolean esta_bloqueadoesta_bloqueadoesta_bloqueado
-es_mimico: booleanboolean es_mimicoes_mimicoes_mimico
+desbloquear(tipo_llave: String)desbloquear(tipo_llave: String)desbloquear(tipo_llave)desbloquear(tipo_llave)
+abrir_cofre()abrir_cofre()abrir_cofre()abrir_cofre()
+reclamar_oro()reclamar_oro()reclamar_oro()reclamar_oro()
+activar_trampa()activar_trampa()activar_trampa()activar_trampa()
🔍 Clic para ampliar y hacer zoom

18. Auto de Carreras (Simulador de Velocidad)

AutoCarreras · 5 attrs · 4 métodos

Un auto deportivo de carreras con telemetría de velocidad, marchas secuenciales, tanque de óxido nitroso (NOS) y desgaste de neumáticos.

Qué hacer: Implementa AutoCarreras. Acelera en recta, sube marchas secuenciales, activa el turbo de nitro para rebasar y frena dosificando los neumáticos.

UMLClase AutoCarreras
AutoCarreras
-escuderia: StringString escuderiaescuderiaescuderia
-velocidad_kmh: doubledouble velocidad_kmhvelocidad_kmhvelocidad_kmh
-marcha_actual: intint marcha_actualmarcha_actualmarcha_actual
-nitro_disponible: intint nitro_disponiblenitro_disponiblenitro_disponible
-desgaste_neumaticos: doubledouble desgaste_neumaticosdesgaste_neumaticosdesgaste_neumaticos
+acelerar(incremento: double)acelerar(incremento: double)acelerar(incremento)acelerar(incremento)
+frenar(decremento: double)frenar(decremento: double)frenar(decremento)frenar(decremento)
+cambiar_marcha(nueva_marcha: int)cambiar_marcha(nueva_marcha: int)cambiar_marcha(nueva_marcha)cambiar_marcha(nueva_marcha)
+activar_nitro()activar_nitro()activar_nitro()activar_nitro()
🔍 Clic para ampliar y hacer zoom

19. Torre de Defensa (Tower Defense)

TorreDefensa · 5 attrs · 4 métodos

Una estructura defensiva con radio de alcance, daño base, tipo elemental (Fuego, Hielo, Rayo) y árbol de mejoras.

Qué hacer: Implementa TorreDefensa. Ataca oleadas enemigas dentro de su rango, mejora al siguiente nivel para ganar poder, cambia de elemento y gestiona su venta.

UMLClase TorreDefensa
TorreDefensa
-tipo_elemento: StringString tipo_elementotipo_elementotipo_elemento
-rango_ataque_metros: doubledouble rango_ataque_metrosrango_ataque_metrosrango_ataque_metros
-danio_base: intint danio_basedanio_basedanio_base
-nivel_mejora: intint nivel_mejoranivel_mejoranivel_mejora
-costo_mejora: intint costo_mejoracosto_mejoracosto_mejora
+atacar_objetivo(distancia: double)atacar_objetivo(distancia: double)atacar_objetivo(distancia)atacar_objetivo(distancia)
+mejorar_torre()mejorar_torre()mejorar_torre()mejorar_torre()
+cambiar_elemento(nuevo_elemento: String)cambiar_elemento(nuevo_elemento: String)cambiar_elemento(nuevo_elemento)cambiar_elemento(nuevo_elemento)
+vender_torre()vender_torre()vender_torre()vender_torre()
🔍 Clic para ampliar y hacer zoom

20. Pase de Batalla de Temporada

PaseBatalla · 5 attrs · 4 métodos

Sistema de progresión de temporada con niveles (1-100), acumulación de puntos de experiencia (XP), pase Free vs Premium y desbloqueo de skins.

Qué hacer: Implementa PaseBatalla. Gana XP en partidas, sube niveles de pase, adquiere la versión Premium y reclama recompensas cosméticas exclusivas.

UMLClase PaseBatalla
PaseBatalla
-temporada_numero: intint temporada_numerotemporada_numerotemporada_numero
-nivel_actual: intint nivel_actualnivel_actualnivel_actual
-exp_acumulada: intint exp_acumuladaexp_acumuladaexp_acumulada
-exp_para_siguiente_nivel: intint exp_para_siguiente_nivelexp_para_siguiente_nivelexp_para_siguiente_nivel
-es_premium: booleanboolean es_premiumes_premiumes_premium
+ganar_experiencia(puntos_exp: int)ganar_experiencia(puntos_exp: int)ganar_experiencia(puntos_exp)ganar_experiencia(puntos_exp)
+subir_nivel_pase()subir_nivel_pase()subir_nivel_pase()subir_nivel_pase()
+comprar_premium()comprar_premium()comprar_premium()comprar_premium()
+reclamar_recompensa()reclamar_recompensa()reclamar_recompensa()reclamar_recompensa()
🔍 Clic para ampliar y hacer zoom
Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.