jueves, 9 de abril de 2009

Java desde Cero


Autor Original (creo): juancho77

CONTENIDOS DEL CURSO

Abarca la instalación del compilador (JDK), la instalación de un IDE (Bluej) sencillo, potente e intuitivo, una breve introducción a la programación orientada a objetos y los factores principales de java: variables, variables de clase, herencia, polimorfismo, etc, etc, etc. Finaliza con algo de interfaces gráficas.

Capitulo 1
  • Instalación de Java en nuestro ordenador
  • Instalación de un IDE para desarrollar nuestros programas. (BlueJ)
  • Conociendo BlueJ

Capitulo 2
  • Introducción a la programación orientada a objetos
  • Introducción al lenguaje de programación Java
  • Expresiones, sintaxis, desarrollo de codigo Java



Capitulo 1: Introducción e Instalación de Java en nuestro ordenador.


Ante de todo, lee esto :

El lenguaje Java se creó con cinco objetivos principales:

  1. Debería usar la metodología de la programación orientada a objetos.
  2. Debería permitir la ejecución de un mismo programa en múltiples sistemas operativos.
  3. Debería incluir por defecto soporte para trabajo en red.
  4. Debería diseñarse para ejecutar código en sistemas remotos de forma segura.
  5. Debería ser fácil de usar y tomar lo mejor de otros lenguajes orientados a objetos, como C++.

Para conseguir la ejecución de código remoto y el soporte de red, los programadores de Java a veces recurren a extensiones como CORBA (Common Object Request Broker Architecture), Internet Communications Engine o OSGi respectivamente.

Para lograr ser portable, Java incorpora su propio Bytecode. El bytecode Java es un código intermedio entre el lenguaje de maquina y el lenguaje fuente. Se podría incluso decir que esta semicompilado. De esta forma, como el bytecode es único para cualquier sistema, se dice que el bytecode es universal, y que la portabilidad esta garantizada. Sin embargo, el bytecode debe ser interpretado cada vez que se ejecuta para que la maquina lo entienda: de esto se encarga la Maquina Virtual de Java (JVM por sus siglas en inglés). La JVM "traduce" el bytecode cada vez que se lo requiere en ejecución, es decir, en tiempo real. Es por esto que muchas veces los programas desarrollados en este lenguaje resultan un tanto mas lentos que otros.

