Observaciones

Ejercicios adicionales

Java como primer lenguaje de programación

Yo recomiendo usar Java como primer lenguaje de programación. Sin embargo, no creo razonable enseñar desde un comienzo conceptos avanzados como la descomposición de los problemas en clases múltiples o encapsulamiento de clases.

Yo prefiero partir con un enfoque más tradicional introduciendo conceptos como tipos de datos primitivos, variables, instrucciones, procedimientos e incluso variables globales, como si Java fuese un lenguaje procedural.

El problema es que Java posee asperezas que complican la enseñanza bajo este enfoque. Por ejemplo:

Para eliminar estos inconvenientes, he desarrollado la clase Run que permite simular que un programa en Java es procedural: un archivo corresponde a una secuencia de definiciones de procedimientos entremezclados con variables globales. Es necesario todavía definir una clase, pero esto podría enseñarse en una primera etapa como receta.

La idea básica es que el programa se escriba usando la siguiente plantilla:

   class Nombre-Archivo extends Application {
     ... variables globales ...

     void main() { // también puede ser: void main(String[] args)
       ... éste es el procedimiento de partida ...
     }

     ... procedimientos varios... 
   }
Examine el programa Fib.java para ver el esquema funcionando. Ejecute el programa mediante:

  java Run Fib 20
El comando carga primero la clase Run que recibe como primer argumento el nombre de la clase que se desea ejecutar, seguido de los argumentos para Fib. Run carga dinámicamente la clase Fib entregando mensajes en castellano en caso de errores que impliquen no poder ejecutar el programa.

En realidad las variables globales son variables de instancia de la clase definida, pero esto no es necesario contárselo a los alumnos en una primera etapa. Es la clase Run la que se encarga de crear una instancia de la clase definida para que no sea necesario declarar el main y los demás procedimientos como static.

Observe que dentro de Fib se usó println, string2int y exit sin especificar ninguna clase u objeto porque tales procedimientos fueron heredados de Application. En esta clase se pueden agregar todos los procedimientos que uno desee que se invoquen directamente sin tener que especificar un objeto o una clase.