Download Introducción a Java - Dr. Humberto Cervantes

Document related concepts
no text concepts found
Transcript
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