LABORATORIO PRESENTACIÓN HERRAMIENTA: ECLIPSE


DESCRIPCIÓN


En este laboratorio se va a presentar una herramienta de desarrollo de software. En concreto, se trata de Eclipse, que es uno de los entornos visuales existentes en el mercado que permiten desarrollar aplicaciones en Java. Este tipo de herramientas permite generar código de manera automática, con el consiguiente ahorro de tiempo y esfuerzo.


OBJETIVOS


Los objetivos de este laboratorio son:



Para ello realizaremos una implementación de un ejercicio clásico como es el de calcular el número Fibonacci de un número. A continuación se creará una interfaz de usuario gráfica sencilla desde donde se llamará al módulo anterior. Es en esta segunda parte del laboratorio donde se verán más claramente las ventajas de la herramienta visual al comprobar que genera código de manera automática. Por último, veremos cómo crear documentación usando Javadoc y cómo crear un fichero .jar.


PROCEDIMIENTO A SEGUIR


1. Crear una carpeta de trabajo (carpeta workspace). Debemos crear una carpeta en nuestro equipo (por ejemplo de nombre lab1) para guardar en ella todo lo que generemos durante el laboratorio.


2. Abrir el Entorno de Desarrollo Integrado Eclipse.



2.1 Seleccionar la carpeta que hemos creado anteriormente (en el ejemplo anterior, lab1) como workspace. NO se seleccionará la opción de usar por defecto esa carpeta como “workspace”. Si se quiere cambiar el directorio que se usa como “workspace” una vez abierto Eclipse, utilizaremos la opción “Switch Workspace” disponible en el menú “File”.


2.2 Crear un nuevo proyecto Java. En el menú “File”, elegimos la opción “New -> Project” y, posteriormente la opción “Java Project”. Pulsamos “Next” y, en la siguiente ventana, introducimos el nombre del proyecto en la primera caja (por ejemplo, “lab1”). Elegimos la opción “Create new project in workspace” y la máquina virtual de Java por defecto (JRE). Además, seleccionamos la opción “Create separate source and output folders”. Si pulsamos el botón “Next”, dejaremos las opciones que aparecen por defecto. Finalmente, pulsamos el botón “Finish”. Una vez hemos creado el proyecto, pinchamos en la opción “Go to the workbench” para visualizar el proyecto.





2.3. Crear una nueva clase Java que calcule el fibonacci de un número. En el menú “File”, seleccionamos “New -> Class”. Tenemos que indicar el nombre del proyecto y el nombre del package en el que queremos crear la clase. También hay que asignarle un nombre a la clase, por ejemplo “Fibonacci”. Además, seleccionamos la opción “public static void main(String[] args)” para crear el método principal. En el “workbench”, vemos que Eclipse ha generado algo de código de manera automática y algunos comentarios.





2.4. Introducir el código. En la ventana de “Fibonacci.java” añadiremos el método “calcFibonacci” y rellenaremos el método principal “main”:


public static void main (String args[]) {

int numero = 4;

System.out.println(calcFibonacci(numero));

} //fin main


public static int calcFibonacci(int n){

int ant=0;

int sig=1;

for( int j = 0; j < n; j++){

int tmp = sig;

sig = sig + ant;

ant = tmp;

}

return ant;

// COMENTARIO. También podría definirse de manera recursiva:

// if (n == 0) return 0;

// if (n == 1) return 1;

// return calcFibonacci(n-1) + calcFibonacci(n-2);

} // fin calcFibonacci



2.5. Compilar la aplicación. En Eclipse, normalmente está seleccionada por defecto la opción “Build automatically” (en el menú “Project”). Esto hace que el proyecto se compile únicamente cuando ejecutamos la aplicación. Si desactivamos esta opción, entonces tendremos disponibles las opciones “Build project” y “Build all” (por si tenemos más de un proyecto) en el menú “Project”. Si compilamos con cualquiera de las dos opciones anteriores y no obtenemos errores, entonces se crearán los archivos .class en la carpeta “bin” de nuestro proyecto (un único archivo .class en este ejemplo). Los errores de compilación (si los hay) aparecen en la ventana inferior “Problems”.


2.6. Ejecutar la aplicación. Para ejecutar nuestra aplicación por primera vez, usaremos el comando “Run as” dentro del menú “Run”. Si nos da a elegir entre diversas opciones, elegiremos “Java Application”. Para ejecutar la aplicación, tenemos que compilarla previamente o bien tener seleccionada la opción “Build automatically”. Si la ejecución se realiza correctamente, en la ventana “Console” (en la parte inferior) obtenemos el resultado. Si la ventana “Console” no está visible, podemos abrirla desde el menú “Window” mediante la opción “Show view -> Console”. Para ejecutar la aplicación nuevamente, podemos usar directamente el comando “Run” dentro del menú “Run”, o bien usar el acceso directo disponible en la barra de tareas (icono circular verde con una flecha blanca en el interior).