Existen diferentes versiones de la JVM, para distintos tipos de "audiencias". Es muy posible que ya tengas en el ordenador alguna versión de Java dado que hoy en día muchisimos sitios incorporan programas Java embebidos y para ejecutarlos requieren, precisamente, la JVM instalada. La versión más básica y corriente es el JRE (Java Runtime Environment), que en la actualidad se encuentra en su versión... bueno, ya no se sabe qué versión es, dado que Sun distribuye el JRE en un paquete: el J2SE, que en la actualidad se encuentra en su versión 1.4.2. Existen otros tipos de paquetes (o API's), que no trataremos aquí, pero que vale mencionar: J2ME (para celulares) y J2EE (para empresas).

Sin embargo, si ademas de querer ver y reproducir contenido Java deseas desarrollar tus propias aplicaciones es necesario descargar un paquete mas completo que incluya ademas el JDK (Java Development Kit). Este paquete incluye librerias, documentación y fundalmente, el compilador.

Una de las versiones, la que NO debemos descargar, dirá mas o menos: "Java SE Runtime Environment (JRE)". La que SI Smiley debemos descargar dirá mas o menos: "Java SE Development Kit (JDK)". Una vez ubicado nuestro archivo, lo descargamos. El link hasta el dia de la fecha (25/01/2009) es ESTE.
Lo siguiente es elegir el sistema operativo que estamos corriendo: en este tutorial abarcaré solo Linux y Windows por ser los mas populares.

INSTALANDO JAVA JDK EN UNA PLATAFORMA LINUX.

Lamentablemente, o afortunadamente, si estamos, por ejemplo, corriendo Slackware, la única solución es descargar el fichero .bin o rpm e instalarlo en el ordenador.
En la web explican como instalar ambos tipos de ficheros, pero el ejemplo es para JRE. Como se imaginarán, el JDK es exactamente igual, salvo que deberán cambiar el nombre del fichero.
Para que sea mas claro, la parte tachada debe ser cambiada por el nombre de nuestro fichero

sudo aptitude install jre-6u13-linux-i586-p
xD creo que es asi sino pues no se compliquen y vayan a la pagina de SUN y se lo descargan el .bin

INSTALANDO JAVA JDK EN UNA PLATAFORMA WINDOWS.

Como siempre, doble click al ejecutable, siguiente, acepto, siguiente... la instalación en Windows es bien sencilla. En algunos ordenadores es necesario declarar las variables de sistema. Esto hará que el compilador sea accesible para todo el sistema.
Notar que si instalamos solo el JRE, cuando escribimos "java" en la consola veremos una serie de opciones, pero si queremos acceder al "javac" (java Compiler) sucede que "no se reconoce como un comando por lotes...".
--------------------------------------------------------------------------------------------------

A partir de este momento, el compilador de Java ya se encuentra instalado en el equipo, junto con las librerias, la documentación, las clases, y todo lo necesario para crear, compilar y ejecutar contenido Java. Sin embargo, resulta dificil y rebuscado programar usando la consola, por lo que el siguiente paso sera obtener un IDE (Integrated Development Environment) que nos facilite la tarea.
En el curso utilizaremos BlueJ, un entorno desarrollado por universidades destinado a estudiantes y "beginners" en el lenguaje, que nos permitirá manejar clases y objetos de forma sencilla e intuitiva. Ademas propone un acercamiento interesante al diagramado UML aplicando herencia y relaciones. Para descargarlo, visitaremos su website y en la barra de menu seleccionaremos DOWNLOAD.

La instalación de BlueJ es muy sencilla. Tan solo nos solicitará qué versión de Java queremos usar con Bluej (que versión del compilador). Si en vez del JDK instalamos el JRE, el cuadro de selección aparecerá vacío ya que no encontrará ningun compilador disponible. Ahora todo se ve mas claro verdad?
Bajo Linux la instalación tambien es sencilla. Solo hay que aclarar que, al dia de la publicación, la versión GNU del interprete Java no es soportada por BlueJ.
Para instalarlo, debemos ejecutar el siguiente comando para desempaquetar el jar.

en la carpeta donde se encuentra el archivo de instalación de bluej
ruta donde se instalo el jdk -jar nombre del archivo de instalacion de bluej.jar

Nota: si estamos usando alguna versión de Ubuntu, o Slack, o Debian, etc, es recomendable desactivar los efectos especiales del escritorio en caso de sufrir alguna anomalía con el instalador.
Finalmente, para ejecutar BlueJ en Linux hay que activar un script que se encuentra en la carpeta de instalación que hayamos seleccionado. Se ejecuta así:

./bluej # bluej es el nombre del archivo.

USANDO BLUEJ

Una vez instalado Bluej, lo ejecutamos. La pantalla inicial que veremos será algo así en Windows:

http://www.freeimagehosting.net/uploads/075e26a61a.jpg

Bluej trabaja con proyectos. Un proyecto es una colección de clases, documentos de ayuda, librerias, etc. Por eso, para comenzar a trabajar y escribir código tendremos que dirigirnos al menu Project -> New Project. Hecho esto, una pantalla nos obligará a elegir una ubicación para el proyecto y un nombre para guardarlo. Un proyecto de Bluej se verá como una carpeta tradicional en el Explorador de Windows, con sus respectivos archivos adentro. Sin embargo, BlueJ es capaz de detectar carpetas que contienen proyectos y las marca con otro color. Luego, veremos lo siguiente:

http://www.freeimagehosting.net/uploads/1fcebe1f4a.jpg

El programa ahora luce con las opciones de izquierda habilitadas, el mapa de trabajo se torna de otro color y aparece una "hoja" en el campo de trabajo. La hoja representa lo que en realidad es un archivo de texto en el proyecto. No se puede eliminar, y en ella es donde escribiremos todos los datos relativos al Autor, especificaciones de uso, como compilar, etc. Puedes abrirla y editarla haciendo doble click en ella. Si vas a la carpeta donde guardaste el proyecto veras que existe un archivo .txt que contiene lo que hayas escrito anteriormente.
Todos los codigos Java se escriben en Clases. Por ahora no explicaremos que son, solamente las mencionaremos para que podamos seguir viendo mas sobre BlueJ. Si estas ansioso, puedes visitar ESTE link. Para crear una clase, debemos usar el boton correspondiente en el panel de opciones izquierdo: aquel rotulado "New Class". Luego debemos escribir un nombre para nuestra clase y seleccionar el tipo de clase que crearemos. Hecho esto, BlueJ mostrará un rectangulo anaranjado que representará a la clase en el proyecto. En el explorador de Windows, una clase se verá como un archivo de la forma:

nombre_de_la_clase.class

en la carpeta del proyecto.
Para editar una clase, debemos hacer un doble-click en el icono que la representa. El editor de clases de BlueJ no es mas que un editor de notas común (como notepad), con ciertas funciones basicas de un compilador: compilar , debuggear, insertar funciones, insertar comentarios, etc. El contenido default de una clase esta indicado en el archivo:

ruta_de_la_carpeta_de_instalación\BlueJ\lib\english\templates\newclass\stdclass.tmpl

y es editable con el bloc de notas.
En la siguiente imagen se ven dos clases recien creadas, el are de proyecto, y el archivo de comentarios abierto. Las flechas que interconectan las clases representan las relaciones "has a" y "is a" (o de pertenencia y herencia), conceptos de Programacion Orientada a Objetos que se verán mas adelante.
BlueJ adopta el estandar UML para representar los proyectos: UML significa Unified Model Design y es uno de los modelos mas utilizados para el diseño de programas a nivel diagramado. Para mas información puedes visitar este LINK de wikipedia.

Por último, para cerrar esta reseña BASICA sobre BlueJ, hay que señalar que en el panel Ayuda hay una opción que nos permitirá acceder facilmente al Javadoc Online. En este enlace ya hablamos un poco del Javadoc.
Esta opcion es la que se ve resaltada en la siguiente imagen, que ademas incluye una muestra de la "terminal" de BLUEJ (la terminal muestra las salidas que provocaria nuestro programa ante la ejecución de ciertas sentencias, que luevo veremos, y ademas nos muestra, en el caso de haberlos, los errores de ejecución):

Con esto damos por terminada la parte I del curso.

Capítulo 2: POO y código Java.

Para iniciar esta segunda parte, haremos un pequeño acercamiento al concepto de Programación Orientada a Objetos y el trabajo con este paradigma.
La POO propone un paralelismo entre el mundo real y el programa. Por ejemplo, si deseamos escribir un software para un taller de autos podriamos comenzar identificando a los empleados, los autos a reparar, los repuestos, etc. Todos ellos tendrán que estar representados en el programa. Así, podríamos necesitar que con un botón se consulte a un objeto deposito cuantos respuestos del tipo neumatico quedan. En este hipotetico caso, el objeto almacen ofrece un servicio consultar() que recibe como parametro el tipo de elemento que queremos averiguar.
Hasta aquí seguramente no has entendido nada. Solamente hemos hecho una introducción a muchos de los conceptos que irán sonando con el transcurso del curso, y que son elementales para dominar Java.

En Java, todos los códigos se escriben en Clases. Las clases son unidades básicas que representan a un "objeto del mundo real": class persona, class auto, etc. Las clases ofrecen servicios: Los servicios son a Java lo que los procedimientos y funciones son a Pascal, y tenemos dos tipos: setters (establecedores) y getters (obtenedores). Los del primer tipo no retornan ningún valor, y su misión es modificar variables o imprimir datos en pantalla, por ejemplo. Los getters, en cambio, retornan valores de algún tipo.

Vamos a ver todo esto mas claro con un ejemplo: abrimos BlueJ y le damos a Project -> New Project. Creamos una nueva clase con el botón "New Class" ubicado en el panel izquierdo. El nombre de la clase puede ser el que quieras. En el mundo de la programación orientada a objetos se promueve que el nombre de la clase empieze con mayuscula y ademas sea representativo del objeto al que identifica. Ejemplo: una clase que represente a un Auto no debería llamarse Moto.class, ni tampoco auto.class, sino mas bien Auto.class. Una vez tengamos la clase creada, veremos al abrirla que BlueJ muestra un texto predeterminado. Borramos todo eso y copiamos lo siguiente:

public class XInfor
{
private String mensaje;
public XInfor ()
{
mensaje="Welcome Hell!";
System.out.println(mensaje);
}

public void modificarMensaje(String nuevoMensaje)
{
mensaje=nuevoMensaje;
}
public void mostrarMensaje()
{
System.out.println(mensaje);
}
}

Paso a explicar el codigo:

public class XInfor

Así es como toda clase debe empezar. public es un modificador, del cual
hablaremos más adelante y no debe preocuparnos por ahora. Luego class y
el nombre que hayamos elegido.

private String mensaje;
public XInfor ()
{
mensaje="Welcome Hell!";
System.out.println(mensaje);
}

La primera línea es una declaración de una variable. En este caso, de
tipo String, que representa a cadenas de texto. Mas adelante hablaremos
de tipos de variables. Para saber: esta es una variable de instancia.
Lo que queremos representar es que todos los objetos XInfor que creemos
tendrán una variable de tipo String llamada mensaje.
Lo que le sigue
es un tipo especial de servicio. Se llama constructor, y es llamado
inmediatamente despues de que se crea el objeto. En realidad, el
constructor "construye" el objeto, ya que es aquí donde generalmente se
asignan los valores a las variables de instancia. En este caso, le
asignamos a mensaje el valor Welcome Hell!.
Finalmente, lo que hacemos es llamar a una clase que proporciona Java embebida.
Esta clase contiene un servicio llamado println, que recibe un argumento de tipo
String como parametro (println(Java.lang.String))), y lo imprime por pantalla.

