El lenguaje Java es orientado a objetos, tan basto en recursos que se puede hacer casi cualquier cosa, pero también complejo y de largo aprendizaje. Uno de los objetivos de AutoJava es precisamente automatizar tediosas tareas que en Java son impensables, como puede ser la programación de complejos gráficos dinámicos o las pequeñas aplicaciones que nunca se realizan, porque su utilidad no compensa el esfuerzo necesario para programarlas.
Facilitar una serie de tareas tiene utilidad, pero no debemos creer que todo es sencillo. No existe ninguna programación facil cuando el problema a resolver es complejo por sí mismo. El siguiente ejemplo es una muestra de lo que se puede hacer con AutoJava en cuanto al diseño en 3 dimensiones y movimientos relativos. Es sencillo dibujar, pero la lógica de control exige diseñar una estrategia para que el robot juegue automáticamente al juego tres en raya contra el usuario. Por lo tanto, programar es siempre algo más que trabajo, hace falta, además, un cierto gusto y una buena dosis de paciencia cuando se fracasa una y otra vez, es un reto que debe ser de nuestro agrado, de lo contrario, dejemos que programen "otros". Posiblemente, el gusto por la programación procede de una inquietud por descubrir lo desconocido, en este caso las intrincadas reglas del razonamiento que todos hacemos a diario sin pensarlo. En cuanto a la siguiente aplicación, pulse sobre alguna casilla del tablero para colocar su marca y el robot hará lo propio con una de sus fichas. Aunque bien jugado es imposible ganar al tres en raya, el robot se ha programado con un punto devil (si lo descubre, la partida será suya).
Al programar deben tenerse en cuenta tres aspectos importantes para evitar problemas, que tarde o temprano aparecerán: Es necesario una estructura coherente en la lógica de las decisiones, una división del programa en partes reducidas y una documentación del programa. La solución que aporta AutoJava es el GRAFCET, un sistema gráfico que surgió en Francia sobre los años 70 con el fin de describir sin ambiguedades el funcionamiento de automatismos. Cuando se ha trabajado en ese campo sin conocer el grafcet se siente que falta una pieza para completar el puzzle de la lógica, ya que las variables suelen tener relaciones complejas que se alteran al introducir otras nuevas o cualquier pequeño cambio, algo así como los efectos secundarios al tomar un medicamento, que resuelve un problema pero crea otros nuevos. Descubrir el grafcet es encontrar la herramienta que permite introducir decisiones sin preocuparse de los molestos efectos secundarios. Hace solo unos años que este sistema pasó de ser un mero procedimiento descriptivo a ser un sistema de programación gráfico de autómatas industriales, pero no se ha introducido en la programación de propósito general. AutoJava es posiblemente el primer intento de hacerlo.
El Grafcet del siguiente ejemplo, además de explicar y recorrer paso a paso la lógica que resuelve un determinado problema, es el mismo que sirvió para crear la estructura de la aplicación. Por lo tanto tiene una doble finalidad: Facilitar la programación y servir como recurso didáctico para explicar paso a paso cómo se desarrolla un problema lógico. Tal como se indica en el texto de la aplicación, pulse donde pone "aquí" para abrir la ventana del Grafcet, ajuste su posición y tamaño para verlo en pantalla sin ocultar la aplicación y ajuste el deslizador para que los textos tengan un tamaño adecuado. El contenido puede moverlo pulsando y arrastrando con el botón izquierdo del ratón y con el botón derecho recuperará la posición original. Tambien puede cambiar el tamaño del texto para su mejor lectura (escribiendo un nuevo tamaño y pulsando ENTER). Cuando pulse el botón "Comenzar", la etapa (o casilla) que vaya teniendo el control se resaltará de color verde y el texto que tenga al lado describirá lo que está ejecutando en ese momento. Los trazos que hay entre etapas representan la condición que ha de cumplirse para que el control pase a la siguiente etapa.
Si se ha fijado en los textos, habrá visto que en la etapa 0.1 se incrementa un contador. Si una vez ejecutada esta etapa siguiera teniendo el control, el contador seguiría incrementándose tantas veces como pudiera ejecutarse la etapa mientras durase su actividad. Pero como la transición (la condición que transmite el control) es siempre VERDADERA, la etapa se ejecuta una sola vez y el contador se incrementa una sola vez. Otro detalle a tener en cuenta es que el paso de la etapa 0.4 a la etapa 0.1 se hace solo cuando se haya soltado el botón. De no hacerlo así, podría cerrarse un bucle que se repetiría muchas veces mientras el botón se mantuviera pulsado, ya que el control pasa de la etapa 0.1 a la 0.2 sin espera y seguiría encontrando el botón pulsado, por lo que pasaría de nuevo a la etapa 0.4 y así sucesivamente. Este mismo problema se encuentra en la etapa 0.5 y se ha resuelto de igual forma.
Cada etapa de un Grafcet es un bloque de programa (normalmente de poco contenido), lo que obliga a construir la aplicación dividiendo en partes la problemática que encierra y haciendo más sencilla la resolución del problema, porque es más facil solucionar pequeñas dificultades que el problema en su conjunto. En cuanto a la documentación del programa, es importante siempre que tenga que ser revisado o modificado tiempo después de haber sido creado, cuando se ha olvidado el significado de cada variable, los cálculos programados, o el proceso lógico que se aplicó. La estructura del grafcet define con claridad el proceso lógico y los comentarios que podemos poner en cada etapa y transición nos ayudarán a recordar las operaciones que se ejecutan y las variables que intervienen.
El objetivo principal por el que se desarrolló AutoJava fué la didáctica, poder mostrar conceptos sin necesidad de largas explicaciones. Imagínese el esfuerzo que supondría explicar el significado de la función que aparece en el siguiente ejemplo. Si optamos por dibujarlo gastaríamos mucho tiempo y los resultados podrían dejar mucho que desear. Si optamos por una explicación verbal, nos olvidaríamos algunos detalles, otros no serían captados por despistes o por falta de claridad y otros serían interpretados de forma equivocada. Pero una representación en tres dimensiones, que se actualiza cada vez que un parámetro cambia de valor, nos ahorra una gran cantidad de conceptos porque ya saltan a la vista y probablemente, hará más atractivo el aprendizaje. En el ejemplo, pulse sobre cualquiera de los campos para modificar el valor del parámetro, cambie la representación entre malla o superfice, y pulse y arrastre el ratón para modificar la orientación en el espacio. Si obserba que se mueve con dificultad puede ser debido a la gran cantidad de cálculos que se ejecutan (en un ordenador con casi 3 GHz se ve el movimiento con soltura).
El ejemplo anterior es propio de las matemáticas, pero otros muchos y variados campos pueden ser abordados con fines didácticos. Imagine cómo explicar mecanismos como el diferencial o la junta homocinética de un automovil, es verdaderamente dificil porque se necesita imaginar las piezas en movimiento, pero un vistazo del mecanismo en funcionamiento bastaría para comprenderlo. Con fines didácticos, AutoJava puede ayudar en casi todos los campos, aunque bien mirado, el problema fundamental es imaginar lo que se puede hacer y diseñar la estrategia para conseguirlo. A continuación puede probar las simulaciones que se han indicado y se añade un juego de minas con el que hacerse una idea sobre lo que se puede hacer con imágenes. Tenga cuidado porque cualquier pulsación sobre una casilla con mina la hará explotar.
Finalizamos esta introducción con una animación de imágenes recortadas que simulan su paso por "el otro lado" de una ventana. La animación se ha conseguido variando la posición de las imágenes, escalando en horizontal la cortina para simular que se abre y variando la posición del componente utilizado. Los cambios de imagen se han hecho en varios pasos sucesivos, de forma que cada imagen solo es visible en el paso que la corresponde y se continúa con el siguiente paso cuando la imagen alcanza su posición final.