2.7. Intentar calcular el Fibonacci de 46, 47, 48. ¿Qué sucede? Para ejecutar con distintos valores se puede hacer de varias formas:


a) Modificando la instrucción int numero = XXX; del método “main” de “Fibonacci”.

b) Pasando como parámetro al programa el valor que sea, para lo que hay que sustituir la instrucción int numero = 4; del método main de Fibonacci por esta:


int numero = Integer.parseInt (args[0]);


Los parámetros se introducen de la siguiente manera: seleccionamos la opción “Run” en el menú “Run”. NOTA: NO usar el acceso directo de la barra de herramientas. En el menú de la izquierda, seleccionamos la clase “Fibonacci”. En la pestaña “Arguments”, escribimos 46 (o el número que queramos) en “Program arguments”.





c) También se puede leer de la entrada estándar el número. Para ello, hay que usar algunas clases del paquete “java.io”:


import java.io.*


Abrir la entrada estándar para leer de ella:


BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));


Leer de la entrada estándar en una variable “String”:


String num = entrada.readLine();


Y transformar el “String” en un número entero:


int numero = Integer.parseInt(num);


En estos últimos dos casos hay que tener cuidado y definir qué hacer cuando se produzcan excepciones (no se puede leer, la entrada no es un número, etc.).


Aquí se presenta el código anterior tal y como debe aparecer (excepto el método “calcFibonacci”):


package lab1;


import java.io.*;


public class Fibonacci {


public static void main (String args[]) {

BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));

try {

String num = entrada.readLine();

int numero = Integer.parseInt(num);

System.out.println (calcFibonacci(numero));

} catch (Exception e) {

System.out.println(e.toString());

}

} //fin main

public static int calcFibonacci(int n){

...

} // fin calcFibonacci


}

La entrada estándar se realiza desde la propia ventana “Console”, en la cual hay que introducir lo(s) parámetro(s) (separados por espacio en blanco) y pulsar “intro”.


3. Ejecutar la aplicación desde fuera de Eclipse, invocando directamente a la máquina virtual Java. Para ello hay que:

1) Lanzar un intérprete de comandos (seleccionamos “Ejecutar” en el menú “Inicio” del Sistema Operativo y después tecleamos “cmd”.

2) Asegurarse de que la herramienta JAVA se puede ejecutar en dicho intérprete de comandos. Escribir el comando “java” y ver si lo encuentra o no. Si no lo encuentra, hay que modificar la variable de entorno PATH del sistema. El PATH se puede cambiar en el “Panel de Control”, seleccionanado la opción “Sistema”. En la pestaña de “Opciones Avanzadas”, pinchamos en el botón “Variables de Entorno”. Ahí hay que añadir o editar la variable de entorno de usuario PATH para que contenga el directorio donde se encuentra java.exe. Normalmente se encuentra en el directorio “C:\Archivos de programa\Java\jrex.x.x_xx\bin“. Una vez modificado el PATH, volver a

lanzar un intérprete de comandos y comprobar que se ejecuta JAVA.

3) Posicionarse en el directorio “bin” de nuestro proyecto, donde se encuentran todos los ficheros .class, y ejecutar la clase “lab1.Fibonacci”:


java laboratorio1.Fibonacci (para el ejemplo 2.4.a)


java laboratorio1.Fibonacci 5 (para el ejemplo 2.4.b)


java laboratorio1.Fibonacci + enter + 5 + enter (para el ejemplo 2.4.c)


NOTA: Si nos aparece una excepción del tipo "java.lang.NoClassDefFoundError", debemos ejecutar la clase de la siguiente forma:


java -cp .laboratorio1.Fibonacci


o bien modificar la variable de entorno CLASSPATH:


set CLASSPATH=.


4. Crear una interfaz gráfica. Para crear la interfaz gráfica en Eclipse, vamos a usar el plug-in “Visual Editor”. Primero, debemos comprobar que tenemos el plug-in instalado, para lo cual pulsamos el botón derecho del ratón sobre el icono del proyecto en el menú izquierdo y seleccionamos “New”. En el menú desplegable, seleccionamos la opción “Others”. A continuación, desplegamos la carpeta “Java” y si aparece una opción llamada “Visual Class” significa que tenemos el plug-in instalado. Si no lo tenemos instalado, debemos instalarlo de la siguiente forma: en el menú “Help”, seleccionamos “Software Updates -> Find and Install ...”. A continuación seleccionamos la opción “Search for new features to install”. Tras pulsar el botón “Next”, seleccionamos la opción “Callisto Discovery Site” y pulsamos “Finish”. Posteriormente, seleccionamos un servidor (mirror) cercano y pulsamos el botón de aceptar. En la ventana de resultados que nos aparece, desplegamos la opción “Callisto Discovery Site” y, a continuación, la opción “Graphical Editors and Frameworks”. Dentro de esa opción, seleccionamos “Visual Editor x.x.x.”. Una vez seleccionada esa opción, pulsamos el botón de “Select Required”. Continuamos pulsando el botón “Next”, aceptamos las condiciones de la licencia y continuamos con “Next”. En la siguiente ventana, pulsamos el botón “Finish”.Si nos pide alguna verifcación, pulsamos el botón “Install all”.Finalmente, terminamos la instalación y reiniciamos Eclipse pulsando el botón “Yes”.