Los siguiente son dos servicios de tipo void.
El tipo void indica que el servicio no retornará ningún valor. Lo que
hacen los métodos, como dicen sus nombres, es modificar el mensaje e
imprimirlo en pantalla.
Probemos el programa: nos dirigimos a la pantalla del BlueJ, y damos click derecho
al icono de la clase XInfor. Seleccionamos new XInfor().
Veremos como aparece un recuadro rojo e inmediatamente se abre la
pantalla de la Terminal, imprimiendo el mensaje "Welcome Hell!".
El
recuadro rojo representa a un objeto. Como decíamos, a partir del
modelo (la clase) Java crea un objeto: el objeto será capaz de recibir
y procesar nuestros mensajes. Probemos hacer click derecho en el
objeto. BlueJ nos muestra todos los servicios que puede ejecutar.
Seleccionamos modificarMensaje y le enviamos por parametro algo
que deseemos (para que funcione, el texto debe ir entre comillas dobles
-> "TEXTO"). Luego, de la misma forma, seleccionamos mostrarMensaje y vemos que pasa.

Recomiendo probar a modificar el programa anterior:
  • Al llamar a modificarMensaje, el servicio concatene el mensaje actual con el nuevo. El operador de concatenación en Java es el signo de suma (+).
  • Probar incorporando el siguiente servicio y llamandolo a ver que sucede.

