Tema 1. Introducción a JAVA Historia Características Plataforma Java Entorno de desarrollo Ejemplo: Hola mundo Estructura general de un programa Java 1 Historia de Java (i) Surge en 1991: Sun Microsystems diseña un lenguaje de programación para electrodomésticos Reducida potencia de cálculo y reducida memoria → Lenguaje sencillo capaz de generar código de tamaño reducido Distintas CPUs y en continuo cambio: Desarrollo de un código neutro independiente del tipo de electrodoméstico El código neutro es interpretado por una máquina virtual: Java Virtual Machine (JVM), que lo convierte a código específico de la CPU Problema: Ninguna empresa se interesó por el lenguaje 2 Historia de Java (ii) En 1995 se introduce como lenguaje de programación de ordenadores Clave del éxito: La incorporación de un intérprete Java en la v2.0 de Netscape Navigator produjo una revolución en Internet A principios de 1997 apareció Java 1.1. Mejora sustancial de la 1ª versión A finales de 1998 nació Java 1.2 → JAVA2 Ampliación de Java 1.1 Es el que estudiaremos 3 Características de Java Java: Objetivo de Java: Lenguaje de programación + plataforma software Permitir el desarrollo de aplicaciones robustas, seguras y de altas prestaciones sobre múltiples plataformas en redes distribuidas y heterogéneas. Lenguaje de programación Java: · Simple · Arquitectura neutral · Orientado a objetos · Portable · Distribuido · Altas prestaciones · Interpretado · Multitarea · Robusto · Dinámico · Seguro 4 Simple y orientado a objetos Lenguaje simple: Sintaxis similar a C++, pero sin las complejidades de éste (no hay punteros) Orientado a objetos: Dispone de un gran número de clases (API: Application Programming Interface) No existen funciones libres (a diferencia de C++) Dispone de tipos primitivos (como en C++) No posee templates (característica importante de C++) 5 Robusto Comprobaciones restrictivas en tiempo de compilación. Ej: No se permite usar variables sin inicializarlas ni herencia múltiple. Mecanismos de manejo de excepciones en tiempo de ejecución Eliminación de las características del lenguaje que pueden conducir a errores (Ej: punteros). Gestión de memoria de forma automática. No se permite el acceso directo al hardware ni a la memoria. 6 Seguro Java implementa mecanismos de seguridad que limitan el acceso a recursos de las máquinas donde se ejecuta la aplicación, sobre todo en los Applets Aplicaciones que se cargan desde un servidor y se ejecutan en el cliente 7 Arquitectura neutral y portable Java: diseñado para implementar aplicaciones que deben ser ejecutadas en entornos de redes distribuidas. Problemas: Múltiples arquitecturas hardware Diversos sistemas operativos Solución: El compilador genera un código neutral intermedio: bytecodes Este código es interpretado sobre la maquina virtual de Java (Java Virtual Machine, JVM) La JVM convierte el código neutro al código particular de la máquina 8 Arquitectura neutral y portable Lenguaje Java: compilado e interpretado Java Virtual Machine (JVM) bytecodes 9 Altas prestaciones Java es interpretado Compiladores JIT (Just In Time) Sus prestaciones no son excesivamente altas Conforme cargan las aplicaciones Java generan el código máquina correspondiente La ejecución se realiza a velocidad de código compilado Código nativo Las secciones de cálculo intensivo pueden ser rescritas en código máquina nativo 10 Interpretado, multitarea y dinámico Interpretado Multitarea (multithreading) El intérprete Java puede ejecutar bytecodes sobre cualquier máquina en la que el intérprete haya sido portado Java permite construir aplicaciones multitarea (múltiples hilos de ejecución) Dinámico Las clases son enlazadas sólo conforme se necesitan Puede enlazarse código desde múltiples fuentes (incluido Internet) 11 Plataforma Java Java: Lenguaje de programación + plataforma software Plataforma software sobre otras plataformas hardware Componentes: Máquina virtual de Java (JVM) Interfaz de programación de aplicaciones (API) de Java Agrupación de librerías de clases e interfaces, conocidas como paquetes (packages) 12 Plataforma Java java.lang: Colección de tipos base, declaraciones de ‘Object’ y ‘Class’, threads, excepciones, wrappers para los tipos de datos primitivos, y otras clases fundamentales. Único paquete que se incluye automáticamente. java.io: Clases para manejar entradas y salidas java.net: Clases de soporte para redes: sockets, interfaces telnet y URLs. java.util: Clases útiles: estructuras genéricas, manejo de fecha jawa.awt: Clases para crear interfaces gráficas y hora, strings, números aleatorios... 13 El entorno de desarrollo Dos versiones de Java (http://java.sun.com) Edición estándar (JSE: Java Standard Edition) Edición empresarial (J2EE: Java Enterprise Edition) Productos J2SE: JRE (Java 2 Runtime Environment): Entorno de ejecución de Java 2 JDK (Java 2 Software Development Kit): Kit de desarrollo del software de Java JVM + API de Java + comp. que permiten la ejecución Superconjunto JRE: JRE + herramientas de desarrollo (compiladores, depuradores,…) Actualmente: Java SE 6 (JDK 6) 14 El entorno de desarrollo Componentes plataforma J2SE: 15 El compilador de Java Compilador del JDK: javac.exe Realiza un análisis de sintaxis del código escrito en los ficheros fuente de Java (con extensión *.java). Si no encuentra errores, genera los ficheros compilados (con extensión *.class). Si hay errores, indica la línea o líneas erróneas. 16 La Java Virtual Machine (JVM) El compilador genera un código neutro: Java Virtual Machine Interpreta el código neutro y lo convierte a código particular de la CPU La JVM dispone de numerosas opciones Los bytecodes → ficheros compilados con extensión *.class JIT(Just In-Time compiler) → mejora de 10 a 20 veces la velocidad de ejecución Intérprete del JDK: java.exe 17 Ejemplo: Hola mundo 1. 2. 3. 4. 5. 6. 7. 8. 9. import java.io.*; // Clase HolaMundo class HolaMundo { public static void main(String arg[]) { System.out.println("Hola Mundo"); } } Debe guardarse en un archivo llamado HolaMundo.java (el nombre del archivo debe coincidir con el de la clase) 18 Ejemplo (i) import java.io.*; Importa las clases del package java.io. Hace posible acceder a las clases utilizando nombres cortos. 1. Ejemplo: se puede acceder a la clase FileReader simplemente con el nombre FileReader en lugar de con el nombre completo java.io.FileReader. 19 Ejemplo (ii) 2. // Clase HolaMundo Comentarios (como en C++) También es válido: /* Clase HolaMundo */ 3. class HolaMundo Indica que se va a definir la clase HolaMundo En Java todo son clases: no se puede definir una variable o una función fuera de una clase La clase HolaMundo tiene como finalidad acoger al método main 20 Ejemplo (iii) 5. public static void main(String arg[]) La ejecución del programa comienza en main public: indica que la función puede ser utilizada por cualquier clase static: indica que es un método de clase → puede ser utilizado aunque no sea creado ningún objeto de la clase HolaMundo. void: indica que el método no tiene valor de retorno Argumento del método: array de cadenas de caracteres. Son parámetros que se pasan al programa en el momento de comenzar la ejecución 21 Ejemplo (iv) System.out.println("Hola Mundo"); 7. Imprime una cadena de caracteres (string) en la salida estándar del sistema Se utiliza el método println que está asociado con una variable static, llamada out, perteneciente a la clase System (del package por defecto java.lang) Una variable miembro static, también llamada variable de clase, es una variable miembro única para toda la clase, y que existe aunque no se haya creado ningún objeto de la clase 22 Ejemplo (v) Compilación del programa: javac HolaMundo.java Genera el archivo HolaMundo.class Ejecución del programa: java HolaMundo Provoca: 1. 2. 3. El intérprete cargue el archivo HolaMundo.class Encuentre la clase del mismo nombre con un método público y estático llamado main Proceda a ejecutar el programa invocando dicho método 23 Estructura general de un programa Java (i) Programa Java: Ficheros Java: Clase que contiene el programa principal Clases de usuario: específicas de la aplicación Fuentes: *.java Compilados: *.class Fichero fuente: Puede contener más de una clase Sólo una puede ser public (su nombre coincidirá con el del fichero) 24 Estructura general (ii) Aplicación: varios ficheros *.class Cada clase realiza funciones particulares Modularidad e independencia entre clases La aplicación se ejecuta por medio del nombre de la clase que contiene la función main, sin la extensión class. Las clases se agrupan en packages: librerías de clases Si no se definen pertenecientes a un package, se utiliza un package por defecto → el directorio actual 25