4.1 Crear la clase visual. Sobre la entrada del proyecto en el menú izquierdo, pulsamos el botón derecho del ratón y seleccionamos la opción “New -> Others”. Desplegamos la opción “Java” y seleccionamos “Visual Class”. A continuación, pulsamos el botón “Next”. En la ventana que aparece, seleccionamos la opción “Swing -> Frame” en el menú “Style” y le asignamos un nombre (por ejempl, “FibFrame”) y un paquete (el mismo que el de la clase“Fibonacci”) a la nueva clase. Tras pulsar el botón “Finish”, en el “workbench” nos aparece la ventana que acabamos de crear y todo el código que Eclipse ha generado de forma automática.





4.2. Diseñar la interfaz del “frame”. Vamos a diseñar una interfaz gráfica sencilla que nos permita ejecutar la clase Fibonacci anterior. Para ello, insertaremos dos cajas de texto, la primera de ellas para introducir un número y la segunda para mostrar el valor de la función de Fibonacci para el número introducido. Asímismo, introduciremos una etiqueta al lado de cada caja de texto. Finalmente, añadiremos un botón “Aceptar” en la parte inferior para iniciar el cálculo de la función de Fibonacci.





Para empezar, cambiaremos el título del “frame” pulsando sobre la barra de título del “frame”, e introduciremos por ejemplo “FibonacciGUI”.A continuación, desde la paleta de elementos (“Palette”), añadimos al “frame” un “JDesktopPane” (de la categoría “Swing Containers”) para facilitar la colocación del resto de elementos. A continuación añadimos dos “JLabel” (de la categoría “Swing Components”), a los que llamaremos “inLabel” y “outLabel” respectivamente, y dos “JTextField” (también de la categoría “Swing Components”), a los que llamaremos “inTextField” y “outTextField” respectivamente. Finalmente, añadimos un “JButton” (de la categoría “Swing Components”) en la parte inferior al que llamaremos “jButton”). Ahora, podemos comprobar todo el código que Eclipse ha generado de forma automática. Cambiamos el texto de las etiquetas y añadimos una etiqueta al botón pulsando sobre él con el botón derecho y seleccionando la opción “Set Text”. Podemos probar cómo queda nuestra interfaz ejecutando la clase “FibFrame”. En esta ocasión, tenemos que ejecutar la clase con la “Java Bean”.


4.3 Programar la respuesta a eventos. Tenemos que añadir el código que debe ejecutarse cuando se pulse el botón, para lo cual pulsamos sobre el botón con el botón derecho y seleccionamos la acción “Events -> Add Events” del menú desplegable. Entre los eventos disponibles, elegimos el evento “mouseClicked” en la categoría “Mouse”y seleccionamos la opción “extends” al crear el nuevo “Listener”. Al pulsar el botón “Finish”, Eclipse crea el siguiente código:


jButton.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseClicked(java.awt.event.MouseEvent e) {

System.out.println("mouseClicked()"); // TODO Auto- generated Event stub mouseClicked()

}

});


Para añadir la funcionalidad deseada, la implementación del “Listener” debe ser algo parecido a lo siguiente:


jButton.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseClicked(java.awt.event.MouseEvent e) {

int numero = Integer.parseInt(inTextField.getText());

outTextField.setText(Integer.toString(Fibonacci.calcFibonacci(numero)));

}

});


4.4. Salvar los ficheros. Como siempre, es conveniente de vez en cuando salvar los ficheros fuente Java, proyectos, workspaces para no llevarnos disgustos.


4.5 Ejecutar la aplicación. Como hemos mencionado antes, se puede ejecutar la interfaz desde Eclipse usando la opción “Java Bean” del comando “Run”. Para ejecutar la aplicación fuera de Eclipse, tenemos que añadir un método “main” que invoque a la interfaz. Existen dos opciones: a) añadir el “main” a la clase “FibFrame”, o bien b) crear una nueva clase principal que contenga el “main”. En cualquiera de los dos casos, debemos eliminar el método “main” de la clase “Fibonacci”. El código del nuevo método “main” es el siguiente:


public static void main(String[] args) {

// TODO Auto-generated method stub

FibFrame fibonacciGUI = new FibFrame();

}


