Tutoriales Varios
Comenzando a programar en Java
¿Qué es Java?
Java es un lenguaje de programación de alto nivel de propósito general, multiplataforma, semicompilado, orientado a objetos y multihilo.
¿Qué quiere decir multiplataforma y semicompilado?
Un programa es un conjunto de órdenes que ejecuta un procesador; estas órdenes dependen de cada procesador, por tanto un programa hecho para un procesador no será entendido por otro procesador; del mismo modo un programa hecho para un Sistema Operativo no se ejecutará en una máquina con otro Sistema Operativo ya que los programas a menudo hacen llamadas al Sistema Operativo para, por ejemplo saber los archivos de un directorio, realizar una conexión TCP/IP, utilizar la pantalla, … Java es independiente de la máquina y del Sistema Operativo lo que permite ejecutar un programa hecho en Java en, por ejemplo, un ordenador con Linux o Windows, en un PDA, en un teléfono móvil, …
Para conseguir esto el código fuente se compila a un lenguaje que no es específico de la plataforma, sino que es un código intermedio denominado «bytecode». Este código no es ejecutado directamente, ya que no es comprendido por la máquina, sino que es interpretado por un programa denominado Máquina Virtual o más específicamente JVM (Máquina Virtual de Java). La JVM es específica de la plataforma. De esta forma para ejecutar un programa Java sólo necesitamos la máquina virtual de la plataforma que estemos usando. Así por ejemplo existen máquinas virtuales para Sistemas Operativos Windows, Linux, Apple y Solaris. Seguramente en tu ordenador tendrás instalada una máquina virtual y ni si quiera te has dado cuenta: la mayor parte de los navegadores o browsers web tienen una instalada para poder visualizar los applets, que son pequeñas aplicaciones Java que se incrustan en las páginas web.
La WWW (World Wide Web) es una inmensa red de ordenadores de todo tipo y dado que Java es un lenguaje multiplataforma se hace ideal para superar los problemas de incompatibilidad.
Un lenguaje interprteado es siempre lento, pero las actuales JVM utilizan un JIT (Just in Time). El JIT se encarga de compilar el código aún más para reducirlo, reduciendo también de este modo el tiempo de ejecución. Estos JIT en determinadas ocasiones pueden hacer que el código no sea correctamente ejecutado. Si quieres ver tus applets tal cual los has programado puedes usar el browser que proporciona Sun Microsystems: Hot Java.
¿Qué quiere decir de propósito general?
Es un lenguaje de propósito general ya que con él se pueden hacer multitud de cosas: crear tanto programas simples de consola hasta grandes programas en entorno gráfico, hacer los bonitos applets que lucen en las páginas web, los servlets (programas cliente-servidor más potentes que los clásicos CGI), las JSP (Java Server Pages, similares a las páginas PHP o ASP), los sockets (programas para redes de ordenadores)…
¿Qué quiere decir orientado a objetos?
Algunos lo califican de lenguaje de objetos ya que no es un lenguaje adaptado como C++ que desciende de C, sino es un lenguaje que desde el principio ha sido de objetos: (casi) todo en él son objetos. Anteriormente al crear programas grandes en C éstos se hacían inmanejables ya que unas líneas de código afectaban al resultado de otras y era muy difícil su actualización y posterior reutilizacón del código. Cuando nació C++, para crear una ventana bastaba una línea de código en la que se expecifica el tamaño, el texto de título, etc.., en cambio en C eran necesarias 5 páginas de código. Lo que se hace en la orientación de objetos es meter todas esas líneas de código en un archivo aparte y nos olvidamos de él. Posteriormente podremos reutilizar ese código vínculándolo a nuestro programa, e incluso crear un tipo de ventanas nuevas por medio de la herencia, así podremos hacer ventanas que no puedan ser redimensionadas, como los cuadros de diálogo. De esta forma los programas son más estructurados y reutilizables. Pero, ¿qué es un objeto?
Básicamente un objeto es un conjunto de variables y funciones interrelacinados. En un objeto las variables que guardan los valores de sus características se llaman propiedades y las funciones se llaman métodos. Los lenguajes orientados a objetos son más fáciles de programar ya que se acercan más a nuestra forma de pensar, así si creamos un objeto ‘vehículo terrestre’, una de sus propiedades sería su color, su número de ruedas, su velocidad,… Y un método sería acelerar, frenar, que cambiarían las propiedades del objeto: en estos dos casos la velocidad. Además gracias a la ‘herencia’ podríamos crear un nuevo tipo de vehículos que podríamos clasificar en coches, camiones, motos,… que poseerían las mismas propiedades y los mismos métodos que un ‘vehículo terrestre’ más algunos característicos de ese tipo de ‘vehículo terrestre’, como por ejemplo un método ‘descargar’ en el caso de los camiones, y un número de ruedas diferentes. La orientación a objetos y la máquina virtual de Java
Gracias a la orientación a objetos y la máquina virtual de Java es posible descargar un programa de la red en pocos segundos ya que los programas que creamos, en general, se basan todos ellos en las clases que incorpora la máquina virtual de Java (algo así como los archivos de librerías). Es decir, todos los archivos necesarios para que el programa funcione ya los incorpora la máquina de destino, los posee la JVM. De esta forma los programas en Java son robustos y potentes.
La seguridad en Java
Puede suponer que un applet es un programa que se incluye en una página web, y un virus también es un programa, y por tanto Java pueda ser el lenguaje perfecto para los creadores de virus. Pues no, una de las características principales de Java es su seguridad. Cierto que se pueden incluir programas en una página web y que un virus es un programa, pero la JVM le informará cuando el programa intente hacer algo dudoso, como puede ser la utilización de archivos de nuestro disco duro.
Breve historia de Java
Java nació como iniciativa de Sun de crear un lenguaje para electrodomésticos. Para ello tenía que crear un lenguaje independiente de la plataforma, ya que el chip de una calculadora no es el mismo que el de un televisor, por ejemplo. Este se llamó OAK, pero la idea no resultó y casi cuando se iba a rechazar el proyecto un programador tuvo la brillante idea de crear un navegador web que soportara incrustar aplicaciones Java denominadas applets. Desde el primer momento se puede apreciar la capacidad de este lenguaje: el navegador estaba hecho en Java. Sun Microsystems le cambió el nombre porque «OAK» ya estaba registrado y eligió Java, que es como se llamaba el Café en el que se reunían los progrmadores de esta empresa. La idea de incrustar pequeñas aplicaciones en las páginas webs tuvo una tremenda aceptación, lo que impulsó y popularizó a este lenguaje. Hay que tener en cuenta que aunque Java debe su popularidad a Internet y está enormemente vinculado a ella, la WWW no es su único lugar ni su única capacidad, ni mucho menos.
¿Cómo empiezo a programar en Java?
Es imprescindible bajarse un compilador. Recomiendo el Java 2 Standard Development Kit de Sun Microsystems, disponible para Windows, Linux y Solaris. Contiene lo necesario para empezar a programar en Java y es gratis, aunque la licendia impide su redistribución. Contiene un compilador, un visualizador de Applets, un debugger, un decompilador,… hasta 15 programas. Todos los programas que incorpora se deben ejecutar en la consola ya que no tienen interfaz gráfica, lo que resulta un tanto engorroso, y no contiene un editor, por tanto deberéis escribir vuestros proyectos con un editor de texto convencional, como por ejemplo el Bloc de Notas, aunque tambi&eeacute;n existen programas que resaltan con colores las palabras reservadas del lenguaje, los comentarios,… que hacen un poco más agradable la tarea de programar. Aunque la programación sin un entorno de desarrollo que nos permita hacer muchas cosas con unos simples clicks de ratón es muy pesada, es como realmente se aprende.
Actualmente se distribuye el J2SDK junto con el JRE y se van añadiendo API’s que antes se distribuían por separado. El JRE es también un conjunto de aplicaciones, en este caso estas aplicaciones son exclusivamente para ejecutar los programas. El JRE está destinado al usuario final de la aplicación. La licencia permite su redistribució así es una buena idea empaquetarlo junto con nuestras aplicaciones.
Para aquellos que vayan a programar en Windows Me se preguntarán ¿cómo voy a programar si necesito MS-DOS? La respuesta es fácil. Windows Me sigue teniendo MS-DOS pero está «oculto». Para ejecutar comandos deberemos crear un archivo de texto normal (con el Bloc de Notas por ejemplo) escribir los comandos a ejecutar y guardarlo con extensión «.bat». Para editar estos archivos basta con hacer click derecho y elegir en el menú contextual la opción «Edición».
Nociones básicas
Prepararse para usar el JDK
Lo primero que debemos hacer, claro está es descargarse el Java 2 Standard Development Kit desde la página de Sun. Es opcional pero tremendamente recomendado bajarse la documentación que está en Inglés. En él se incluye también un archivo de texto: README que recopila la información de instalación y uso, y que está en inglés. Posteriormente procederemos a instalarlo; este proceso es sencillo, basta con indicar lo que se quiere instalar y dónde. Para incluir la documentación (opcinal), una vez la hallamos descargado, se deberá extraer la carpeta ‘docs’ y pegarla en el directorio donde se instaló el J2SDK. ¿Qué es el path y el classpath? Este paso es opcional pero muy útil. Para una cómoda utilización de los programas del kit se puede cambiar la variable de entorno ‘path’ y otra variable: el ‘classpath’. La primera de ellas contiene la ruta de acceso de los programas que con más frecuencia uses, de modo que para ejecutar un programa bastará con escribir su nombre y Windows lo buscará, de este modo nos ahorramos tener que escribir toda la ruta de directorios hasta llegar a &eeacute;l. La segunda indica al JDK dónde debe buscar los archivos a compilar o ejecutar, sin tener que escribir en cada ejecución la ruta completa. Así se ejecutaría el compilador de java sin haber cambiado las variables, en MS-Dos y con el JDK instalado en el directorio C:jdk1.3 y la clase a compilar de nombre ‘miclase.java’ en C:proyectosJava: C:>C:jdk1.3binjavac C:proyectosJavamiclase.java Así se escribiría si se cambian adecuadamente las variables: C:>javac miclase.java Es decir, no sería necesario incluir la ruta de acceso del programa ni del archivo a compilar. Cambiar el path Para saber que valores contiene la variable path escribiremos lo siguiente: C:>path Y se listarán los valores que actualmente posee separados por ‘;’. Normalmente serán: ‘C:Windows’ y ‘C:WindowsCOMMAND’. Para añadirle el directorio que contiene los programas del JDK (‘C:jdk1.3bin’ por defecto) lo más cómodo y sencillo es editar con un procesador de textos (por ejemplo el Bloc de Notas o el WordPad) el archivo ‘C:Autoexec.bat’. En él aparecerán los valores anteriores separados por ‘;’. Bastará con añadir el nuestro (‘C:jdk1.3bin’) separado por un ‘;’, y guardarlo. Es recomendable poner nuestro directorio al principio en lugar de añadirlo al final, ya que si queremos ejecutar el programa javaw.exe del JDK el intérprete de comandos buscará el programa en los directorios definidos en la variable de entorno PATH y encontrará un programa de mismo nombre en el directorio C:Windows que no es el que nosotros queremos ejecutar. Para terminar habrá que reiniciar el ordenador. Con esto lo que conseguimos es definir la variable path cada vez que se ejecuta el archivo Autoexec.bat, es decir cada vez que se inicia Windows. Cambiar el classpath Para saber qué valores contiene el CLASSPATH (no contiene ninguno por defecto) bastará con teclear C:>set y aparecerá la lista de variables de entorno con sus correspondientes valores. Si no aparece la variable CLASSPATH quiere decir que ésta no contiene ningún valor. Entre ellas se encuentra también la variable de entorno path. Para asignarle un valor teclearemos lo siguiente en una ventana de MS-DOS: C:>set CLASSPATH=C:MisClasesDeJava Siendo MisClasesDeJava el directorio donde tenemos nuestras clases de Java. Para introducir varios directorios los separaremos por punto y coma: C:>set CLASSPATH=C:MisClasesDeJava;C:MisOtrasClasesDeJava Finalmente si la variable CLASSPATH ya contiene valores y queremos añadir más tendremos que hacerlo del siguiente modo: C:>set CLASSPATH=C:MisClasesDeJava;%CLASSPATH% Otra cosa a tener en cuenta es que normalmente desearemos apuntar a una clase que se encuentra en el mismo directorio; si en la variable classpath no está incluido específicamente ese directorio el programa no la encontrará aunque como se ha dicho el archivo esté en el mismo directorio. Esto se puede remediar incluyendo el directorio acutal de forma relativa, es decir el intérprete de comandos, tanto en MS-DOS como en Unix, utiliza «.» como forma de apuntar al directorio actual así como «..» para indicar el directorio inmediatamente superior. (Así con el comando «cd» cambiamos de directorio, y al hacer cd .. cambiamos al directorio superior). La forma de cambiar la variable CLASSPATH con los valores que ya contiene, el directorio actual y el directorio C:MisClasesDeJava sería así: C:>set CLASSPATH=.;C:MisClasesDeJava;%CLASSPATH% Si queremos definir la variable CLASSPATH cada vez que iniciemos Windows basta con añadir el comando set, con los valores adecuados como se ha visto, al archivo C:Autoexec.bat como se indicaba con la variable PATH.El primer proyecto El código fuente se debe escribir en un archivo de texto plano, es decir sin formato, para lo que recomiendo usar el Bloc de Notas o WordPad en caso de Windows. Éste debe ser guardado en un archivo, de nombre el de la clase que estemos creando, y de extensión ‘.java’. Habrá que tener en cuenta al escribir el código que Java es sensible a las mayúsculas y minúsculas, lo que quiere decir que ‘Hola’ no es lo mismo que ‘hola’. Al escribir código es muy conveniente comentarlo, sobre todo si vamos a compartirlo con otros desarrolladores o para futuras actualizaciones. Comentar y documentar el código En Java existen tres tipos de comentarios: los que soportan sus antecesores C y C++ y uno muy importante y novedoso: el cometario de documentación. «//» Es el comentario de C. Indica que todo lo que viene a continuación de la línea es un comentario. «/*» y «*/» Es el comentario de C++. Indica que todo lo comprendido entre estos dos signos es un comentario. Puede ser multilínea, no así el anterior. Aquí hay un ejemplo en el que se usan estos dos tipos de comentarios: // este es un comentario de C. El compilador omitirá lo que aparezca a su derecha /*este es un comentario de varias líneas de esta forma omitirá también esta línea y esta*/ Se pueden usar combinaciones de comentarios, pero no se admiten comentarios anidados como este: //Esta línea será omitida por el compilador así que saltará directamente a la siguiente. /*Así que esta cabecera de comentario no la verá y se creerá que esta línea es código y esta también*/ Existe un tipo de comentario muy, muy útil que es introducido por Java: se trata del comentrio de documentación que usa el programa javadoc para crear documentación en formato HTML. De esta forma podremos documentar elegante y rápidamente nuestras clases. Un comentario de documentación comienza con «/**» y termina con «*/» y cada línea debe comenzar con «*». En un comentario de este tipo podremos insertar etiquetas HTML aunque esto no sea necesario, ya que el programa javadoc crea documentos muy vistosos. Para indicarle al programa sobre qué estamos escribiendo existen las «etiquetas de documentación» que son básicamente las siguientes:
Ejemplo de comentario de documentación: /** *@version Version 1.0 de mi primera clase *@author Yo pr supuesto *<a href=»mailto:yo@micompania.com»>Mi e-mail</a> *(…) */ Visualizar applets Para ejecutar un applet debemos crear una página web en la que poder visualizarlo. La etiqueta para introducir un applet es la siguiente: (las etiquetas entre corchetes pueden ser omitidas) <applet [propiedades]> [parametros] [Texto que se visualizara en caso de que el browser no soporte los applets] </applet> Dónde propiedades son:
Las propiedades realmente importantes son: code, height y width. Las demás pueden ser omitidas. codebase es realmente importante pero si el archivo está en el mismo directorio se omite. Los parámetros son valores que se pasan al applet y tienen la siguiente sintáxis: <param name=»nombre_del_valor» value=»valor_del_parametro»> Existe un truco al visualizar los applets. Sería muy costoso crear una página web para cada applet y poder así verlos en el navegador o en el appletviewer, así que incluiremos en el archivo de código (.java) las etiquetas HTML pero dentro de un comentario, de este modo el comilador las ignorará pero el appletviewer podrá encontrarlas. Este sería un ejemplo: Este sería el código del archivo miclase.java: import java.awt.*; import java.awt.applet.*; … /* <applet code=»miclase.class» width=»300″ height=»300″> </applet> */ public class miclase extends Applet … { … } Este sería el comando a ejecutar en la ventana de MS-DOS: C:>appletviewer miclase.java |