public String obtenerMensaje()
{
return mensaje;
}

El lenguaje Java

Como
todo lenguaje de programación, java tiene una Sintaxis y una Semántica
propia. Empezaremos por ver reglas básicas de escritura.
  • Excepto las lineas donde se declaran metodos, clases, etc, todas deben finalizar en ; .
  • Los comentarios son líneas que el compilador no tendrá en cuenta. Se escriben de alguna de las siguientes forma:


//esto es un comentario
/*
esto tambien
*/

  • Algunas de las palabras reservadas mas comunes que veremos en Java son: public, private, class, static, void, instanceof. No podremos usarla para nombres de variables, ni de métodos o clases tampoco.

Variables en Java

Las variables en Java son todo un dilema para los novatos o los que vienen de lenguajes mas "sencillos" como pascal o basic, donde el manejo de la memoria es apenas similar. Veamos: ¿qué es una variable? Una variable es un señalador. Una forma de registrar valores temporales, que logicamente pueden ir variando con el uso del programa. Las variables mantienen referencias a locaciones de memoria en la computadora, y en Java existen dos tipos: variables de tipo primitivo y variables de tipo clase.
Variables Primitivas: son sencillamente una abstracción de la celda de memoria que representan. Los tipos primitivos mas comunes son int, char, long, double, boolean y float. Las variables de este tipo mantienen valores concretos asociados a su tipo.

