Introducción a Java Humberto Cervantes Maceda Alfonso Martínez Martínez 1 Marzo 2005 Indice Historia Lenguaje Java Plataforma Máquina Virtual API Herramientas de desarrollo 2 Historia Al principio En 1991, Java empezó como un proyecto fallido llamado “Oak” dirigido a crear software imbricado (dentro de dispositivos). Buscaba ser un remplazo para C++ Qué es Java ? Un lenguaje orientado a objetos Una plataforma Máquina Virtual Java Application Programming Interface (API) 3 Java, el lenguaje 4 Java: características del lenguaje Simple Orientado a objetos Portable Robusto Seguro Facilita programación distribuida Soporte para desarrollo de programas multi-hilo Cargado dinámico 5 Lenguaje simple Similar a C/C++ No hay separación entre .h y .cpp Sin apuntadores Paso de parámetros por referencia Manejo de memoria automático Colector de basura 6 Lenguaje orientado a objetos Provee elementos necesarios para hacer POO Clase, interfase, herencia “Todo” es un objeto Clase “Object” a la raíz de toda la jerarquía de herencia A excepción de tipos primitivos int, float, boolean, char, byte existen clases que los representan, por ej. Integer Mecanismos de introspección Clase “Class” Todo objeto implementa getClass(); 7 Lenguaje portable Código Java se compila hacia un lenguaje intermediario llamado “bytecode” Especie de ensamblador con características OO Conjunto de instrucciones pequeño y cercano al lenguaje. Se almacena en archivos .class El bytecode es usado por una máquina virtual 8 Ejemplo de bytecode Java class Employee extends java.lang.Object { public Employee(java.lang.String,int) { name = strName; idNumber = num; storeData(strName, num); } } Bytecode Method Employee(java.lang.String,int) 0 aload_0 1 invokespecial #3 <Method java.lang.Object()> 4 aload_0 5 aload_1 6 putfield #5 <Field java.lang.String name> 9 aload_0 10 iload_2 11 putfield #4 <Field int idNumber> 14 aload_0 15 aload_1 16 iload_2 17 invokespecial #6 <Method void storeData(java.lang.String, int)> 20 return 9 Lenguaje robusto Strong-typing Nombres de variable llevan tipo asociado Conversiones entre tipos explicitas Vía cast Chequeo en tiempo de compilación y de ejecución ClassCastException Mecanismo de excepciones para manejo de errores 10 try { ... } catch(Exception ex) { ... } finally { ... } Lenguaje seguro No se pueden accesos ilegales de memoria Sandbox Ejecución de código en entorno restringido (sandbox) Firmas digitales Soporte de firmas digitales del código 11 Otras características Facilita programación distribuida Soporte de alto nivel para comunicación en red Soporte para desarrollo de programas multi-hilo Facilita programación concurrente Cargado dinámico Toda clase se carga dinámicamente conforme se usa Permite cargar código a distancia Clave para las applets 12 Evolución del lenguaje Java Varias versiones han aparecido 1.0 - 1996 1.1 - 1997 1.2 - 1998 1.3 - 2000 1.4 - 2002 1.5 (5.0) - 2004 JDK y JRE Java Development Kit Herramientas de desarrollo Java Runtime Environment 13 Plataforma de ejecución (+API) Micro Edition, Standard Edition, Enterprise Edition Java, la plataforma 14 Java: la plataforma Compuesta por tres entidades Máquina virtual Un simulador de computadora que se ejecuta en otra computadora pero que se comporta como si fuera una máquina distinta. API Un conjunto de funciones de software que proveen acceso a las capacidades de un sistema. Herramientas de desarrollo 15 Máquina Virtual Java Máquina virtual 0 aload_0 1 invokespecial #3 <Method java.lang.Object()> 4 aload_0 5 aload_1 6 putfield #5 <Field java.lang.String name> 9 aload_0 10 iload_2 Local o Red Cargador de clases bytecode .class Archivos .class Programa API Motor de ejecución invocaciones nativas Sistema operativo huésped 16 Máquina Virtual Java (2) Seguridad Verificación del bytecode antes de ejecutarlo Compatibilidad de versiones Restringe acceso a código no confiable Por ejemplo applets Ejecución Interpretación Compilación “Justo a Tiempo” (JIT), más eficiente HotSpot de Sun 17 Application Programming Interface Conjunto de clases que dan acceso al entorno de ejecución que abstrae el sistema operativo Alrededor de 3300 Clases Agrupadas en distintos packages de acuerdo con su utilidad 166 Packages en J2SE 1.5 java – packages estándar javax – extensiones org.omg – CORBA org.xml – XML Al programar en Java siempre hay que tener un navegador abierto en la página del API 18 http://java.sun.com/j2se/1.5.0/docs/api/index.html Packages principales del API java.xxx 19 java.applet: Applets java.awt: Abstract Windowing Toolkit java.beans: JavaBeans java.io: Input / Output java.lang: Tipos de datos, Excepciones, Reflexion java.math: Matemáticas java.net: Red (ej URL) java.nio: Buffers (?) java.rmi: Remote Method Invocation java.security: Seguridad java.sql java.text java.util: Clases utilitarias (Colecciones, Jars, etc...) java.accessibility: Acceso a usuarios discapacitados Packages de extension del API javax.xxx javax.crypto: Criptografía javax.imageio: Entrada y salida de imágenes javax.naming: Servicios de nombrado (directorio) javax.net: Sockets javax.print: Impresión javax.rmi javax.security javax.sound javax.swing javax.transaction javax.xml 20 Javadoc del API Packages 21 Javadoc del API Clases 22 Javadoc del API 23 Detalle de clase Herramientas del JDK El Java Development Kit provee un conjunto de herramientas necesarias para el desarrollo en Java javac: compilación java: ejecución de un programa javadoc: documentación jar: empaquetamiento Otras herramientas del JDK 24 Reglas de escritura de una clase Se puede usar un editor cualquiera El nombre de la clase siempre lleva mayúscula Ej: Coche Los métodos comienzan con minúscula Ej: enciende, abreCajuela Una clase siempre se pone dentro de un espacio de nombres (package) Ej: mx.uam.cursojava.practica1 El package se representa con una jerarquía de directorios 25 Javac: compilación Se utiliza el comando javac (Java Compiler) Archivo.java → Archivo.class Sintaxis javac -cp classpath -d dirsalida dir/de/package/*.java Se recomienda usar un directorio distinto para las salidas Ej: build Se recomienda tener las fuentes dentro de un directorio específico Ej: src El classpath referencia código usado durante compilación (imports que no son del API) 26 Javac: compilación Ejemplo javac -cp . -d build src/mx/uam/cursojava/practica1/*.java Si la entrada es src mx/uam/cursojava/practica1/EjemploA.java mx/uam/cursojava/practica1/EjemploB.java La salida queda así build mx/uam/cursojava/practica1/EjemploA.class mx/uam/cursojava/practica1/EjemploB.class 27 Java: ejecución Se utiliza el comando java java -classpath build/ mx.uam.vehiculos.Principal desde el directorio raiz Salida: Coche creado! Camion creado! Encendiendo:coche Motor Turbo activado! Apagando:coche Motor Turbo desactivado! Checando llenado... Encendiendo:camion Motor Alto Rendimiento activado! Apagando:camion Motor Alto Rendimiento desactivado! 28 Javadoc: documentación Java permite crear documentación en formato HTML a partir de comentarios en el código fuente. package mx.uam.vehiculos; /** * Clase Vehiculo. * * @author Humberto Cervantes * @version 1.0 */ abstract public class Vehiculo { protected String tipo; private Motor m; 29 /** * Este es el constructor de la clase Vehiculo * @param m Un objeto motor * @return nada */ public Vehiculo(Motor m) { this.m=m; } Javadoc: documentación Se utiliza el comando javadoc (Java Documentation) javadoc -d docs/javadoc/ -sourcepath src/ mx.uam.vehiculos Desde el directorio raíz esto crea el directorio docs/javadoc Proyecto src build docs javadoc 30 mx/uam/vehiculos resources index.html Javadoc: documentación 31 Empaquetamiento Permite empaquetar un conjunto de archivos en un solo archivo JAR (Java Archive) Facilita envío (compresión) Seguridad (se puede firmar el archivo) Sellado Versionamiento .java 32 javac .class jar .jar - .class - recursos - manifest.mf Empaquetamiento (2) Se utiliza el comando jar jar cvf dist/vehiculos.jar -C build/ mx/uam/vehiculos/ Desde el directorio raiz Hay que crear el directorio dist antes Proyecto src build docs dist vehiculos.jar 33 Ejecución desde JARs Los JAR se ponen en el classpath java -classpath dist/vehiculos.jar mx.uam.vehiculos.Principal desde el directorio raiz 34 Síntesis El SDK de Java provee comandos para Compilar (javac) Documentar (javadoc) Empaquetar (jar) Ejecutar (java) Sin embargo desarrollar únicamente usando estos comandos tiene inconvenientes Complicado Muchas opciones Difícil de repetir Se puede hacer un script, pero no es flexible No es portable 35