Contenido
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.
- Crea una clase llamada
EstacionMeteorologica. - Cada estación tendrá un atributo que es su numero de serie
- Añade los siguientes atributos estáticos:
ciudad(String) → siempre será"Madrid"temperaturaMedia(double)nevadaActiva(boolean)
- Crea solo un constructor vacío (no parámetros).
- 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.
- Crea una clase llamada
CentroEmergencias. - Añade los siguientes atributos estáticos:
ciudad(String) →"Madrid"temperatura(double)nevadaActiva(boolean)
- Añade los siguientes métodos estáticos:
activarNevada()→ ponenevadaActivaatruedesactivarNevada()→ ponenevadaActivaafalseactualizarTemperatura(double t)mostrarEstado()→ muestra todos los datos por pantalla
- 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.
- Crea la clase
CentroQuitanieves. - Implementa Singleton clásico:
- atributo privado
staticpara la instancia - constructor
private - método
public static CentroQuitanieves getInstancia()
- atributo privado
- Añade atributos NO estáticos (del objeto único):
int maquinasActivasint toneladasSalint avisosEmitidos
- Añade métodos (no estáticos) simples:
activarMaquina()→ suma 1 amaquinasActivasrepartirSal(int toneladas)→ suma atoneladasSalemitirAviso()→ suma 1 aavisosEmitidosmostrarResumen()→ 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
c1y muestra el resumen conc2(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



