1. Listo
Total
public static int busqBin (int[] v,int ini,
int fin, int n)
{
if (ini==fin)
return v[ini] == n ? ini : -1;
else
{
int medio=(ini+fin)/2;
if (n<v[medio])
return busqBin(v,ini,medio-1,n);
else if (n>v[medio])
return busqBin(v,medio+1,fin,n);
else
return medio;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Código Pasos Frecuencia Contribución
ALAN – MiClase.java – busqBin (int[] v, int ini, int fin, int n) -> int
2. La ventana que se ve en la página anterior está compuesta de:
- Barra de título: contiene el nombre de la aplicación, ALAN (ALgorithm
ANalyzer), y el nombre de la clase cargada, en caso de que haya alguna; si no la
hay, sólo el nombre de la aplicación
- Barra de herramientas: habrá al menos dos grupos diferenciados, uno para el
manejo general del programa y otro para los botones que se utilicen cuando se
está trabajando con un algoritmo ya cargado
o Primer grupo de botones:
Cargar clase Java: tras pulsarlo, la aplicación abre un selector de
ficheros (*.java) y puede cargar la clase Java deseada
Seleccionar Método, la aplicación abre un cuadro de diálogo con
un desplegable* que contiene las cabeceras de los métodos que
contiene la clase cargada para que el usuario pueda elegir el que
desea analizar (* quizá sea mejor de otra forma, tienes libertad
aquí)
Configuración general, abre un cuadro de diálogo para la
configuración del programa (colores de código, opciones
varias…), de momento no lo implementes hasta que no esté bien
definido todo lo que tendrá, aunque puedes ir jugando con
selectores de color.
… podrían surgir otros botones a medida que avance el desarrollo
o Segundo grupo de botones
Ver/ocultar datos, abre un cuadro de diálogo que permite mostrar
u ocultar los datos de cada una de las columnas de análisis o el
total. El cuadro de diálogo ofrecerá las siguientes posiblidades:
• “Mostrar dato de celda activa” (celda con cursor)
• “Mostrar datos de columna Pasos”
• “Mostrar datos de columna Frecuencia”
• “Mostrar datos de columna Contribución”
• “Mostrar total”
Verificar: el usuario puede escribir en las celdas de la tabla de
profiling para insertar la que él cree que es la solución correcta;
tras pulsar el botón, se colorearán de verde o rojo las celdas co
contenido correcto o incorrecto
… podrían surgir otros botones a medida que avance el desarrollo
- Panel general: contiene el código del algoritmo y la tabla de profiling, que será
la vía para hacer llegar al usuario la información que pretende proporcionar el
programa. Hay una parte que es fija, que es la cabecera, mientras que el resto
forman parte de un panel de scroll vertical para permitir el caso de que haya
algoritmos largos. Dentro del panel hay cinco columnas: código (para el código
del método), línea (muestra el número de línea), pasos (que muestra los pasos
por instrucción), la frecuencia (número de veces que se ejecuta esa sentencia) y
contribución (que es la multiplicación de las dos columnas justo anteriores). Las
columnas tienen ancho variable, los bordes deben ser tiradores para permitir
- Panel de total: permanece en la parte inferior de la ventana, para mostrar, sólo
cuando el usuario quiera, el total del análisis.
3. - Barra de estado: contiene una barra de progreso y una etiqueta de texto para
indicar al usuario que la aplicación está haciendo algo (por ejemplo cargando y
analizando una clase).
Tras el arranque de la aplicación, la ventana se muestra con los paneles vacíos. El
usuario debe poder elegir cargar una clase Java (pulsando el primer botón de la barra de
herramientas) y, a continuación la aplicación debe analizar el contenido de la misma
para determinar:
- qué métodos hay (teniendo en cuenta su signatura completa)
- qué sentencias tiene cada método (estructuras de control de flujo, operaciones
aritméticas, asignaciones, bucles…)
El análisis se realiza transformando el código Java a un documento XML (te
proporciono un paquete de clases que hace esto). A continuación, la aplicación debe
cargar el documento XML recién generado para almacenar (de la forma que mejor
creas) toda la información necesaria para proceder al análisis de cada método. La carga
y manipulación del documento XML se realiza fácilmente con DOM y SAX, Java
proporciona librerías de DOM y SAX, yo te paso algún código de ejemplo. Facilita
mucho hacer así las cosas, es la razón por la cual se traduce desde Java a XML.
Una vez que la clase está cargada, el usuario debe poder elegir qué método quiere
visualizar en la pantalla para ver su análisis (pulsando el segundo botón de la clase de
herramientas). En la ventana nunca se visualiza la clase completa.
Esbozo de algunos paquetes que tendrá el código de la aplicación:
- Interfaz (ventanas, cuadros de diálogo…)
- Java a XML, JavaML en realidad (te lo doy)
- Procesamiento código JavaML para obtención de los datos específicos
- Complejidad (cálculo de complejidad desde datos proporcionados por paquete
anterior)