Programación en Java David Contreras Bárcena David Contreras Bárcena (ETSI) - Comillas 1 Temario 1. Introducción 1. Lenguaje java 2. Compilador SDK 1.4 3. Sintaxis 4. Tipos de datos 5. Estructuras de Control 6. Arrays 2. Tratamiento de objetos con JAVA 1. Ciclo de vida de un objeto 2. Secuencia de ejecución 3. Clases y mensajes 4. Creación de un objeto (Constructores) 5. Herencia 6. Referencias 7. This y super 8. Reflectividad 3. API 1. Documentación API del compilador JDK 2. Clases principales: 1. Object, String, Math, Vector, David Contreras Bárcena (ETSI) - Comillas 2
Temario (cont) 4. Paquetes 5. Modificadores de acceso 6. Gestión de excepciones 1. Bloque try-catch-finally 7. Entrada/salida 1. Clase File 2. Almacenamiento a nivel de bytes, tipos de datos, objetos y líneas de caracteres. 3. Serialización 8. Threads 9. Programación visual Swing 1. Aplicaciones con entorno gráfico 2. Aplicaciones en Internet APPLETS 10. JDBC 1. Conexión con una base de datos 2. Sentencias 3. Sentencias preparadas 11. Sockets 12. JSP 13. Servlets David Contreras Bárcena (ETSI) - Comillas 3 1. Introducción a Java David Contreras Bárcena (ETSI) - Comillas 4
1.1 Introducción a Java Java es Simple Por tener una sintaxis similar a C++, permite a los programadores en este lenguaje una migración rápida, eliminando al mismo tiempo complejidades de C++ (por ejemplo, los punteros), lo que lo hace un lenguaje sencillo de manejar. David Contreras Bárcena (ETSI) - Comillas 5 1.1 Introducción a Java Java es Orientado a Objetos Proporciona los mecanismos para que el programador haga utilización de todas las técnicas de diseño y programación orientada a objetos, como herencia, polimorfismo y abstracción. El lenguaje va acompañado de numerosas librerías de objetos que cubren todas las áreas desde los tipos de datos básicos, hasta los interfaces de I/O y de red. David Contreras Bárcena (ETSI) - Comillas 6
1.1 Introducción a Java Java es Distribuido Java es un lenguaje de programación concebido para crear aplicaciones distribuidas en red y también sobre la Web. Java esta construido con extensas capacidades de interconexión TCP/IP, lo cual permite crear programas en red. David Contreras Bárcena (ETSI) - Comillas 7 1.1 Introducción a Java Java es de Arquitectura Neutra El lenguaje Java se ha diseñado para crear aplicaciones que funcionen en entornos de red, operando en una amplia variedad de arquitecturas hardware y sistemas operativos. El compilador Java genera los byte-code que pueden interpretarse en cualquier plataforma. David Contreras Bárcena (ETSI) - Comillas 8
1.1 Introducción a Java Programas con compilación tradicional Codigo Fuente *.c Compilador (Pentium) Compilador (PowerPC) Compilador (SPARC) Diversas Plataformas Archivo Binario Pentium Archivo Binario PowerPC Archivo Binario SPARC Codigo dependiente de la plataforma David Contreras Bárcena (ETSI) - Comillas 9 1.1 Introducción a Java Programas compilados con Java Codigo Fuente *.java Compilador (Pentium) Compilador (PowerPC) Compilador (SPARC) Byte-code java Independiente de la plataforma *.class Interprete Java Pentium Interprete Java PowerPC Interprete Java SPARC David Contreras Bárcena (ETSI) - Comillas 10
1.1 Introducción a Java Flujo de Ejecución Programa Interprete 0010110100 Programa.java Programa.class (Bytecodes) Compilador David Contreras Bárcena (ETSI) - Comillas 11 1.1 Introducción a Java Robusto y Seguro Se realizan verificaciones en busca de problemas tanto en tiempo de compilación como en tiempo de ejecución. La comprobación de tipos es muy estricta. Al eliminar los punteros, se quita la posibilidad de sobrescribir en alguna zona de memoria un puntero perdido. La gestión de memoria se realiza automáticamente. David Contreras Bárcena (ETSI) - Comillas 12
1.1 Introducción a Java Portabilidad Las especificaciones del lenguaje Java se han definido estrictamente, implementando otros estándares de portabilidad para facilitar el desarrollo, por ejemplo, los tamaños de los tipos de datos básicos y el comportamiento estricto de todos los operadores aritméticos. Los interfaces gráficos pueden ejecutarse en sistemas Unix, Windows o Mac. David Contreras Bárcena (ETSI) - Comillas 13 1.1 Introducción a Java Concurrencia La posibilidad de que un programa pueda ejecutar múltiples procesos de ejecución simultáneos. Cualquier objeto, puede convertirse en proceso y comenzar su ejecución por separado con un mínimo esfuerzo de programación. David Contreras Bárcena (ETSI) - Comillas 14
1.1 Introducción a Java - Applets Java puede ser utilizado para desarrollar aplicaciones interactivas utilizando el protocolo HTTP, es decir, permite incrustar programas en páginas Web. Estas aplicaciones (denominadas Applets ) son interpretadas y ejecutadas por la máquina virtual Java después de haber sido cargadas desde un servidor Web distante a través de la llamada del usuario enviada desde su browser. David Contreras Bárcena (ETSI) - Comillas 15 1.1 Introducción a Java - Applets Servidor WEB llamada HTML Browser + Máquina virtual java Carga etiqueta Applet interpreta visualiza Página Web referencia Usuario Máquina cliente Ejecutable Carga Java Ejecutable Servidor APPS David Contreras Bárcena (ETSI) - Comillas 16
1.2 JDK Es un paquete de Software distribuido por Sun Microsystems. Incluye dos entorno claramente diferenciados: Desarrollo. Ejecución. David Contreras Bárcena (ETSI) - Comillas 17 1.2 JDK Java Virtual Machine Es un ordenador abstracto que ejecuta programas java compilados (bytecodes). Es virtual porque es generalmente implementado por software sobre una plataforma real de hardware y un sistema operativo. Todos los programas java son compilados para la máquina virtual, por lo que debe estar implementada sobre la plataforma para que los programas puedan ejecutarse. David Contreras Bárcena (ETSI) - Comillas 18
1.2 JDK Java Virtual Machine JVM es el punto central de la portabilidad de Java, los programas Java compilados para la JVM se ejecutan independientemente de cual sea la implementación de esa JVM. JVM puede esta implementada sobre el Sistema Operativo anfitrión o encontrarse incrustada en otra aplicación, como por ejemplo en un navegador Web. David Contreras Bárcena (ETSI) - Comillas 19 1.2 JDK Java Virtual Machine Código Fuente Compilador Java Bytecodes Cargador Clases Vertificador Bytecodes Compilador JIT Hardware Interprete Run-time Tiempo de Ejecución David Contreras Bárcena (ETSI) - Comillas 20
1.2 JAVA 2 J2SE 1.5 J2SE 1.2.x J2SE 1.3.x J2SE 1.4 JRE JRE J2SE J2SE J2EE J2EE Enterprise JavaBeans CORBA JavaServer Pages JDBC Java Message Service XML Transactions JNDI J2EE Connector Servlets ECperf JDK 1.1.x David Contreras Bárcena (ETSI) - Comillas 21 JAVA 2 David Contreras Bárcena (ETSI) - Comillas 22
1.2 Compiladores y Entornos de Desarrollo NetBeans (Sun) Eclipse Symantec Café (Symantec) JBuilder (Borland) Java Workshop (Sun) Visual J++ (Microsoft) Bongo Marimba (Desarrolladores de Java) David Contreras Bárcena (ETSI) - Comillas 23 1.2 JDK - Herramientas de desarrollo Se pueden destacar las siguientes herramientas: javac Compila el código fuente y obtiene los byte-codes java Interprete del código java compilado jdb Depurador de código javadoc Genera un documento de ayuda sobre las clases que hemos creado en formato HTML appletviewer Visor de applets, incluidos en páginas HTML jar Permite crear bytecodes comprimidos javah Convierte programas java a código nativo C. David Contreras Bárcena (ETSI) - Comillas 24
1.2 JDK - javac El comando javac compila los ficheros fuente de Java a ficheros bytecode. Los ficheros del código fuente deben de tener una extensión.java. javac Hola.java David Contreras Bárcena (ETSI) - Comillas 25 1.2 JDK - javac Cómo entender los mensajes de error? Compilación sin error: Un método que no especifica el tipo que devuelve, producido en la línea 4, justo antes del main: Tipo de error Línea donde se ha producido el error Descripción del error Punto donde se ha producido David Contreras Bárcena (ETSI) - Comillas 26
1.2 JDK - javac Error producido en la línea 7 del tipo No puedo resolver el símbolo. Generalmente estos errores se deben a clases o referencias que no han sido definidas previamente. Si la clase Arbol, en este caso, está implementada, deberemos asegurarnos que se encuentra en el mismo directorio sino trabajamos con paquetes. De ser así, deberemos realizar un import. David Contreras Bárcena (ETSI) - Comillas 27 1.2 JDK - java El comando java ejecuta los ficheros.class que ha creado el compilador. No hace falta indicar la extensión en el comando. Este comando ejecuta el método main de la clase que va a ejecutar. java Hola David Contreras Bárcena (ETSI) - Comillas 28
1.2 JDK - jdb El depurador de Java. Funciona a través de línea de comandos. Antes de usar el depurador hay que compilar la aplicación o el applet con la opción -g. Funciona de dos maneras diferentes: Con el comando jdb Con la opción -debug en el interprete jdb Hola David Contreras Bárcena (ETSI) - Comillas 29 1.2 JDK - jdb Comandos del depurador: stop at Clase:línea stop in Clase:método run step print línea cont clear Clase:línea clear Clase:método exit David Contreras Bárcena (ETSI) - Comillas 30
1.2 JDK - javadoc Genera paginas HTML desde los ficheros fuente de Java. Por defecto toma la declaración y los comentarios de las clases, interfaces, constructores, métodos y atributos públicos y protegidos. Como argumento javadoc recibe el nombre de una serie de paquetes o clases. Opciones: -private: incluye toda la información de la clase -public: incluye sólo los públicos (opción por defecto) javadoc private Hola.java David Contreras Bárcena (ETSI) - Comillas 31 1.2 JDK - appletviewer El appletviewer (visor del applet) es una aplicación Java que permite ejecutar los applets sin utilizar un navegador de Web, como puede ser Netscape, HotJava, etc. El applet debe estar incluido en una página HTML. appletviewer pagina.html David Contreras Bárcena (ETSI) - Comillas 32
1.2 JDK - jar Un jar es un fichero comprimido siguiendo el algoritmo ZIP. Concentra todos los bytecodes de un programa en un solo archivo. De esta manera hace más sencilla la distribución de programas JAVA y reduce el tiempo de descarga de los applets. Un JAR contiene, además de las clases, un fichero de información llamado MANIFEST.MF (Dentro del JAR se almacena en el directorio META-INF). El objetivo de este fichero de información es indicar a la JVM cual de las clases del JAR es la ejecutable. Ejemplo de MANIFEST.MF Manifest-Version: 1.0 Created-By: 1.4.1_01 (Sun Microsystems Inc.) Main-Class: App David Contreras Bárcena (ETSI) - Comillas 33 1.2 JDK - jar Cómo crear un jar? Paso 1: Crear el fichero MANIFEST.MF indicando el nombre de la clase de ejecución. Paso 2: Desde el directorio padre de todos los bytecodes (*.class) se ejecuta la herramienta jar.exe. jar cfm Run.jar MANIFEST.MF *.class Opciones de la utilidad jar Nombre del jar a crear Fichero MANIFEST Clases a almacenar en el jar En el siguiente ejemplo, se está creando un fichero llamado pepe.jar, el fichero MANIFEST se encuentra en el subdirectorio info, y las clases a incorporar son App de este directorio y todas las que se encuentran en el subdirectorio obj. jar cfm pepe.jar info\manifest.mf App.class obj\*.class David Contreras Bárcena (ETSI) - Comillas 34
1.2 JDK - jar El contenido de un zip se puede visualizar renombrándolo a ZIP. (run.jar run.zip) Se puede apreciar entones, cómo internamente crea el directorio META-INF de forma automática. David Contreras Bárcena (ETSI) - Comillas 35 1.2 JDK - jar Cómo ejecutar un jar? java jar Run.jar Si no hemos sido capaces de crear el JAR con el fichero MANIFEST.MF, deberemos ejecutarlo de la siguiente forma. java cp Run.jar App La forma más correcta es la primera, ya que cuando nos encontramos con un JAR, no siempre sabemos el nombre de la clase de ejecución. http://java.sun.com/docs/books/tutorial/jar/index.html David Contreras Bárcena (ETSI) - Comillas 36
1.2 JDK (Ejemplo de depuración de código) /** La clase Hola es una clase de prueba */ class Hola { int i; public static void main(string s[]) { Hola h=new Hola(); System.out.println( Hola + h.getinfo()); } /** Devuelve información sobre el objeto */ int getinfo() { // línea 11 int b=5; // línea 12 i=4; // línea 13 i=5; // línea 14 i=6; // línea 15 return i; } } David Contreras Bárcena (ETSI) - Comillas 37 1.2 JDK (Ejemplo de depuración de código) C:\TEMP>javac -g Hola.java main[1] print i C:\TEMP>jdb Hola i = 0 Initializing jdb... main[1] print b 0xa9:class(Hola) b = 5 > stop in Hola.getInfo() main[1] step Breakpoint set in Hola.getInfo() main[1] > run Breakpoint hit: Hola.getInfo (Hola:13) run Hola main[1] print i running... main[1] i = 4 Breakpoint hit: Hola.getInfo (Hola:11) main[1] step main[1] print i main[1] i = 0 Breakpoint hit: Hola.getInfo (Hola:14) main[1] print b main[1] print i "b" is not a valid local, class name, or field i = 5 of (Hola)0xe8 main[1] step main[1] step main[1] main[1] Breakpoint hit: Hola.getInfo (Hola:12) Breakpoint hit: Hola.getInfo (Hola:15) main[1] print i David Contreras Bárcena (ETSI) - Comillas i = 6 38
1.2 JDK (Resumen) Compilar el fichero fuente java : > javac [-g] Hola.java Ejecutar la aplicación: > java Hola Ejecutar el debugger: > jdb Hola Ejecutar el javadoc: > javadoc Hola.java Ejecutar el JAR: > jar cf Run.jar *.class David Contreras Bárcena (ETSI) - Comillas 39