Mostrando entradas con la etiqueta Java. Mostrar todas las entradas
Mostrando entradas con la etiqueta Java. Mostrar todas las entradas

martes, 11 de junio de 2013

Ingenieria inversa en eclipse Java2UML con ObjectAid



Siempre he estado intentando mitigar el impacto de los diseños de Java, al traspasarlos a papel, ya que en muchos casos, siempre me ha parecido más sencillo diseñar la solución con código delante, antes que meramente en papel, teniendo que imaginar relaciones, herencias e implementaciones que prefiero plasmar físicamente en código antes que en papel.

Para superar esa barrera, que probablemente no debería hacerse con “la norma” en la mano, he usado diferentes herramientas para convertir el código creado en Java a un diagrama UML. Después de varios intentos he encontrado uno que después de haberlo usado voy a decir que es decente, para iniciar un diseño, aún no siendo todo lo cómodo que me gustaría que fuese, tiene muchas ventajas.

Este es ObjectAid lo que más me gusta de esta herramienta es su integración en eclipse y su más que buena capacidad de drag and drop, arrastrar una clase, o un paquete o un proyecto completo a un diagrama, lo convierte en UML, sencillamente me encanta.

La instalación es tan sencilla como la de cualquier otro plugin de eclipse, si no habéis hecho ninguna, podeis acercaros a la página de ObjectAid y veréis una ayuda al respecto de cómo instalarlo, pero en resumen, se trata de descargar los ficheros, descomprimirlos y copiar y pegar las carpetas features y plugins en vuestra instalación de eclipse. Reiniciar eclipse y ya lo tenéis disponible. (Un truco, si no funciona a la primera, podéis arrancar por línea de comandos: eclipse.exe -clean)

Un pequeño ejemplo de uso, puede ser crear un proyecto sencillo, en el que metéis unas cuantas clases, relacionándolas entre ella, implements, extends… y una vez las tenéis implementadas, nuevo-ObjectAid UML Diagram-ClassDiagram. Esto crea un fichero de extensión ucls, si lo abrís en vuestro eclipse, lo único que hace falta para generar los diagramas UML es arrastrar la clase que queréis representar en el diagrama, dentro del propio editor en eclipse.



Además automáticamente nos genera un fichero con una imagen png (como debe ser)  para exportar lo que hemos creado.

Aunque ante todo, la gran ventaja de este plugin de eclipse, es que se encuentra vivo, en desarrollo y que espero al menos la parte gratuita de este plugin sea libre es decir open source en algún momento. Mejor antes que después.

jueves, 6 de junio de 2013

Java, monitorización de memoria, herramientas utiles VisualVM

Una herramienta que me ha servido en muchos casos para poder ver el consumo de memoria que esta jhaciendo uso un programa Java es VisualVM






Como se puede ver en las imagenes, podemos hacer un profile de las aplicaciones que tenemos ejecutandose con Java, incluso si tenemos instalado un IDE como eclipse, podemos ejecutar nuestros programas haciendo uso de la JVM Visual, para poder ver el consumo que realizan nuestros programas, es realmente util..

domingo, 2 de junio de 2013

Java buenas practicas. Recorrer mapas.



Si vamos a realizar recorridos de objetos en mapas, y hacemos uso de un entorno de desarrollo de Java posterior a JDK 1.5, se aconseja el uso de Map.Entry que ha demostrado ha demostrado que es sensiblemente más rápido que el uso de objetos Iterator.

Un ejemplo de cómo quedaría el código para recorrer los mapas sería el siguiente, donde hm en el ejemplo es un objeto HashMap.

for (Map.Entry entry:  hm.entrySet()) {
    System.out.println("Clave: " + entry.getKey() + ", Valor: " + entry.getValue());
}

lunes, 27 de mayo de 2013

Java, obtener la extensión de un fichero



Obtener extensión de fichero, en muchos casos en interesante obtener la extensión de un fichero con el que estamos trabajando en Java, para lo que vamos a proponer dos aproximaciones, la primera es la más habitual, consiste en obtener la extensión en base al nombre del  fichero,  o de la ruta completa, devolviendo un texto vacio si no se encuentra el punto que separa la extensión.

      public static String getExtension(String filename) {
            int index = filename.lastIndexOf('.');
            if (index == -1) {
                  return "";
            } else {
                  return filename.substring(index + 1);
            }
}

Ahora una segunda opción, en la que presentamos como hacer esta búsqueda, pero evitando que ocurran errores de retorno, porque se envíen directorios en vez  de ficheros completos, por ejemplo si enviásemos c:\\hola.hola\\ y eso es el nombre de una carpeta, el primer método nos devolvería el hola, como si fuera la extensión del fichero, el segundo detectaría que no es un fichero, sino un directorio, y nos devolvería dentro del primer if. Podríamos ampliar el control, a un segundo if, que pregunte, si lo que nos han enviado es un fichero y si no es ni un directorio, ni un fichero, que se supone que han enviado a la consulta.

      public static String getExtensionFile(String filename) {
            File f = new File(filename);
            if (f == null || f.isDirectory()){
                  return "nulo o directorio";
            }else if (f.isFile()){
                  int index = filename.lastIndexOf('.');
                  if (index == -1) {
                        return "";
                  } else {
                        return filename.substring(index + 1);
                  }
            }else{
                  return "que has enviado?";
            }
      }    

Antes de que a alguien le reviente la vena al ver el método, se que este método es optimizable, soy consciente, pero se trata de no darlo todo hecho, sino las ideas. Está desordenado, mejóralo y úsalo.

viernes, 24 de mayo de 2013

Java buenas prácticas, leer ficheros con Buffers.



A la hora de realizar lecturas de ficheros, a menos que usemos librería de terceros para leer los ficheros, como Apache io-utils o en el caso de ficheros XML stAX. Se aconseja el uso de buffers para la lectura de los ficheros.

InputStream in = new java.io.FileInputStream(fichero);
 try {
  in = new java.io.BufferedInputStream(in);
  in.read(.....
 }



Un ejemplo completo de la lectura de un fichero usando un Buffer, del cual definimos el tamaño en la variable TamBuffer. Ojo la excepción se deja a criterio del que esté desarrollando la lectura.

try {
    BufferedReader in = new BufferedReader(new FileReader(fichero), TamBuffer);
    while ((line = in.readLine()) != null) {
    nlines++;
    }
    in.close();
} catch (Exception e) {
//Manejar excepcion
System.out.println(" ERROR:" + e );
}