Jose M. Fernández Contenidos: Introducción Origen Obtención e Instalación de Java Entorno de desarrollo Características Comenzar a programar en JAVA Resumen |
Java. Parte IResumen: Este es el primer artículo en una serie sobre programación con Java. La primera parte está dedicada a describir Java como lenguaje, sus características generales y la localización de las fuentes más importantes de información. IntroducciónIniciamos aquí una serie de artículos en los cuales describiremos el entorno y el lenguaje de programación Java. Como primer propósito intentare alejarme de los tópicos relacionados con este lenguaje no contare nada sobre la historia del lenguaje, sobre microondas, lavadoras, robles (sí alguien le interesa podrá leerlo en multitud de publicaciones, hasta en revistas del corazón). Tampoco mostraré a Duke (mascota de Java) que es un muñequito narigón en forma de triángulo con unas enormes manazas que apenas te descuides te saluda a ritmo de un soniquete que recuerda a viejas películas americanas de ciencia-ficción. Hay una cosa en todo esto que es cierta "Java esta de moda", no hay revista que se precie que no hable sobre esto, ni empresa de software que no presente algún producto para desarrollar applets de Java, ni página web que no contenga varias de ella. Intentaré con esta serie de artículos profundizar y en lo posible aprender (todos juntos) este lenguaje de programación que es simple en lo básico pero con una alta complejidad y difícil de dominar y además está constantemente evolucionando. Los primeros artículos irán encaminados ha realizar una descripción del lenguaje en general para posteriormente ir analizando en profundidad temas particulares como los applets, trabajos para red, JDBC, beans, etc. Haré hincapié en que Java es un lenguaje de propósito general, y no solo para realizar applets para pagina Web, aunque ésta es por lo que es conocido no nos podemos quedar en este aspecto ya que proporciona una serie de alternativas que pueden ser más interesantes aun que la propia realización de applets para la red. Este primer artículo es un poco más descriptivo que practico, en el cual veremos fundamentalmente las características del lenguaje, entorno de desarrollo y solo al final veremos algún ejemplo de un programa Java. OrigenJava fue concebido por James Gosling, Patrick Naughton, Chis Warth, Ed Frank y Mike Sherindan en Sun Microsystem Inc. en 1.991, en su primera versión que duro unos 18 meses. Entre 1.992 y 1.995 colaboraron en la madurez del prototipo inicial Bill Joy, Arthur Van Hoff, Jonathan Payne, Frank Yellia, Tim Lindolm. Como podemos observar por las fechas, Java es anterior o al menos simultaneo a la WWW (hasta el año 1.991 Tim Berners Lee no desarrolló el lenguaje HTML). A Java lo podemos considerar como un lenguaje de propósito general aunque su verdadero auge ha sido originado por su utilización en paginas Web. La sintaxis de Java es similar a la de C y las características de orientación a objetos de C++. Java en un lenguaje de programación coherente y lógicamente consistente. Debido a las similitudes con C y C++ se podría pensar que Java es una versión para Internet de C++, pero tiene importantes diferencias teóricas y practicas. Especialmente Java mejora y refina el paradigma de orientación a objetos de C++. Internet a ayudado a Java a ser un lenguaje universalmente conocido y por su lado Java a tenido un profundo efecto sobre Internet ya que amplia el universo de objetos que pueden moverse libremente por el ciberespacio (programas dinámicos auto-ejecutables). Obtención e Instalación de JavaPara poder programar en Java necesitaremos varias herramientas, siempre nos estamos refiriendo al entorne GNU/LINUX (por si alguien se despista): La implementación actual para Linux basado en ELF requiere un núcleo 1.2.13 o posterior. Utilizaremos un entorno llamado JDK (Java Development Kit). Netscape versión 2.0.14 o posterior. Un editor de texto como Xemacs (trabajaremos siempre bajo Xwindows, aunque no sea necesario en algunos casos, aunque sí para los Applets y programas con interfaces gráficos). Para bajarse el JDK se puede obtener entre otros a partir del nodo: http://www.blackdown.org/java-linux.html desde aquí elegiremos alguna réplica (mirror), para poder realizar la descarga más rápidamente. Hace algunos meses la última versión era la JDK-1.1.3 (con la que realizaré los ejemplos), pero en mi última visita vi la versión 1.1.9, pero "atención" si nos lo bajamos todo son alrededor de 24 Mb., aunque lo estrictamente necesario es aproximadamente 12 Mb (paciencia). Una vez descomprimido con gunzip y tar no hay ningún problema para empezar a trabajar. Lo normal será instalarlo en el directorio /usr/local con lo que se nos creará el directorio /JDK1.1.3 y dentro de este a su vez nos encontraremos con varios directorios: /doc: Documentación oficial en formato HTML /demo: Programas de demostración Java /lib: Librerías /bin: Se encuentran las herramientas propias del JDK. Dentro del directorio /lib encontraremos el fichero "classes.zip" (no descomprimir este fichero), que contiene todas las clases compiladas que se pueden utilizar por el JDK. Dentro del directorio raíz encontramos el fichero "src.zip", este contiene todos los ficheros fuentes incluidos en classes.zip. No se pueden compilar y es suministrado por motivos de información. Entorno de desarrollocomo hemos dicho anteriormente están incluidas en el directorio /bin: javac: compilador de java, compila programas fuentes en lenguaje java a bytecodes. Java: interprete java. Ejecuta bytecodes Java. jre : similar al interprete java (java), pero pensado para usuarios finales los cuales no requieren todas las opciones disponibles. appletviewer: testea y ejecuta applets. jdb: depurador. javap: desensamblador de ficheros compilados en Java. javadoc: generador de documentación, produce un conjunto de paginas HTML describiendo las clases publicas y protegidas, interfaces, constructores, métodos y campos. También produce una jerarquía de clases y un índice de todos sus miembros. javah: para añadir métodos nativos (en lenguaje C) a programas Java. jar: archiva clases y fuentes java en un archivo Jar. javakey: mantenimiento de firmas digitales. updateAWT: actualiza los nombres que han cambiado en los métodos de AWT1.02 en una aplicación. Para poder trabajar sin problemas de directorios, añadiremos el directorio /usr/local/JDK1.1.3/bin a la variable de entorno PATH del usuario que queramos. Si deseamos que este fijada para todos los usuarios, incorporar el directorio a la variable PATH que se fija en el fichero /etc/profile. CaracterísticasAntes de seguir, habría que preguntarse ¿qué es Java?, y como respuesta podemos tener (como en el manual del JDK indica) que son dos cosas, por un lado un lenguaje de programación y por otro una plataforma. Como lenguaje de programación Java es un lenguaje de alto nivel con las siguientes características (más adelante las veremos en detalle):
Lo primero que salta a la vista es que Java es interpretado, aunque requiere una compilación previa, generando un código objeto en bytecodes, que es de muy bajo nivel, este código puede ser interpretado en distintas plataformas. Los bytecodes Java posibilita "escribe una vez, ejecuta siempre". Podemos compilar programas en una plataforma con un compilador Java y los bytecodes generados pueden ser ejecutados en cualquier arquitectura que posea una implementación de la maquina virtual java (JVM). Por ejemplo un programa Java puede ser compilado en una plataforma con Windows NT y ejecutarse sin ningún problema (por lo menos así lo dice la teoría) en un Sun Ultra Solaris. Una plataforma podría ser el ambiente hardware o software en el cual un programa es ejecutado. La plataforma Java difiere de otras plataformas en que esta es solo software y se ejecuta sobre otra plataforma hardware. La plataforma Java tiene dos componentes:
JVM es un ordenador abstracto en el cual se pueden ejecutar programas Java compilados. Fue diseñada para ser sencilla y pequeña porque se pretendía que estuviese presente en todos los sitios donde fuese posible. Esta simplicidad ha hecho que rápidamente se extendiera a todas las arquitecturas existentes, logrando una capa software común a todas ellas, por lo que en redes de ordenadores heterogéneos (como lo es Internet) la potabilidad se logra gracias a Java. Como podemos imaginar esta es posiblemente una de las razones del auge imparable de esta tecnología. La maquina virtual no la debemos entender como una capa software sobre un procesador sino como su nombre indica pretender se un ordenador y poco a poco van apareciendo Chips Java que darán apoyo a maquinas reales Java, tarjetas de crédito, decodificadores de TV digital, etc. Las API es una gran colección de componentes software que proveen al lenguaje de muchas utilidades, tales como interfaces gráficas del usuario (GUI). Están agrupadas en librerías (en terminología Java paquetes). Gracias a estos paquetes podemos escribir en Java muchos tipos de programas distintos, además de las conocidas Applets para Web, podemos diseñar, por ejemplo servidores Web, proxis, servidores de correos, servidores Irc, y prácticamente lo que podamos imaginar tanto en relación con Iternet como no. Las APIs agrupadas en paquetes las podemos clasificar como:
Además de este núcleo básico de API, podemos disponer de extensiones para 3D, telefonía, animación, etc. Como vimos al principio de este apartado, Java tenia una serie de características que veremos en detalle:
Después de esta parrafada (no es más que lo oficial de Java) habrá que (otra vez) preguntarse por Java en el mundo GNU/Linux. Anteriormente hablamos de un JDK para Linux, esto no es más que una implementación comercial de la original desarrollada por Sun Microsystem (aunque de libre disposición). Existen herramientas como el compilador GUAVAC (http://HTTP.CS.Berkeley.EDU/~engberg/guavac) bajo licencia GPL, con el que se puede compilar cualquier fuente Java sin ningún tipo de problemas. Destacaremos asimismo una maquina virtual llamada KAFFE (http://www.kaffe.org) , bajo licencia Berkeley. Estos dos proyectos están bastante avanzados aunque todavía necesitan las librerías de clases de Java de Sun (de libre disposición de momento) para tener un sistema de desarrollo completo. Existen también proyectos en fases iniciales para crear entornos de desarrollo rápidos y visuales de aplicaciones Java. Hay un gran movimiento en la red alrededor de la tecnología Java y GNU, con el objetivo de desarrollar herramientas completas, de libre distribución e independientes de Sun. Con lo que podemos hacernos una idea de la importancia de Java, y cuando la moda pase seguro que algo quedará (bastante diría yo). Comenzar a programar en JAVAUna vez vistos todas las características generales de lenguaje, veremos un programa real. Como dije en la introducción de este articulo quisiera apartarme lo más posibles de tópicos, es decir no haremos el primer programa saludando al mundo, en lugar de esto veremos en nuestra pantalla un cuadro de las dimensiones que queramos (un poco más complicado pero sin pasarse): class Cuadro { public static void main (String args[]) { int l ,a; if (args.length == 2) { l = Integer.valueOf(args[0]).intValue(); a = Integer.valueOf(args[1]).intValue(); } else { l= 20; a= 15; } for (int i=l; i>0; i--){ System.out.print("*"); } System.out.print("\n"); for (int i= a-2; i>0; i--){ System.out.print("*"); for(int j=l-2; j>0; j--) { System.out.print(" "); } System.out.print("*\n"); } for (int i=l; i>0; i--){ System.out.print("*"); } System.out.print("\n"); } } La primera cosa a tener en cuenta es que el nombre que le damos al archivo fuente es muy importante, ya que este se define como una "unidad de compilación". Puede ser un archivo que contiene una o más definiciones de clase. El compilador espera que estos archivos tengan la extensión ".Java" (4 caracteres) por lo que algunos sistemas como DOS o Windows 3.1 no lo soportan. Como vemos en el ejemplo el nombre de la clase definida también coincide con el nombre del archivo fuente y no es por casualidad, en Java, todo el código tiene que estar dentro de una clase. Por convenio, el nombre de la clase tiene que coincidir con el nombre del archivo que contiene el programa. Además Java es sensible al contesto (diferencia las mayúsculas de las minúsculas). Para compilar el ejemplo, desde la línea de comando escribiremos: > javac cuadro.javaEl compilador Java (si todo ha ido bien) creará un archivo cuadro.class que contiene, naturalmente, el código binario (bytecode) y este podrá ser ejecutado por el interprete: > java cuadroCuando compilamos código fuente de Java, cada clase individualmente es colocada en un archivo que tiene el mismo nombre que la clase. Esta es la razón por lo cual es buena practica llamar a los archivos fuentes de la misma forma que a la clase que contiene ya que así el nombre del archivo fuente coincidirá con el nombre del archivo.class. Aunque nuestro ejemplo cuadro.java es bastante simple nos ayudará a comprender los elementos fundamentales de un programa Java y sobre todo la estructura de un programa. Lo primero a tener en cuenta es que este ejemplo no es un applet para incluir en una pagina HTML sino un programa independiente que se ejecuta con el interprete desde la línea de comandos. La primera línea del programa es: class cuadro { En esta línea se emplea la palabra reservada class para declarar que se va a definir una nueva clase, "cuadro" es el identificador del nombre de la clase. La definición de la clase completa incluyendo todos sus miembros están entre dos llaves ({}), las más generales. Notar que en Java toda la actividad de un programa ocurre dentro de la clase. En la siguiente línea: public static void main (String args[]) { Lo primero que podemos destacar es el método main(). Todas las aplicaciones Java comienzan su ejecución llamado a este método (como en C/C++). A continuación comentaremos algunos conceptos que posteriormente (en otros artículos) detallaremos aunque lo haremos de pasada solo para comprender el ejemplo. La palabra clave public permite controlar la visibilidad de las clases miembro. Cuando una clase se declara como public, ésta puede ser utilizada por código definido fuera de su clase. static permite que el método main() sea llamado sin necesidad de instanciar la clase. void indica que no devuelve ningún valor. Para enviar información a un método se realiza por variables especificadas entre los paréntesis que siguen al nombre del método, en nuestro caso declaramos un parámetro llamado arg que es una matriz de instancias de la clase String. Naturalmente todo el código del método esta también entre llaves. En la línea: int l, a ; como todo programa que se precie declaramos dos variables de tipo entero. En Java cada variable hay que declararla previamente. Como podemos observar cada instrucción se termina en ";" . El resto de las líneas articulan un pequeño algoritmo en el cual:
Una practica que podíamos hacer con este pequeño ejemplo, aparte de compilarlo y ejecutarlo, es comprobar que es de arquitectura neutral ya que si el programa compilado cuadro.class lo ejecutamos bajo Windows 95 (sin que sirva de precedente) comprobaremos que se comporta de la misma forma que bajo Linux. ResumenHemos relatado los aspectos generales del lenguaje de programación Java. No hemos hecho nada más que empezar y nos queda un largo camino de dos artículos más para realizar una descripción completa (y no muy amplia) de este lenguaje. El siguiente articulo veremos entre otros: la definición y tipos de variables, instrucciones básicas, clases, etc. En fin la mayor parte de las especificaciones del lenguaje. Daré en cada artículo las referencias, publicaciones y direcciones en las que he basado en mucho o en poco esta serie de artículos. |
Texto original en Castellano
Páginas web mantenidas por Miguel Ángel Sepúlveda © Jose M. Fernandez 1998 LinuxFocus 1998 |