Java1

download Java1

of 30

Transcript of Java1

  • Primeros pasos en Java

  • Java como lenguaje de programacinVeremos que existen diferentes lenguajes para escribir (programar) aplicaciones. Unos son lenguajes compilados y otros interpretados.Java es un lenguaje interpretado

    Indice

    *LenguajesPrimera generacin. Aos 50:ensamblador y cdigo mquinaSegunda generacin. Aos 60:COBOL, FORTRAM, ALGOL y BASICTercera generacin.Aos 70:PL/1, PASCAL, MODULA-2 (1980), ADA y CLenguajes de proposito general, procedimentales e imperativosAos 60-80:LISP, PROLOGOrientados a IAAos 80-90:C++ (1982) y Java (1991, aunque no se empieza a usar en Internet hasta finales de los 90)Orientados a objetosCuarta generacin (4GL)

    Indice

    *Cdigo compilado (I)Hasta los 2000 la mayora de las aplicaciones se hacan con lenguajes compilados. El ingeniero deba:Crear el cdigo fuente (archivos con extensin .c, .cpp, etc)Por medio de programas compiladores y enlazadores (link) crear el cdigo ejecutable (archivos con extensin .com y .exe) El cdigo ejecutable es dependiente del sistema operativo. Para cada sistema hay un compiladorSi se quiere ejecutar en otro sistema operativo (SO) hay que recompilar el cdigo fuente

    Indice

    *Cdigo interpretado (I)El cdigo interpretado no es ejecutado directamente por el sistema operativo. Necesita un interprete para ser ejecutadoCada sistema tiene su propio interpreteVentaja: el cdigo interpretado no debe ser modificado, ni recompilado cuando cambiamos de sistema operativo. Cada sistema tiene su propio interpreteInconveniente: es menos eficiente que el cdigo ejecutado

    Indice

    *Historia de JavaJava fue diseado en 1990 por James Gosling, de Sun Microsystems, para programar dispositivos electrnicos de consumo como calculadoras, microondas y la televisin interactivaNo fue diseado para Internet, de hecho naci antes de la era World Wide WebBill Joy (cofundador de Sun y uno de los desarrolladores principales del sistema operativo Unix de Berckeley) vio el inters de Java:Creciente necesidad de interfaces mucho ms cmodas e intuitivas que los sistemas de ventanas que proliferaban hasta el momentoRobustez. Gosling observ que muchas de las caractersticas que ofrecan C o C++ aumentaban de forma alarmante el gran coste de pruebas y depuracinMultiplataforma. Java permite escribir un cdigo comn para todos los dispositivosPor ello, Java surgi como lenguaje en 1995. Netscape incluy un interprete Java en su navegador

    Indice

    *Java: cdigo interpretadoEn muchos lenguajes (Cobol, C++, etc.) el programador crea un programa (.exe) ejecutable por el sistema operativo.En Java el cdigo fuente se escribe en archivos con extensin .javaEl compilador (javac) no genera un programa (.exe) ejecutable directamente por el sistema operativo. Genera cdigo interpretable, un archivo .class (byte code)El archivo .class es ejecutado por el interprete, tambin denominado MVJ (mquina virtual Java)Tambin existen en Java compiladores que generan cdigo ejecutable (.exe) a partir del byte code. Esto mejora la eficiencia pero no es portable

    Indice

    *Interpretes y portabilidadCada compilador es dependiente del sistema operativo (SO): genera un programa ejecutable (.exe) para un SO. Si se quiere ejecutar en otro SO, hay que usar su copilador correspondienteEl compilador no es dependiente del SO: genera byte codes (.class) que puede ser interpretado por cada uno de los interpretes del SO correspondiente

    Indice

    *Diferentes entornos de ejecucin: aplicaciones y appletsCon Java podemos hacer diversos tipos de programas:Requieren servidor InternetApplets: se alojan en el servidor Web y son enlazados desde una pgina Web. El usuario los descarga desde un servidor web y los ejecuta en su ordenador (frente a las servlets, que se ejecutan en el servidor)Servlets/JSP: se alojan y son ejecutados en el servidorNo requieren servidor Internet:Aplicaciones aisladas (standalone): se pueden ejecutar desde la lnea de ordenes del sistema (mediante Java.exe) y son independientes de una pgina Web. Normalmente estn alojados en el puesto cliente y se conectan a un servidor de bases de datos.

    Servidor InternetPginas HTMLAppletsServletsLas pginas y los applets se descargan y ejecutan en el clienteLos servlets se ejecutan en servidor y generan una pagina web que se descarga en clienteClientesClientes de aplicaciones standaloneRed empresarialServidor empresarial de base de datosDatos

  • Java Development Kit (JDK)El JDK es el conjunto de utilidades que nos permiten crear el cdigo interpretado. Lo bsico es tener el compilador javac.exe y el interprete java.exe

    Indice

    *Diferentes ediciones del JDKEl JDK es el conjunto de herramientas que nos permiten crear los programas. Existen diferentes JDKs, en funcin de las necesidades del programador. Dos de las ediciones ms conocidas son:Java Standard Edition (JSE): para escribir aplicaciones y applets. Descargable desde http://java.sun.com/javase/downloads/index.jsp

    Java Enterprise Edition (JEE): para tecnologas Servlets/JSP, EJB, etc, dentro del entorno Internet. Descargable desde http://java.sun.com/javaee/downloads/index.jsp

    Indice

    *Descarga e instalacin del JDKLas ltimas versiones incluyen un programa de instalacin (wizard) que facilita la tareaEn este ejemplo se est ejecutando un wizard de JEE 1.5. Que el aspecto grfico de este ejemplo sea diferente respecto a la instalacin que este intentando es lo de menos, depende de la edicin y versin elegida Las dos cosas importantes:Definir el directorio de instalacin. Lo aconsejable es dejar la ruta que propone el programa Incluir el directorio bin en la variable path del sistema, de esta forma podremos trabajar en la lnea de ordenes

    Indice

    *La variable path (I)En Windows (y en otros sistemas) cuando trabajamos en la lnea de ordenes y ejecutamos un programa el sistema busca el programa de la forma siguiente:Busca en el directorio actual; si no lo encuentra, sigue en el siguiente puntoBusca en los directorios o carpetas definidos en la variable path:Si no lo encuentra responde con un mensaje parecido a este: MiPrograma no se reconoce como un comando interno o externo, programa o archivo por lotes ejecutable.Si lo encuentra, lo ejecuta. En el siguiente ejemplo ha encontrado el programa Notepad.exe, ya que en la variable path se encuentra definido el directorio donde se aloja dicho programa: C:\WINDOWS

    Indice

    *La variable path (II)Cmo saber el contenido de la variable path?En la lnea de ordenes: escribir path (sin dobles comillas). Con set se muestran todas las variables del sistemaEn Inicio-Panel de control-Sistema-Opciones Avanzadas-Variables del sistemaSe puede cambiar en (2), pulsando Modificar, escribiendo el directorio (separamos los directorios con punto y coma) y a continuacin pulsar AceptarOjo: los cambios en (2) se reflejan en las nuevas instancias de la lnea de ordenes, no en las que ya estuviesen abiertas antes de los cambiosEjemplo:

    Indice

    *Directorio jdk\bin en el pathProgramas como el compilador javac.exe o el interprete java.exe se encuentran en el directorio bin del jdk. Ejemplos de directorio bin (dependiendo de su edicin, versin y presentacin comercial):C:\Sun\AppServer\jdk\binC:\j2sdk1.4.2_11\binC:\JBuilder2005\jdk1.4\binDependiendo de la versin y edicin los directorios base se pueden llamar de forma diferente. Lo que importa es que siempre habr un subdirectorio bin del jdk.Para que java.exe y javac.exe se puedan usar desde la lnea de ordenes necesitamos que el directorio bin este en la variable pathLo normal es que el instalador del JDK introduzca este directorio. Pero si no es as, debemos hacerlo nosotros, accediendo al Panel de ControlSi el directorio no est en el path, cuando escribamos javac nos responder javac no se reconoce como un comando interno o externo .Si est en el path, entonces lo encuentra y nos devolver Usage: javac . Esto significa que lo ha ejecutado y el programa nos devuelve una pequea ayuda al no haber recibido los argumentos correctos

    Indice

    *La variable JAVA_HOMEEn bastantes entornos de desarrollo integrado (IDE) es necesario tener definida la variable JAVA_HOME. En ocasiones la define el instalador, si no es as, conviene que la defina el programadorLa variable representa el directorio base del jdkEjemplo. Para ver su contenido desde la lnea de ordenes:Para definirla se puede usar Inicio-Panel de control-Sistema-Opciones Avanzadas-Variables del sistema.Si no existe usar el botn Nueva.Si existe, usar Modificar

  • El primer objeto. El mtodo mainVamos a crear un programa que muestra el mensaje Hola mundo slo con el soporte del JDK y el Notepad, sin ayuda de un entorno de desarrollo integrado (IDE). Antes de crear el programa debemos de organizar nuestro proyecto de desarrollo

    Indice

    *Clases y objetos: la teora de conjuntosEn la teora de conjuntos diferenciamos:Concepto de conjunto, en que definimos atributos caractersticos, por ejemplo la edad y el nombre.Concepto de instancia (elemento o individuo), donde cada atributo puede tener un valor

    En la programacin orientada a objetos ocurre algo parecido, ya que diferenciamos:Concepto de clase, con sus atributos caractersticosConcepto de instancia u objeto

    cmo se hace una instancia en Java?Nombre_de_clase Nombre_Objeto = new Nombre_de_clase();Ejemplo: Persona pepe = new Persona();

    Conjunto de Personas. Atributos: {edad, nombre}Pedro. Valores: {33, Pedro}Mi tia. Valores: {46, Carmen}Class Persona: int edad String nombrePedro:Persona pedro = new Persona( 33, Pedro);Mi ta:Persona tia = new Persona( 46, Carmen );

    Indice

    *Nuestra aplicacin Hola mundoHola.java (no lo escriba, ms adelante explicaremos el directorio donde ponerlo):package saludo.inicio;/********************************** Este es nuestro primer programa. Muestra un sencillo mensaje *********************************/public class Hola {public static void main(String[] args) { // El programa empieza a ejecutarse en mainSystem.out.println( "Hola mundo"); // Salida por pantalla}}Notas:Empecemos por los comentarios (no se compilan, son explicaciones o notas del programador):Comentario de bloque: /* ... */Comentario de lnea: //...La palabra reservada class sirve para sealar que se empieza a definir una clase, delimitada por llaves: {}La palabra reservada public es un especificador de acceso. Lo que es pblico es accesible desde fuera de la clase o paquete. La clase es pblica, ya que va a ser instanciada por el JVM (interprete)La funcin main (no Main, ni MAIN), es el punto de inicio de la ejecucin del programa. El mtodo define el comportamiento de la clase, aquello que hace. Es pblico, ya que debe ser llamado desde fuera de la clase, por parte del interprete (JVM)static lo veremos ms adelante, indica que se puede acceder a la funcin sin hacer referencia a una instancia de la clasevoid indica que la funcin main no devuelve nada

    Indice

    *Normas y consejosConvenciones:Nombres de clases: primera en maysculaspublic class Hola Nombre de paquete: minsculaspackage saludo;Atributos y variables: minsculas. Si juntamos varias palabras, usar maysculas a partir de la segundaint edad;int contadorSaludos;Mtodos: minsculas. Si juntamos varias palabras, usar maysculas a partir de la segundapublic static void main(String[] args) { public mostrarSaludo() Normas:Un archivo .java tendr una clase. Hay IDEs que relajan esta norma y permiten poner varias clases en un archivo .java, pero nosotros seguiremos esta normaEl nombre de la clase ser el mismo que el nombre del archivo .javaUn consejo: no use espacios en blanco ni tildes en los nombres de directorios o archivos. Tampoco convienen nombres demasiado largos

    Indice

    *Organizacin de la ingeniera del software En muchas actividades asociadas a la ingeniera antes de empezar a construir el producto debemos tomar decisiones sobre:Los objetivos y funciones que debe cumplir el productoLa forma en que se organiza el desarrollo o construccin del productoRespecto a la organizacin del desarrollo de una aplicacin debemos tener en cuenta cmo vamos a estructurarlo. En nuestro caso la primera decisin es la estructura de directorios o carpetas de nuestro proyecto.

    Indice

    *Estructura del proyectoQu es un proyecto?Es la forma de agrupar todos los elementos de nuestra aplicacin. Una aplicacin puede contener numerosos archivos .java, .class, .properties, .jar, .txt, etc. La idea es agruparlo todo bajo un proyecto. Para ello, nos servimos de la estructura de directorios y crearemos el directorio raz del proyecto: Saludo01A continuacin crearemos los siguientes subdirectorios para diferenciar el cdigo fuente del cdigo interpretado:Subdirectorio src. En este directorio o en alguno de sus subdirectorios colocaremos el cdigo fuente (.java)Subdirectorio bin. En este directorio o en alguno de sus subdirectorios colocaremos el cdigo interpretado (.class)El aspecto final puede ser:

    Indice

    *Estructura de paquetes (I)Adems dentro de cada uno de los subdirectorios anteriores (src y bin) debemos reflejar la estructura interna de nuestra aplicacin.Los archivos de cdigo se agrupan en paquetes o directorios. Veremos que cada parte, bloque o paquete de nuestra aplicacin debe diferenciarse de las dems por su funcin dentro del proyecto. De la misma forma que si construimos un coche clasificamos las piezas en funcin de la parte o funcin a la que pertenecen (chasis, motor, electrnica de control, etc.), no las mezclamos todas en un nico cajn.De la misma forma, los archivos de cdigo Java no se escriben todos en un nico directorio o paquete, sino que se sitan en un paquete en virtud de su funcin.

    Indice

    *Estructura de paquetes (II)En nuestro caso tendremos un directorio o paquete raz, que denominaremos saludo, del que derivaremos los siguientes subdirectorios o paquetes:inicio: paquete donde est la clase que sirve de inicio al funcionamiento de la aplicacin, aquella que contiene el mtodo main (Hola.java)dominio: tendr las clases que representen el domino del problema, por ejemplo en un entono de banca tendremos clases como Cuenta, Cliente, etc. En un entorno de universidad tendremos clases como Alumno, Profesor, Asignatura, etc. Por ahora la crearemos, pero la dejaremos vaco de archivos.Todo esto lo haremos de forma paralela, tanto en el directorio bin como en src. De forma que los subdirectorios de uno sean espejo de los de otro. El aspecto final sera:Observe que la primera lnea del archivo .java es el paquete al que pertenece:

    package saludo.inicio;

    Indice

    *Compilar y ejecutarPara compilar me sito en el directorio srcEjecuto javac.exe con la opcin d, para indicar el directorio de salida, es decir, el directorio a partir del cual va a poner los archivos .classEl segundo argumento es el archivo que se compila (se permiten comodines, por ejemplo *.java)Como directorio de salida hemos puesto bin. Sin embargo, el archivo Hola.class lo sita, correctamente, en bin\saludo\inicio. Por qu no pone el archivo .class en bin? La respuesta es que al compilar ve que la clase pertenece al paquete saludo.inicio (la primera lnea del archivo .java indica el paquete), por tanto pone el archivo .class en el directorio indicado por la unin:Directorio_de_salida U ruta_de_paquete, es decir:c:\DOC\Java_libre\Saludo01\bin\ U saludo\inicioEn nuestro ejemplo hemos usado para la opcin d una ruta absoluta, pero podramos haber indicado una ruta relativa: ..\bin

    Indice

    *Extendiendo el ejemploPonemos en el paquete saludo.dominio la clase:package saludo.dominio;

    public class Persona { public String nombre; public int edad; public void mostrar() { System.out.println("Mi nombre es " + nombre +" y tengo " + edad + " aos"); }}A continuacin cambiamos la clase Hola:package saludo.inicio;import saludo.dominio.*;

    public class Hola { public static void main(String[] args) { System.out.println( "Hola mundo"); Persona ana = new Persona(); ana.nombre = "Ana Maria"; ana.edad = 18; ana.mostrar(); }}En Persona.java usamos la expresin de acceso public, ya que queremos acceder a los atributos y mtodos desde fuera del paquete donde est la clase PersonaEn Persona.java hay diversas cosas interesantes y nuevas:Por qu import?Cmo se crea el objeto o instancia?Cmo se accede a los atributos y mtodo de la instancia?

  • PaquetesDe la misma forma que las carpetas nos sirven para clasificar los documentos, los paquetes son una forma de clasificar las clases

    Indice

    *PaquetesLos paquetes son formas de agrupar clases, nos permiten tenerlas clasificadas, del mismo modo que las estanteras nos sirven para clasificar los librosUn paquete es un concepto, una construccin lgica, que se corresponde con un directorio o carpetaPara definir que una clase pertenece a un paquete hay que:Usar la palabra package en la primera sentencia de un archivo fuente: package nombre_paquete;Poner el archivo java en el directorio correspondienteEjemplo: todos los archivos del paquete j10_composicion tendrn la sentencia package j10_composicion, adems los archivos .java y .class se deben almacenar en el directorio j10_composicionSe pueden crear jerarquas de paquetes, separando los niveles por puntos. A la hora de crear el paquete es necesario reflejar la jerarqua en el sistema de directorios y en la sentencia package, por ejemplo en MiClase.java:package sistema.presentacion;(el archivo debe situarse en /sistema/presentacion)

    Indice

    *ImportacinSupongamos que estamos en la clase saludo.inicio.Hola. Si desde Hola usamos clases que estn fuera de su paquete (saludo.inicio), entonces nos puede aparecer el siguiente error:package saludo.inicio;

    public class Hola { public static void main(String[] args) { Vector vector = new Vector() }}El compilador no encuentra el lugar donde est definida la clase Vector. Para evitar este problema se le indica mediante la expresin import (entre package y class) el paquete donde encontrar la clase:package saludo.inicio;import java.util.Vector;Para importar clases se debe tener en cuenta la jerarqua de mltiples paquetes, separados por puntos. Al final hay que definir la clase que se importa o usar el asterisco para denotar todas las clases de un paquete. Ejemplo:import java.io.*;import java.util.Date;Las clases predefinidas en Java son aquellas importadas de forma automtica por el compilador, por ejemplo, las clases del paquete java.lang (como String). De tal forma que no es necesario escribir:import java.lang.*;No se puede encontrar el smbolo Vector o No puedo resolver Vector

    Indice

    *AccesoCon los paquetes tambin podemos determinar niveles de acceso:Se puede acceder desde fuera del paquete a cualquier elemento del paquete que sea pblicoAquello que es privado no puede ser accesible fuera del paquetePuede acceder a los elementos protected de un paquete, pero slo desde clases que heredan los elementos protected del paqueteSi no especifica ningn modificador de acceso no podr acceder desde fuera del paquete