Además, debemos añadir la instrucción


this.setVisible(true)


en el método “initialize()”, que es invocado por el constructor de la clase “FibFrame”, para hacer visible la interfaz.


4.6. Probar la aplicación y ver si hay algún problema. Como podéis comprobar, unicamente se calcula el Fibonacci de un número cuando se hace click con el ratón, pero no cuando se hace click con el teclado (mediante la barra espaciadora). El problema es que el evento apropiado no es “mouseClicked” sino “actionPerfomed”, que responde a cualquier click sobre el botón. Definir el comportamiento anterior para el evento “actionPerformed”.


¿Qué sucede si se mete un carácter no numérico en el “inTextField”? Comprobad que se lanza una excepción. Para arreglar el problema, hay que cambiar el código, y poner las instrucciones que pueden levantar excepciones dentro de un try{...}, y las instrucciones que tratan la excepción dentro de un bloque catch{...}.En este caso, habría que añadir código con este esquema:


try{...} catch(NumberFormatException ex){..}


5. Consultar la documentación de las API de Java. Comprobar que efectivamente el método “parseInt” de la clase “Integer” puede lanzar una excepción “NumberFormatException”. Para consultar la documentación de las API de Java, se puede buscar en Google directamente (poniendo "API" y el nombre de la clase, por ejemplo "API Integer"). En el paquete java.lang, encontraremos la clase Integer y dentro de la misma podremos ver que existe un método parseInt que puede lanzar una excepción NumberFormatException. La documentación completa de Java puede ser accedida también a través de Google (buscando “API JDK1.6”) o accediendo a http://java.sun.com/javase/6/docs/.


6. Generar documentación de manera automática. Seleccionamos la opción “Export” en el menú “File”. A continuación, en el apartado “Java”, seleccionamos la opcion “Javadoc”. En la ventana que se abre, seleccionamos el proyecto completo o las clases que queremos que aparezcan en la documentación y el nivel de visibilidad de la documentación: “Private”, “Package”, “Protected” y “Public”. Al pulsar el botón “Finish”, se genera automáticamente un documento con la documentación del código. Aunque mucha de esta documentación se ha generado de manera automática, es conveniente añadir comentarios “Javadoc” a las clases fuente de Java para que sean incluidos en la documentación. Por ejemplo, comprobar lo que sucede si se añade el siguiente comentario “Javadoc” inmediatamente antes del método “public static int calcFibonacci(int n)” en la clase “Fibonacci”:


/**

* @param n int valor de entrada

* @return el valor de la función de Fibonacci para el valor de entrada

*/


y se genera de nuevo la documentación con “Javadoc”. Ver cómo quedaría la documentación. En estas transparencias se muestra un ejemplo de un programa comentado con Javadoc y el resultado de visualizar la documentación en un navegador. Se incluye además un pequeño resumen de algunas palabras reservadas de “Javadoc”.


7. Generar un fichero .jar ejecutable (en realidad ejecutable por la máquina virtual Java). Seleccionamos la opción “Export” en el menú “File”. A continuación, en el apartado “Java”, seleccionamos la opcion “Jar”. En la ventana que se abre, seleccionamos el proyecto e indicamos el nombre del archivo .jar que se va a crear. Al pulsar el botón “Next”, podemos guardar las opciones del archivo .jar en un archivo. Al pulsar de nuevo el botón “Next”, indicamos dónde se va a guardar el archivo “Manifest” (con información para la ejecución del archivo .jar) y la clase principal del proyecto. Para finalizar, pulsamos el botón “Finish”. El archivo .jar creado puede ejecutarse mediante la siguiente sentencia:


java -jar archivo.jar


8. Reutilización de las clases creadas en este proyecto en otros proyectos. Después de salvar todo el proyecto, vamos a crear un nuevo proyecto como se ha hecho anteriormente, pero indicando para el mismo otro paquete Java diferente, por ejemplo “Laboratorio1Nuevo”. Para que la clase “Fibonacci” del paquete “Laboratorio1” sea accesible a las clases del nuevo proyecto hay que modificar el “Java Build Path” de este segundo proyecto de la siguiente forma: en el menú “Project”, seleccionamos la opción “Properties”. En la nueva ventana, seleccionamos la opción “Java Build Path” en el menú de la izquierda y, a contiuación, añadimos el directorio con código fuente de la clase “Fibonacci” en la pestaña “Source”. Tampoco hay que olvidar que, dentro de las clases que quieran usar la clase “Fibonacci” hay que añadir la sentencia import correspondiente:


import Laboratorio1.Fibonacci;


Salir de la herramienta una vez que acabemos el laboratorio eliminando la carpeta creada al principio, que contiene nuestros proyectos, junto con los .java generados, las clases como resultado, .class , y los proyectos, el Workspace y los ficheros con la documentación en formato html.