Variables de Clase:
contienen referencias a objetos. Una variable de clase Auto, por
ejemplo, contendrá una referencia a un objeto Auto, o no. En el segundo
caso, se dice que la referencia es NULA. Es decir, la variable no
contiene nada. Las variables de este tipo mantienen referencias.
Retomando
el ejemplo visto al comienzo, la clase String representa un tipo de
clase. En realidad, String hace referencia a un conjunto de caracteres.
La clase String viene por defecto con Java y fue incluida de forma que
se pueda utilizar como un tipo primitivo (en el sentido de la
declaración y uso). Sin embargo, ahora veremos que no se puede comparar
como si fuera primitiva.

Las variables tambien se dividen según donde esten ubicadas en el código y
a quien "pertenezcan". Tenemos entonces las variables de instancia y las variables de cuerpo.
Las primeras pertenecen a una clase. Son las que modelan el objeto que
se crea a partir de esa clase; pensemos un poquito en esto. Un objeto A
sera igual que otro de tipo A, salvo si se modifican los valores de
instancia de uno de ellos. Un
auto es del mismo tipo que otro auto, pero tendrá distinta marca,
numero de puertas, color, etc. Estas caracteristicas vienen definidas
por las variables de instancia.

Las variables de cuerpo son todas las demas: van declaradas en servicios, y sirven de
auxilio para hacer cálculos y modificaciones.

Declaración de Variables
Es
sencillo. Debemos indicar el tipo y el nombre de la variable. Así, para
declarar una variable de tipo entero que simbolize las ruedas de un

auto, hariamos algo así:

int ruedas;

De esa forma, se crea una locación de memoria que albergará un valor entero.
Se inicializa por defecto a 0 (boolean a false, char a '/0' y
una variable de clase por defecto lleva "null"
). También podríamos haber hecho esto:

int ruedas=4

iniciandola en el valor 4. O esto:

int ruedas; ruedas=4;

Operaciones con Variables

Java presenta distintos tipos de operadores.
Aritméticos: la suma (+), la resta (-), la multiplicación (*) y la división (/).

int ruedas=4; int cables=3; int res=cables + ruedas;

res tendrá un valor de 7.
Asignación: el operador de asignación en Java es el "=".

int booleano; booleano=true;

Existen otras formas abreviadas que incorpora Java para hacer mas
cortas ciertas secciones de código. En el siguiente cuadro se ven las
equivalencias:

http://i29.tinypic.com/dn0qk8.jpg

De union los mas importantes son ++ y --. Como resultado, obtenemos:
genteEnLaFiesta tendrá un valor de 11.


int genteEnLaFiesta=10; genteEnLaFiesta++;

-----
-----
Otra definicion para Compilador:

El compilador es un programa que se encarga de traducir los programas escritos por el
programador en lenguaje de alto nivel (entendible por el ser humano) a un lenguaje de
bajo nivel que es el comprensible por la máquina y que, de esta manera, permite que pueda
ser ejecutado por la computadora.

Las primeras tres fases son de análisis: análisis léxico, sintáctico y semántico, fases en
las que se leen los caracteres del código fuente, se analizan, se comprueban si son válidos
y se van reagrupando en secuencias lógicas y frases gramaticales. Esta primera parte es la que
se conoce como Front End.

Y las últimas tres fases son las de síntesis: generación de código intermedio, optimización de código
y generación
de código, que son en las que -a partir del análisis anterior- se genera la traducción para convertirlo
en código objeto o lenguaje máquina. Esta segunda parte se denomina Back End.

Durante todo este proceso, se va ejecutando en forma permanente el manejador de errores, que se encarga
de analizar en cada una de las fases los posibles errores que puede haber durante el proceso de la traducción.

Links para visitar:

http://www.freeimagehosting.net/uploads/62f7f1ae05.jpg
http://www.luiskano.net/blog/2007/09/07/como-instalar-java-jdk-en-windows-xp/
http://www.desarrolloweb.com/articulos/1776.php