Reto – “Madrid bajo cero”

Hoy ha nevado en Madrid. El ayuntamiento quiere un pequeño programa en Java para registrar datos comunes de la nevada, sin entrar en sistemas complejos ni lógica avanzada.

Repasa la documentación sobre este reto: https://laaventuradeaprender.com/una-clase-una-instancia-y-cero-excusas-static-y-singleton-en-java/

EstacionMeteorologica

Crear una clase llamada EstacionMeteorologica.
Cada estación representa un punto de medición distinto de Madrid (Sol, Chamartín, Moncloa…), pero hay datos que son globales, iguales para todas las estaciones.

  1. Crea una clase llamada EstacionMeteorologica.
  2. Cada estación tendrá un atributo que es su numero de serie
  3. Añade los siguientes atributos estáticos:
    • ciudad (String) → siempre será "Madrid"
    • temperaturaMedia (double)
    • nevadaActiva (boolean)
  4. Crea solo un constructor vacío (no parámetros).
  5. En el main:
    • Asigna valores a los atributos estáticos usando el nombre de la clase.
    • Crea al menos tres objetos de EstacionMeteorologica.
    • Muestra por pantalla los valores de los atributos estáticos desde cada objeto.

Reglas del reto

  • No usar métodos static (solo atributos).
  • No usar herencia.
  • No usar arrays, listas ni entrada por teclado.
  • No usar getters ni setters.
  • No usar lógica condicional (if, switch, etc.)

Ejemplo de salida esperada (orientativa)

Ciudad: Madrid
Numero de serie: 124
Temperatura media: -1.5
Nevada activa: true

Ciudad: Madrid
Numero de serie: 234
Temperatura media: -1.5
Nevada activa: true

Emergencia por nieve en Madrid

Tras la nevada, el ayuntamiento necesita acciones rápidas y globales: avisar a la población, consultar el estado general y actualizar la temperatura.
Estas acciones no dependen de una estación concreta, sino del estado general de la ciudad.

Se trabaja con una clase llamada CentroEmergencias.
No representa un objeto físico concreto, sino un servicio global que actúa sobre el estado general de Madrid.

  1. Crea una clase llamada CentroEmergencias.
  2. Añade los siguientes atributos estáticos:
    • ciudad (String) → "Madrid"
    • temperatura (double)
    • nevadaActiva (boolean)
  3. Añade los siguientes métodos estáticos:
    • activarNevada() → pone nevadaActiva a true
    • desactivarNevada() → pone nevadaActiva a false
    • actualizarTemperatura(double t)
    • mostrarEstado() → muestra todos los datos por pantalla
  4. En el main:
    • Llama a los métodos sin crear ningún objeto.
    • Cambia el estado varias veces.
    • Muestra el estado tras cada cambio.

Ejemplo de ejecución esperada (orientativa)

Ciudad: Madrid
Temperatura: -2.0
Nevada activa: false

Activando nevada...

Ciudad: Madrid
Temperatura: -2.0
Nevada activa: true

Actualizando temperatura...

Ciudad: Madrid
Temperatura: -4.5
Nevada activa: true

Parte meteorológico express

Tras la nevada, los medios necesitan cálculos rápidos y mensajes claros, pero no quieren guardar estado.
Solo quieren usar herramientas que reciban datos, hagan su trabajo y desaparezcan sin dejar rastro.

El objetivo del reto es entender que un método static puede existir sin ningún atributo static.

Se crea una clase llamada InformeNieve.
Esta clase no guarda información, solo procesa datos que se le pasan y devuelve resultados o muestra mensajes.

Es una clase “herramienta”, no un objeto con estado.

Crea una clase llamada InformeNieve.

No declares ningún atributo (ni estático ni no estático).

Crea los siguientes métodos estáticos:

  • mostrarAviso(double temperatura)
  • convertirCelsiusAFahrenheit(double celsius)
  • calcularSensacionTermica(double temperatura, double viento)

En el main:

  • Llama a los métodos directamente usando el nombre de la clase.
  • Usa valores literales (números escritos directamente).
  • Muestra los resultados por pantalla.

Reglas del reto

  • Prohibido declarar atributos.
  • Prohibido usar new.
  • Prohibido usar getters, setters o constructores.
  • No usar colecciones ni entrada por teclado.
  • Mantener los métodos simples y claros.

Ejemplo de uso

Aviso: Temperatura crítica (-3.0 ºC)

Temperatura en Fahrenheit: 26.6

Sensación térmica estimada: -8.5 ºC

Este reto es deliberadamente austero.

“El Quitanieves Supremo de Madrid” (Singleton)

Madrid ha amanecido blanco. El ayuntamiento activa un único centro de control que coordina todo: no puede haber dos, porque acabarían pisándose órdenes (y eso en una nevada acaba en caos).

Vas a crear la clase CentroQuitanieves que gestiona el estado de la emergencia:

  • cuántas máquinas quitanieves están activas
  • cuántas toneladas de sal se han repartido
  • cuántos avisos se han emitido

Todo eso debe estar dentro de una única instancia.

  1. Crea la clase CentroQuitanieves.
  2. Implementa Singleton clásico:
    • atributo privado static para la instancia
    • constructor private
    • método public static CentroQuitanieves getInstancia()
  3. Añade atributos NO estáticos (del objeto único):
    • int maquinasActivas
    • int toneladasSal
    • int avisosEmitidos
  4. Añade métodos (no estáticos) simples:
    • activarMaquina() → suma 1 a maquinasActivas
    • repartirSal(int toneladas) → suma a toneladasSal
    • emitirAviso() → suma 1 a avisosEmitidos
    • mostrarResumen() → imprime todos los datos
  • No puedes hacer new CentroQuitanieves()
  • Debes pedir el centro así:
CentroQuitanieves c1 = CentroQuitanieves.getInstancia();
CentroQuitanieves c2 = CentroQuitanieves.getInstancia();
  • Comprueba que es el mismo objeto:
System.out.println(c1 == c2); // debería ser true
  • Realiza acciones con c1 y muestra el resumen con c2 (o al revés) para comprobar que comparten estado.

Ejemplo de salida:

¿Mismo centro? true

Resumen Madrid:
Máquinas activas: 2
Toneladas de sal: 15
Avisos emitidos: 3