• Lunes 11 de Noviembre de 2024, 05:56

Autor Tema:  Porgrama En Java  (Leído 1516 veces)

NoN_Stop

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Porgrama En Java
« en: Lunes 8 de Octubre de 2007, 21:11 »
0
Clases y Objetos
Considere el problema planteado en clases sobre las mediciones de temperatura del agua que se obtienen de dispositivos instalados en una sección de un humedal. Los dispositivos han sido configurados para enviar inalámbricamente y cada cierto tiempo, un paquete de información que contiene un identificador del dispositivo, la fecha (incluida la hora) y la temperatura medida. La información de posición de los dispositivos ha sido registrada en otros medios, de los que nos ocuparemos más adelante (no en este laboratorio).
La información de mediciones de temperatura es almacenada en el servidor en un archivo de texto con el nombre spslog.dat. Este es un ejemplo de dicho archivo:
00:FF:45:A0:94:C2;28-09-2007 14:10;10.34
00-FE-95-D1-08-2A;28-09-2007 14:22;10.79
00F0238B1A0F;28-09-2007 14:38;10.02
00:FF:45:A0:94:C0;28-09-2007 15:12;11.21

Tomando la primera línea como ejemplo, podemos analizar la forma cómo la información es registrada:
00:FF:45:A0:94:C2;28-09-2007 14:00;10.34

Notemos primero que los datos están separados por punto y coma ";". De esta forma si separamos la cadena, tendríamos:
00:FF:45:A0:94:C2   identificador del dispositivo sensor de temperatura. Es la MAC address del dispositivo de red que envía la información y está compuesta de 6 bytes escritos en hexadecimal y separados por ":", "-" u otro caracter distinto del ";".
28-09-2007 14:10   La fecha y hora en formato dia-mes-año hora:minuto(dd-mm-aaaa hh24:mi)
10.34   La temperatura registrada es un número real

El primer problema que debemos resolver es leer el archivo spslog.dat e incorporar en un programa la información de las mediciones de modo de poder procesarla.
 
Creación de la Clase Medicion
Para facilitar el manejo de la información definiremos un nuevo tipo de dato a partir del concepto de Medición de Temperatura. Como cada medición está compuesta de MAC del dispositivo, fecha-hora y temperatura, construiremos una Clase Medicion con estos atributos:
import java.util.Date;
public class Medicion{
   String mac_sensor;
   double temperatura;
   Date fecha;
}
Ahora podemos manipular objetos de la clase Medicion. Para probar, construiremos una clase con un método main en donde se crea un objeto Medicion, se le dan valores a sus atributos y luego se imprimen en pantalla:
import java.util.Date;
import java.text.SimpleDateFormat;
public class PruebaMedicion{
   public static void main(String[] args){
      SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm");

      Medicion m1 = new Medicion();
      m1.mac_sensor = "00:FF:45:A0:94:C2";
      m1.temperatura = 10.34;
      try{
       m1.fecha = sdf.parse("28-09-2007 14:10");
      }
      catch(Exception e){
         m1.fecha = null;
      }
      System.out.println("------------------\n"+m1.mac_sensor+
"\n"+m1.fecha.toString()+"\n"+m1.temperatura+
         "\n------------------");
   }
}
Notar como los atributos del objeto m1 son accedidos usando el operador punto ".":
m1.mac_sensor : accede directamente al valor del atributo macsensor del objeto m1.

 
Implementación de métodos en la Clase Medicion
La manipulación de objetos Medicion puede facilitarse implementando métodos en esta clase. Crearemos los siguientes métodos:
void establecerFecha(String f): convierte f en una fecha y establece con este valor el atributo fecha del objeto.
void mostrar(): muestra en pantalla los datos de la medición.

import java.util.Date;
import java.text.SimpleDateFormat;
public class Medicion{
   String mac_sensor;
   double temperatura;
   Date fecha;

   public void establecerFecha(String f){
      SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm");
      try{
         fecha = sdf.parse(f);
      }
      catch(Exception e){
         fecha = null;
      }
   }

   public void mostrar(){
      System.out.println("------------------\n"+
         mac_sensor+"\n"+fecha.toString()+"\n"
         +temperatura+"\n------------------");
   }
}
Notar como los atributos mac_sensor, temperatura y fecha son accedidos desde los métodos establecerFecha y mostrar.
El programa de prueba quedaría:
public class PruebaMedicion2{
   public static void main(String[] args){
      Medicion m1 = new Medicion();
      m1.mac_sensor = "00:FF:45:A0:94:C2";
      m1.temperatura = 10.34;
      m1.establecerFecha("28-09-2007 14:00");
      m1.mostrar();
   }
}

 
Leer el archivo spslog.dat
Construiremos una Clase LectorArchivos que implemente métodos estáticos para obtener a partir del archivo spslog.dat un arreglo de mediciones. El método principal sería:
public static Medicion[] leeSpsLog (String nombre_archivo)

Para facilitar la implementación de dicho método, implementaremos primero los siguientes:
•   public static int cuentaMediciones(String nombre_archivo): devuelve la cantidad de líneas del archivo (que corresponde a la cantidad de mediciones realizadas).
•   public static Medicion deStringAMedcion(String linea): que crea un objeto Medicion a partir de una cadena, de acuerdo al formato de línea del archivo spslog.dat.

/* Cuenta el número de líneas del archivo */
public static int cuentaMediciones(String nombre_archivo){
   try{
      FileReader filerd = new FileReader(nombre_archivo);
      BufferedReader in = new BufferedReader(filerd);
      String linea = null;
      int contador = 0;
      while ((linea = in.readLine()) != null){
         contador++;
      }
      in.close();
      filerd.close();
      return contador;
      }
   catch (IOException e){
      System.out.println(e.getMessage());
      return 0;
   }
}
/* Crea un objeto Medicion a partir de una línea de texto */
public static Medicion deStringAMedicion(String linea){
   try{
      String[] elementos = linea.split(";");
      Medicion m = new Medicion();
      m.mac_sensor = elementos[0];
      m.establecerFecha(elementos[1]);
      m.temperatura = Double.parseDouble(elementos[2]);
      return m;
   }
   catch(Exception e){
      System.out.println(e.getMessage());
      return null;
   }
}



 
Actividad
En la clase LectorArchivos, construya el método
public static Medicion[] leeSpsLog (String nombre_archivo)



porfavor ayudenme =(