Académique Documents
Professionnel Documents
Culture Documents
1 Sesin (15-Mar): Descripcin del lenguaje (I) 2 Sesin (22-Mar): Descripcin del lenguaje (II) 3 Sesin (29-Mar): Programacin en entornos grficos 4 Sesin (5-Abr): Prctica guiada.
Kits de desarrollo Java, versiones 1.1.4 y 1.4.0 Entornos de ejecucin, versin 1.4.0 Documentacin de las APIs, versiones 1.1.4 y 1.4.0 Tutorial versin 1.4.0 Especificacin del lenguaje Transparencias en formato PDF
1994
1996
2001
Lenguaje Oak
Software universal para electrnica de consumo (televisin interactiva)
Lenguaje Java
Internet Revisin del lenguaje: versines 1.02, 1.1.4, 1.2, 1.3
Tecnologa Java
Redes inalmbricas, telefona movil, computacin distribuida..
Hola.java Hola.java
Hola.class Hola.class
Intrprete
Intrprete
Intrprete
PC Compatible (Windows)
Tecnologa Java
n n n n
Controlada por la compaia Sun Microsystems Entorno de desarrollo gratuito: http://www.java.sun.com Entorno de desarrollo: Java Developtment Kit (JDK J2SE) Entorno de ejecucin: Java Runtime Enviroment (JRE)
Mquina virtual Java (JVM) Java Plugin (Mquina virtual universal) Java Hotsopt (Java Web Start) : Ejecucin por red
n n n n n
JINI / JavaSpaces: Entornos de computacin distribuida (agentes) JAIN : Libreras productos telecomunicaciones Servlets : Desarrollo servidores web APIs Especiales: XML, agentes, reconocimiento de voz, grficos 3D... Lenguaje JavaScript
Acceso controlado a memoria y recursos Gestin de errores mediante excepciones Liberacin automtica de memoria (garbage collector)
n Desarrollo de applets
Modelo genrico de desarrollo en entornos grficos Multitarea Acceso a bases de datos Acceso a red Computacin distribuida Criptografa, tipos abstractos de datos, compresin de ficheros, tratamiento de grficos, visualizacin en 3D, multimedia, reconocimiento de voz, tecnologa CORBA, XML, etc.
n Posibilidad de integracin de cdigo nativo n Aplicaciones ms lentas que las desarrolladas con C/C++ n Ejecucin dependiente de la mquina virtual (intrprete)
IAESTE/CVR 2003 - Curso de Iniciacin a Java 10
No existe preprocesador (macros, #define, ficheros cabecera, ...) No existen funciones independientes ni variables globales todo se encuentra encapsulado en clases. El punto de entrada es una funcin especial de una clase.
Acceso a elementos de array. Inicializacin de arrays y strings. Operador de concatenacin de cadenas Clases internas, sincronizacin de procesos, captura de excepciones.
11
Java dispone de tipos primitivos y clases. No existe definicin de tipos (typedef), estructuras (struct), uniones (union) ni enumeraciones (enum ). Se reemplazan por los conceptos de clase y objeto. No existen modificadores de tamao (short, long, ..) o signo (signed, unsigned). Todos los tipos tienen tamao y longitud definido. Los valores lgicos se representan por un nuevo tipo, boolean, en lugar de por enteros. Los caracteres siguen la convencin Unicode (16 bits). No existen conversiones automticas entre tipos donde se pueda perder informacin.
n n
12
En Java no existen punteros. El concepto ms parecido es el de referencia a un objeto. No existe aritmtica de punteros para acceder a elementos de arrays, se utiliza la sintaxis basada en corchetes e ndices. No se reserva memoria para datos (malloc, ..). En su lugar se crean objetos (operador new). No existen punteros a funciones (callbacks). En su lugar se utilizan mtodos de objetos. La liberacin de memoria de datos descartados (free, ..) es automtica (recoleccin de basura garbage collector)
13
Las condiciones se expresan mediante valores de tipo boolean en lugar de enteros. No hay sentencia goto . Las sentencias break y continue pueden tener una etiqueta para salir de bucles internos.
n n
n Libreras:
n
En java existe un nivel extra de jerarqua: Los paquetes (packages) son colecciones de clases relacionadas, las cuales encapsulan funciones (y datos). La etapa de enlazado (link ) es automtica, y se produce en la compilacin y en la ejecucin.
14
Sintaxis de Java
n Se distingue entre maysculas y minsculas. n Comentarios tipo C ( /* ... */ ) y de linea ( // ... ) n La ejecucin de un programa tiene como unidad
Declaracin de variables. Asignacin de variables (con evaluacin de expresiones). Llamadas a funciones (denominados mtodos en Java) Estructuras de control
15
Operadores (I)
n Operadores aritmticos: devuelven un valor del tipo ms
El operador / aplicado a enteros devuelve el cociente entero. Si el divisor es 0 se genera una excepcin. El operador / aplicado a reales calcula la divisin real. Si el divisor es 0 el resultado es infinito (no se produce error). El operador % calcula el resto, tanto en enteros como en reales. Para ambos casos se cumple la frmula: r = a % b n Z tal que (0 r < |b|) y (nb + r = a)
17
Operadores (II)
n Operadores lgicos: admiten valores de tipo boolean (que
&&
||
(true o false ).
n n
Al comparar tipos primitivos distintos, se promociona al ms amplio (excepto boolean que slo es compatible con s mismo). Al comparar variables que almacenan referencias a objetos slo tiene sentido los operadores == y !=, y el resultado es el de igualdad de referencias , no el de igualdad de objetos.
==
!=
<
>
<= >=
18
Operadores (III)
n Operadores de bit: admiten valores de tipo entero y devuelven
&
n << d : Desplaza d posiciones a la izquierda los bits del valor n, rellenando con ceros por la derecha. n >> d : Desplaza d posiciones a la derecha los bits del valor n, rellenando con el bit de signo por la izquierda. n >>> d : Desplaza d posiciones a la derecha los bits del valor n, rellenando con ceros por la izquierda.
19
Operadores (IV)
n Concatenacin de cadenas: El operador + aplicado dos
parmetros de tipo String crea otro objeto de tipo String que almacena el resultado de concatenar las cadenas.
n Conversin de tipos (casting): Al igual que en C, es posible
forzar a que un valor de un tipo se convierta en el valor de otro tipo distinto, con la construccin (tipo_destino ) expresin.
n
En tipos primitivos no esta permitido convertir un valor boolean en un valor de otro tipo. No se permite la conversin entre tipos primitivos y referencias . La conversin entre referencias tienen restricciones (herencia) que impiden el acceso a zonas de memoria externas a los datos mediante este mecanismo (algo que si es posible en C)
n n
20
10
Operadores (V)
n Creacin de objetos: El operador new reserva memoria, crea
e inicializa un nuevo objeto pertenenciente a la clase que se indica y utilizando la funcin constructora cuyos parmetros concuerdan con los presentados. La sintaxis es ligeramente distinta con la clase array. new clase(parmetros ) new array[longitud ] Devuelve una referencia (no el propio objeto) al objeto que se acaba de crear.
n Operador ternario: Al igual que C, Java dispone del operador
21
Operadores (Asignacin)
n Asignacin de variables:
Se evala la expresin y si el valor es compatible se asigna a la variable, en caso contrario se genera una excepcin. Los tipos primitivos numricos son compatibles si no se pierde informacin al convertir el valor. char es compatible con int. Los tipos primitivos y las referencias a objetos son incompatibles.
n n
22
11
Declaracin de variables
n Pueden realizarse en cualquier lugar del cdigo. n El mbito de las variables es el del bloque donde han sido
declaradas.
int i=3,j; // Declaracin de i con inicializacin char a; long l=200L; j = (i << 3) & 0xFFFFC000; l *= (i++)%10; // Equivale a: l=l*(i%10); i=i+1; j = (int) l; // Sin casting dara error boolean test; /* La siguiente linea da error al no haber asignado a */ test = a != 'z'; test = test && (i<--j); // Primero decrementa j
23
Estructuras de control
n Las mismas que en lenguaje C excepto goto (eliminada) y el
12
Declaracin de funciones
n Sintaxis similar a C, aunque los parmetros se deben definir
una clase. En la prctica es suficiente con asumir que no hay funciones aisladas , sino que estan incluidas/asociadas a una clase.
boolean es_primo(int n) { if(n<3) return(true); for(int d=2; d<n; d++) { if(n%d==0) return(false); } return(true); } void contar(int a,int b) { int i=a; do { System.out.println(""+i); } while(i++<b) }
25
La funcin de Euler del valor entero positivo n nos devuelve el nmero de valores entre 1 y n-1 que son primos respecto a n. La funcin de Euler de 0 y 1 es 1. Un nmero es primo respecto a otro cuando su mximo comn divisor es 1. Para hallar el mximo comn divisor de a y b basta con probar desde min(a,b) hasta 1 parando al encontrar un valor que divida exactamente a y b . Un valor i divide exactamente a n si el resto de dividir n entre i es cero.
java Euler 6 2 java Euler 7 6
public class Euler { public static void main(String[] args) { int n = Integer.parseInt(args[0]); System.out.println(""+euler(n)); } ... }
26
13
Concepto de Clase
n Generalmente, las funciones definidas en una clase son las que
deben actuan sobre los datos definidos en ella (es decir, existe una conexin conceptual datos- operaciones fundamentales sobre ellos )
n En informtica, este modelo se denomina Tipos Abstractos de
Datos (TADs): No se pueden definir tipos de datos sin hacer referencia a las operaciones que se pueden hacer con ellos.
n Este modelo (y la programacin orientada a objetos es una
extensin suya) aboga por hacer que estas referencias sean explcitas: Los datos deben definirse junto a las operaciones.
n El concepto de clase es una manera de obligar al programador
a seguir este modelo cuando use tipos existentes o defina nuevos tipos de datos en un programa.
27
Calcular la distancia horizontal entre dos puntos. Crear un punto con unas determinadas coordenadas. Crear un punto en el origen. Mover el punto incrementando sus coordenadas Obtener un texto que describa el valor del punto
registro (o un array) y definiramos funciones. Estos elementos pueden estar diseminados en mltiples ficheros.
28
14
29
30
15
// Funciones que crean puntos (constructores) Punto() { x = 0; y = 0; } Punto(int x0, int y0) { x = x0; y = y0; } // Funciones que operan sobre el punto (mtodos) public int disthorz(Punto otro) { return(Math.abs(x-otro.x)); } public void desplazar(int dx, int dy) { x += dx; y += dy; } }
Fichero Punto.java
31
32
16
donde ademas podemos incluir funciones que actuan sobre los campos del registro (en realidad son ms que eso).
n Un objeto es una instancia (materializacin) de una clase. Una
clase es nicamente una definicin, no un valor concreto. Por ejemplo, la palabra entero define un tipo de datos, y los valores 3 y 1 seran instancias de enteros. Se puede asociar tipo de datos clase, valor concreto objeto.
n Cuando se llama a una funcin de un objeto concreto,
implicitamente se asume que se va a realizar una operacin que afecta o en la que interviene el objeto (es un parmetro implcito en la llamada).
33
ejecuta una funcin constructora , aquella cuyos parmetros coinciden con los utilizados en la creacin. Las funciones constructoras no tienen nombre.
n El objetivo de las funciones constructoras es inicializar el objeto
comportan como la asignacin entre punteros. No se puede asignar directamente un objeto a otro.
IAESTE/CVR 2003 - Curso de Iniciacin a Java 34
17
Cuando tenemos funciones de propsito general que no tienen una asociacin clara con un tipo de datos concreto (ejemplo, funciones que devuelven informacin sobre el sistema operativo). Conjuntos de funciones que se identifican ms por lo que hacen que por los datos sobre los que actan. Por ejemplo, funciones que hacen clculos matemticos.
Su objetivo es agrupar funciones (y datos) bajo un nombre comn No se pueden crear objetos cuyo tipo sea esa clase.
35
Variables estticas
n Una funcin esttica se declara incluyendo la palabra static en
su cabecera, antes del tipo de retorno. Se asume que la funcin no va a actuar sobre objetos de la clase, sino que se define en ella a efectos de agrupacin con otras funciones relacionadas.
n Anlogamente, tambin es posible definir variables estticas :
datos que no van a estar asociados a un objeto, sino que se incluyen en una clase simplemente para agruparlos bajo el nombre de la clase.
n Al no pertenecer a objetos del tipo de la clases, estos datos son
36
18
funciones que realizan clculos matemticos y constantes con significado matemtico. Se muestra una parte de su contenido (slo las cabeceras de las funciones):
static double E = 2.718281828459; static double PI = 3.141592653589; static static static static static static static static ... double random() long round(double a) double ceil(double a) double floor(double a) double pow(double base,double exp) double exp(double a) double log(double a) double sqrt(double a)
37
funciones relacionadas con el sistema y constantes que representan los ficheros de entrada y salida estandar:
static InputStream in; static PrintStream out; static void arraycopy(Object fnt, int ifnt, Object des, int ides, int n) static long currentTimeMillis() void exit(int status) ...
38
19
Arrays
n Los arrays son tipos estructurados, y por lo tanto se representan
El acceso a elementos se realiza mediante la notacin [indice] Los ndices son enteros y comienzan por 0 Se pueden inicializar directamente
n Diferencias principales:
n
No pueden cambiar de tamao. El nmero de elementos queda fijado en su creacin. Existe un campo, length, con ese valor. Antes del acceso a un elemento, se comprueba internamente si esta en el rango adecuado, en caso contrario se genera una excepcin.
39
40
20
double media(double[] vector) { double suma = 0.0; for(int i=0; i<vector.length; i++) { suma += vector[i]; } return(suma/vector.length); }
41
Cadenas de caracteres
n Las cadenas de caracteres se podran representar como arrays
de valores char (como en C), pero Java define en su librera estandar dos clases que agrupan las principales operaciones que se realizan sobre cadenas de caracteres.
n La clase String (java.lang.String) representa cadenas de
String tiene un tratamiento especial en la sintaxis del lenguaje, para facilitar su uso (este tratamiento especial est tomado del lenguaje Pascal)
42
21
String sin utilizar new ni llamar a constructores de la clase, basta simplemente con encerrar texto entre comillas dobles.
n Existe el operador + que aplicado a dos objetos de tipo String
crea y devuelve otro objeto de tipo String con la concatencin del contenido de los dos objetos originales.
n Si uno de los argumentos de + es un objeto String y el otro no
(otro tipo de objeto o un valor primitivo), este otro argumento se traduce a texto y se crea un objeto String conteniendo ese texto, que se concatena al objeto String original.
43
Cadena vaca Cadena con caracteres de 7 bits Cadena con caracteres Unicode
boolean equals(Object cad) Compara para igualdad con cad int compareTo(String cad) int indexOf(String subcad) Compara lexicogrficamente con cad Busqueda de subcadena cad
44
22
Crea otra cadena que contiene los caracteres String substring(int ini, int fin) desde la posicin ini (inclusive) hasta la posicin fin (excluido) String toLowerCase( ) String toUpperCase( ) char[] toCharArray( ) Crea otra cadena con los mismos caracteres pero en minsculas. Crea otra cadena con los mismos caracteres pero en maysculas. Crea un vector que contiene los caracteres de la cadena y lo devuelve.
45
23
Modularidad en Java
n En Java un programa consta de una serie de definiciones de
seguramente se crearan objetos (tanto definidos por las otras clases del programa como definidos en la librera estandar) y se llamaran a sus mtodos o se accederan a sus propiedades.
n Las clases se agrupan en libreras (denominadas paquetes
47
(excepto las clases internas ) cuyo nombre (no la extensin) debe ser igual al de la clase.
n Si la clase pertenece a una librera o sublibrera, el fichero que
almacena la clase debe estar en un (sub)directorio cuyo nombre y jerarqua coincide con la de la (sub)librera.
n Por ejemplo, si la clase Punto perteneciara a la sublibrera
geometra de la librera matemticas, su cdigo compilado debera estar en un fichero llamado Punto.class y en el directorio <raizjava>\matemticas \geometra\
n < raizjava> representa el directorio raiz de las clases Java. n El nombre completo de la clase sera
Matemticas.Geometra.Punto
IAESTE/CVR 2003 - Curso de Iniciacin a Java 48
24
que pertenezcan a libreras distintas (es decir, que su nombre completo sea distinto).
n Si un programa no define libreras, se sobreentiende que las
clases que define pertenecen a lo que se denomina librera local, una librera sin nombre a la que pertenecen todas las clases que estn en el mismo directorio que la que se ejecuta en primer lugar.
n Para no tener que usar nombres completos de clases, es
posible indicar al principio del fichero las clases concretas (o incluso libreras) que se van a usar para que se sobreentienda que el nombre de las clases est abreviado.
import matemticas.geometra.Punto; import java.io.*;
IAESTE/CVR 2003 - Curso de Iniciacin a Java 49
Constante de System que almacena una referencia a un objeto PrintStream (fichero de texto de salida) conectado a la salida estandar del sistema (tipicamente la pantalla)
mtodo de la clase PrintStream cuyo objetivo es escribir una linea de texto en el fichero C: println(out,"Hola!")
objeto de tipo String que se ha creado e inicializado usando la sintaxis abreviada de cadenas de caracteres
50
25
de moneda a otro.
n Recibe como argumentos una serie de valores de cambios de
y cambioi,i+1 es el valor por el que hay que multiplicar para cambiar de monedai a monedai+1
n El programa entra en un bucle el que pregunta de que moneda
a que otra hay que cambiar, pregunta la cantidad de la primera moneda y presenta el cambio.
51
52
26
funcin que lea datos en formato texto y realize la traduccin a valores enteros o reales.
n Por lo tanto, para leer de teclado (donde el formato no es
binario, sino texto) la nica alternativa es usar la funcin readLine() de la clase DataInputStream. Esta funcin lee una linea de texto, que luego debe traducirse a los valores apropiados (enteros, reales, etc.)
n Existen funciones para realizar la traduccin, pero un objetivo
Algoritmos
n Conversin de monedas: 200 ptas (/166.386) 1.202024 (/1.05) 1.14478 $
0 1 2
moneda[ ] factor[ ]
Ptas 166.386
0
Euros 1.05
1
Dolares
2
x10
3
x1
4
x0.1
5
x0.01
6
x0.001
54
27
55
56
28
58
29
59
30
Funciones estticas: las funciones estan asociadas a la clase por motivos de organizacin. Para llamar a una funcin esttica se usa la sintaxis: clase.funcion(parmetros ) Mtodos: se sobreentiende que actuan sobre objetos del tipo de la clase, ya sea cambiando su estado o devolviendo informacin sobre ellos. Llamada a mtodos: objeto.funcion( parametros ) En este ltimo caso es como si el objeto fuera un parmetro ms de la funcin.
(punteros) a objetos.
62
31
es inicializar un objeto: Su nombre es igual al de la clase y se diferencian en los parmetros. Se llaman al ejecutar new .
n Los objetos se crean e inicializan utilizando el operador new y
de referencias. Por eso no es posible comparar directamente su contenido mediante ==, ni copiar directamente el contenido de un objeto en otro (clonar) mediante =.
n Los datos definidos en una clase son variables globales para
las funciones definidas en la clase: Las funciones pueden actuar directamente sobre ellos.
n Si los datos son estticos, se sobreentiende que son constantes
IAESTE/CVR 2003 - Curso de Iniciacin a Java 63
datos independiente de la implementacin, tan slo se tienen en cuenta las operaciones que se pueden realizar sobre los valores de ese tipo y en como afectan a su estado.
n Una interfaz define un TAD (operaciones) pero sin especificar
su implementacin.
n Una clase define un TAD junto con una implementacin
interfaces.
n Una clase que extiende a otra hereda sus datos y operaciones,
32
Cuando se realiza una operacin se asume que actua sobre el objeto asociado.
n Una variable cuyo tipo sea una clase puede almacenar
referencias a objetos cuyo tipo sea esa clase o cualquier clase que la haya extendido.
n Es decir, que las clases extendidas pueden adoptar la
referencias a objetos cuyo tipo sea cualquier clase que implemente la interfaz.
n La programacin orientada a objetos es una metodologa de
programacin que propugna la representacin de entidades mediante clases, el establecimiento de jerarquias de herencia (extensin) y contrato (implementacin) entre ellas, y la codificacin de programas mediante las interacciones entre objetos.
n Los objetivos son lograr, entre otras cosas:
n n n
33
67
public implica que se pueden usar en cualquier sitio. protected restringe su uso al interior de clases derivadas private restringe su uso al interior de la propia clase
34
// Los constructores deben definirse (su nombre // est asociado a la clase) pero se pueden usar // los de Vehiculo mediante la palabra super public int v5; // Nuevo dato Moto() { super(); } // Constructor basado en el de Veh. Moto(double d) {..} // Nuevo constructor public void f2() {..} // Metodo redefinido y publicado public void f5() {..} // Nuevo mtodo }
69
objetos tanto de tipo Vehiculo como de Moto. (toda moto es un vehculo). Sin embargo, las variables de tipo Moto no pueden almacenar referencias de objetos que sean Vehiculo (no todo vehculo es una moto).
n Para saber si una variable almacena un objeto de un tipo
una variable de un tipo ms general se utiliza el casting. Sin embargo, se debe estar seguro de que el objeto realmente pertenece al tipo al que se va a convertir la referencia.
70
35
71
36
73
74
37
76
38
78
39
Gestin de errores
n Definiremos error como aquella situacin anmala en la que
una funcin no puede realizar su tarea, generalmente porque los parmetros o el entorno tienen unos valores o estados inadecuados: pedir la raiz cuadrada de un nmero negativo, pedir abrir un fichero que no existe, pedir leer de una conexin por red que se acaba de cerrar externamente, etc.
n Es imposible disear las funciones para que puedan trabajar
con todos los valores posibles de los parmetros o del estado. Adems, el que se produzca un error no siempre es sntoma de la existencia de un fallo en el programa (por ejemplo, el cierre de la conexin de red): Simplemente, son situaciones que se deben incorporar a la lgica del programa y disear acciones para tratarlas.
79
80
40
no detectarlos:
double sqrt(double x) { if(x<0.0) { x = -x; } ... }
81
El cdigo asociado a la deteccin de errores complica y oscurece un programa, hace que sea ms ineficiente (las mismas condiciones son evaluadas dos veces) y estimula el uso de goto para acceder a el cdigo que trata el error. Estas estrategias no obligan al programador a detectar los errores. De hecho, debido a los problemas anteriores, existe una tentacin muy fuerte de suponer que los errores no se van a producir y no crear cdigo para detectarlos ni tratarlos (este enfoque es en s mismo uno de los principales errores de programacin).
82
41
para su deteccin.
n Los errores no tienen porque ser detectados y tratados en el
sitio en que se producen: Se permite que se detecten y se traten en el punto que decida el programador. Esto permite el separar el cdigo "normal" (sin errores) del cdigo "reparador" (tratamiento de errores).
n Es posible impedir que el programador ignore ciertos errores,
83
Generacin de excepciones
n Las excepciones (seales de error) se generan en dos pasos,
Throwable, al cual le podemos dar una cadena de texto informativa del error, y que internamente incluye informacin sobre el punto del programa en que se ha creado.
n Se genera el error con la sentencia throw objeto_Throwable n A partir de ese punto se rompe la secuencia de ejecucin del
programa: Se salta directamente a la parte del cdigo que trata ese error.
n Si la funcin en que se genera el error no tiene cdigo para
tratarlo, se regresa al punto en que fue llamada y se vuelve a generar, y asi hasta que es tratado o se sale del programa.
IAESTE/CVR 2003 - Curso de Iniciacin a Java 84
42
Exception
Error
RuntimeException
85
43
errores). Cuando se produce una excepcin, se va comprobando cada una de ellas secuencialmente hasta detectar una cuyo parmetro sea compatible: En ese punto se ejecuta su cdigo y se salta al punto del programa justo despues de la construccin try-catch (o a la parte finally si existe).
n Slo se ejecutar una de las partes catch (o ninguna), aunque
existan varias con parmetros compatibles: La que est definida primera es la que se ejecuta.
n La parte finally es opcional: Si aparece, se ejecuta siempre,
de una parte catch. En caso contrario el error "sigue vivo" y se propaga a la funcin que llam aquella donde se ha generado (y no se ha tratado) el error.
n En ltimo trmino, si la funcin main no trata el error, el
como que se ha tratado el error: La finalidad de ese cdigo no es tratar errores, sino asegurar de que ciertas acciones (como cerrar un fichero abierto) se llevan a cabo pase lo que pase.
88
44
Tipos de excepciones
n En Java se clasifican los errores en tres categoras, que se
errores tan serios (inestabilidad del sistema operativo, etc.) que se sobreentiende que es imposible tratarlos. No es obligatorio detectarlos.
n Errores "comunes": Aquellos cuyas clases derivan de Runtime.
Son errores que deberan detectarse y tratarse, pero se refieren a operaciones tan comunes (acceso fuera de ndice en un array, divisin por cero) que obligar a tratarles provocara la rebelin de los programadores. Ademas se sobreentiende que si suceden indican un fallo en el programa.
n Resto de errores: Los que derivan de Exception. Es obligatorio
detectarlos y tratarlos.
IAESTE/CVR 2003 - Curso de Iniciacin a Java 89
Clases comunes
IOException Exception EOFException FileNotFoundException ArithmeticException
ArrayIndexOutOfBoundsException
RuntimeException
StringIndexOutOfBoundsException
ClassCastException ClassNotFoundException
IAESTE/CVR 2003 - Curso de Iniciacin a Java 90
45
Delegacin de tratamiento
n Existe el problema de que es posible que la funcin donde se
genera el error no tenga los medios ni la informacin adecuada para poder tratarlo, lo cual seguramente si que pueda hacer la funcin que la llam, que sabe con qu propsito lo hizo.
n Para manejar estas situaciones, Java permite que las funciones
delegen el tratamiento del error a aquellas otras que la han llamado. Lo nico que deben hacer es declarar en su cabecera aquellos errores cuyo tratamiento es obligatorio que se pueden producir en ellas y que ellas no van a tratar.
n Esa declaracin se realiza aadiendo a la cabecera de la
funcin la palabra reservada throws seguida de una lista de clases derivadas de Exception que representan errores no tratados que se pueden producir.
91
46
94
47
95
Conexiones de red
applet
96
48
97
98
49
BufferedReader Reader
char char read() read() boolean boolean ready() ready() long long skip(long skip(long n) n) void void close() close() BufferedReader(Reader BufferedReader(Reader r) r) String String readLine() readLine()
FileReader
FileReader(File FileReader(File f) f) FileReader(String FileReader(String fich) fich)
99
Writer
void void write(char[] write(char[] b) b) void void write(String write(String s) s) void void write(int write(int c) c) void void flush() flush() void void close() close()
PrintWriter
PrintWriter(OutputStream PrintWriter(OutputStream s) s) PrintWriter(Writer PrintWriter(Writer w) w) print(..) print(..) println(..) println(..)
FileWriter
FileWriter(File FileWriter(File f) f) FileWriter(String FileWriter(String fich) fich)
IAESTE/CVR 2003 - Curso de Iniciacin a Java 100
50
InputStream
byte byte read() read() int int available() available() long long skip(long skip(long n) n) void void close() close()
int int readUnsignedByte() readUnsignedByte() double double readDouble() readDouble() String String readUTF() readUTF() String String readLine() readLine()
FileInputStream
FileInputStream(File FileInputStream(File f) f) FileInputStream(String FileInputStream(String fich) fich)
101
OutputStream
void void write(byte[] write(byte[] b) b) void void write(int write(int b) b) void void flush() flush() void void close() close()
DataOutputStream
DataOutputStream(OutputStream DataOutputStream(OutputStream s) s) writeByte(byte writeByte(byte n) n) writeInt(int writeInt(int n) n) writeDouble(double writeDouble(double n) n) writeUTF(String writeUTF(String cad) cad)
FileOutputStream
FileOutputStream(File FileOutputStream(File f) f) FileOutputStream(String FileOutputStream(String fich) fich)
IAESTE/CVR 2003 - Curso de Iniciacin a Java 102
51
File
File(String File(String fich) fich) File(File File(File dir, dir, String String fich) fich) boolean boolean delete() delete() boolean boolean renameTo(String renameTo(String s) s) boolean boolean mkdir() mkdir() boolean boolean exists() exists() boolean boolean isDirectory() isDirectory() boolean boolean canRead() canRead() boolean boolean canWrite() canWrite() String[] String[] list() list() String[] String[] list(String list(String comodin) comodin) long long length() length() String String getPath() getPath()
IAESTE/CVR 2003 - Curso de Iniciacin a Java
OutputStreamWriter
OutputStreamWriter(OutputStream OutputStreamWriter(OutputStream s) s)
InputStreamReader
InputStreamReader(InputStream InputStreamReader(InputStream s) s)
Entrada/Salida estandar:
System
in in : : InputStream InputStream out out : : PrintStream PrintStream
IOException
SecurityException
103
52
Librera java.util
java.util
Date Vector Dictionary Locale StringTokenizer
Representa una fecha. El constructor por defecto lo inicializa a la fecha actual. Representa un vector al que se pueden aadir y borrar elementos, acceder por ndice y por valor. Representa una asociacin de pares clave -valor. Permite aadir, borrar, buscar y ordenar por clave. Representa informacin sobre formatos numricos, de fecha y otras convenciones de cada pas. Permite analizar una cadena de texto extrayendo elementos (tokens) segn un formato especificado.
106
53
107
java.util.Locale
String String getDisplayCountry() getDisplayCountry() String String getDisplayVariant() getDisplayVariant()
java.lang.Number
int int intValue() intValue() long long longValue() longValue() double double doubleValue() doubleValue()
108
54
cualquier aparicin de {i,tipo,patrn } por el argumento i-simo ajustado a tipo y formateado segn patrn.
n n n
i es un nmero de 0 a 9 y se refiere al argumento args[i] tipo puede ser: number, time, date o choice Si tipo es number, el patrn es de la forma: ##,##0.## (# - dgito obligatorio excepto cero, 0 dgito obligatorio, coma separador de miles, punto separador de decimales). Si tipo es date o time el patrn puede ser short, medium , long o full.
109
110
55
Librera java.net
Socket
Socket(String Socket(String host, host, int int puerto) puerto) InputStream InputStream getInputStream() getInputStream() OutputStream OutputStream getOutputStream() getOutputStream() void void close() close()
ServerSocket
ServerSocket(int ServerSocket(int puerto) puerto) Socket Socket accept() accept() void void close() close()
URL
URL(String URL(String comando) comando) InputStream InputStream openStream() openStream()
111
Cliente
112
56
114
57
116
58
117
59
119
120
60
122
61
Entornos de ventanas
n Conceptos fundamentales n Programacin orientada a eventos n Clases fundamentales n Aplicaciones y Applets
123
La lectura de datos y la peticin de acciones se realizan mediante controles agrupados en ventanas (Interfaz grfica). Es el usuario quien dirige la entrada de datos, en lugar de la aplicacin. Existen dispositivos de entrada adicionales (ratn). Toda aplicacin consta de una ventana principal y varias ventanas adicionales (dilogos).
n n
El cdigo no es monoltico, est dividido en partes que se encargan de procesar cada evento relevante para la aplicacin. Es el sistema operativo quien se encarga de ejecutar el cdigo asociado a cada evento de cada aplicacin.
124
62
Controles (componentes): Entrada de datos y peticin de realizacin de acciones. Contenedores: Agrupan controles (y otros contenedores). Distribuidores (layouts): Organizan la posicin y tamao de los controles dentro de un contenedor, de acuerdo a unas reglas. Ventanas: Contenedores de nivel superior, que representan a la aplicacin.
125
dos partes separadas: Una se encarga de crear el interfaz de usuario (al comenzar la aplicacin) y la otra de realizar las tareas adecuadas respondiendo a las acciones del usuario (manejador de eventos).
n Las aplicaciones indican al sistema operativo cual es su
(evento), busca la aplicacin a la que va dirigida el evento (de entre todas las que se esten ejecutando) y llama a su manejador de eventos.
n El manejador de eventos ejecuta el cdigo asociado. Cuando
63
127
Los componentes son los del sistema operativo (se enlazan mediante cdigo nativo) El look de una aplicacin es el mismo que el del sistema operativo donde se ejecuta El conjunto de componentes y recursos disponibles es aquel que sea comn a todos los sistemas operativos
128
64
Los componentes son independientes del sistema operativo. El look de una aplicacin es el mismo en todos los sistemas operativos. El conjunto de componentes y recursos disponibles puede ser ms amplio que los que proporciona el sistema operativo.
129
Todos los eventos se gestionan de forma nica en la funcin handleEvent de la ventana principal. Esta funcin se llama para cada evento que se produce, sea relevante o no para la aplicacin. Este era el modelo original de Java, actualmente se soporta pero se desaconseja su uso (deprecated ).
La aplicacin proporciona cdigo para aquellos eventos que le interesan. El resto de eventos no se proporcionan a la aplicacin. Apareci en la versin 1.1.2. Requiere el uso de clases internas .
130
65
131
132
66
Label Checkbox
Canvas
Button
Container
Choice
List Scrollbar
Panel
Window
TextComponent
Applet
Dialog
Frame
TextField
TextArea
FileDialog
134
67
MenuItem
MenuBar
FlowLayout BorderLayout
Menu
CheckboxMenuItem GridLayout
PopupMenu
CardLayout
Distribuidores
Mens
135
CheckboxGroup FontMetrics
Tipos auxiliares
136
68
137
Componentes (I)
Component
void void add(PopupMenu add(PopupMenu menu) menu) Image Image createImage(int createImage(int ancho, ancho, int int alto) alto) void void doLayout() doLayout() void void repaint() repaint() void void setBackground(Color setBackground(Color fondo) fondo) void void setForeground(Color setForeground(Color motivo) motivo) void void setCursor(Cursor setCursor(Cursor cursor) cursor) void void setFont(Font setFont(Font fuente) fuente) void void setEnabled(boolean setEnabled(boolean activo) activo) void void setVisible(boolean setVisible(boolean visible) visible) Cada funcin que comienza por set tiene la correspondiente funcin get que devuelve el valor actual de la propiedad.
Component
Dimension Dimension getMinimumSize() getMinimumSize() Dimension Dimension getPreferredSize() getPreferredSize() boolean boolean handleEvent(Event handleEvent(Event evt) evt) void void paint(Graphics paint(Graphics g) g) Mtodos que no se deben llamar, sino reemplazar por clases que hereden de Componente. Definen la apariencia y la respuesta a eventos de nuevos componentes.
138
69
Componentes (II)
Label
static static int int LEFT LEFT static static int int CENTER CENTER static int RIGHT static int RIGHT Label Label(String (String texto, texto, int int alineacion) alineacion) String String getText() getText() void void setText(String setText(String texto) texto)
Canvas
Dimension Dimension getMinimumSize() getMinimumSize() Dimension Dimension getPreferredSize() getPreferredSize() void void paint(Graphics paint(Graphics g) g)
Eventos
Event.MOUSE_DOWN Event.MOUSE_DOWN Event.MOUSE_MOVE Event.MOUSE_MOVE Event.MOUSE_DRAG Event.MOUSE_DRAG
Eventos
<ninguno> <ninguno>
139
Componentes (III)
Button
Button(String Button(String texto) texto) void void setLabel(String setLabel(String texto) texto)
MenuItem
MenuItem(String MenuItem(String texto) texto) void void setLabel(String setLabel(String texto) texto)
Eventos
Event.ACTION_EVENT Event.ACTION_EVENT
Eventos
Event.ACTION_EVENT Event.ACTION_EVENT
CheckboxMenuItem
CheckboxMenuItem(String CheckboxMenuItem(String texto, texto, boolean boolean estado) estado) void void setState(boolean setState(boolean estado) estado)
Eventos
Event.ACTION_EVENT Event.ACTION_EVENT
140
70
Componentes (IV)
Checkbox
Checkbox(String Checkbox(String texto, texto, boolean boolean estado) estado) Checkbox(String Checkbox(String texto, texto, boolean boolean estado, estado, CheckBoxGroup CheckBoxGroup grupo) grupo) void void setLabel(String setLabel(String texto) texto) void void setState(boolean setState(boolean estado) estado)
Eventos
Event.ACTION_EVENT Event.ACTION_EVENT
CheckboxGroup
CheckboxGroup CheckboxGroup() ()
Checkbox sin grupo asociado Tres Checkbox asociados al mismo objeto CheckboxGroup
141
Componentes (IV)
Choice
Choice() Choice() void void addItem(String addItem(String texto) texto) int int getItemCount() getItemCount() String String getItem(int getItem(int indice) indice) int int getSelectedIndex() getSelectedIndex() String String getSelectedItem() getSelectedItem() void void select(int select(int indice) indice) void void insert(String insert(String texto, texto, int int indice) indice) void void remove(int remove(int index) index) void void removeAll() removeAll()
NullPointerException
IllegalArgumentException
Eventos
Event.ACTION_EVENT Event.ACTION_EVENT
142
71
Componentes (V)
List
List(int List(int numFil, numFil, boolean boolean multipleSel) multipleSel) void void addItem(String addItem(String texto) texto) int int getItemCount() getItemCount() String String getItem(int getItem(int indice) indice) int[] int[] getSelectedIndexes() getSelectedIndexes() boolean boolean isIndexSelected(int isIndexSelected(int indice) indice) void void select(int select(int indice) indice) void void deselect(int deselect(int indice) indice) void void removeAll() removeAll() void void makeVisible(int makeVisible(int indice) indice)
NullPointerException
IllegalArgumentException
Eventos
Event.LIST_SELECT Event.LIST_SELECT Event.LIST_DESELECT Event.LIST_DESELECT
IAESTE/CVR 2003 - Curso de Iniciacin a Java 143
Componentes (VI)
TextComponent
String String getText() getText() void void setText(String setText(String texto) texto) void void setEditable(boolean setEditable(boolean ed) ed) String String getSelectedText() getSelectedText()
TextField
TextField(String TextField(String texto, texto, int int numCol) numCol)
TextArea
static static int int SCROLLBARS_BOTH SCROLLBARS_BOTH static static int int SCROLLBARS_NONE SCROLLBARS_NONE TextArea(String TextArea(String texto, texto, int int numFil, numFil, int int numCol, numCol, int int sbVis) sbVis) void void append(String append(String text) text)
Eventos
Event.ACTION_EVENT Event.ACTION_EVENT Event.KEY_PRESS Event.KEY_PRESS Event.KEY_RELEASE Event.KEY_RELEASE
144
72
Contenedores (I)
Container
add(Component add(Component c) c) add(String add(String zona, zona, Component Component c) c) void void setLayout(LayoutManager setLayout(LayoutManager distr) distr) void void doLayout() doLayout() Insets Insets getInsets() getInsets() Funcin para aadir componentes cuando el distribuidor es BorderLayout o CardLayout. En el primer caso, zona debe ser "North ", "South ", "East", "West" o "Center " (Nota: La primera letra mays cula y el resto minsculas, sino se genera un error) Funcin para aadir componentes cuando el distribuidor es FlowLayout o GridLayout
Panel
Panel Panel() () Panel Panel(LayoutManager (LayoutManager distr) distr) void void paint(Graphics paint(Graphics g) g)
145
Contenedores (II)
Frame
Frame(String Frame(String titulo) titulo) void void show() show() void void dispose() dispose() void void setTitle(String setTitle(String titulo) titulo) void void setMenuBar(MenuBar setMenuBar(MenuBar barra) barra) void void setIconImage(Image setIconImage(Image icono) icono) boolean boolean handleEvent(Event handleEvent(Event evt) evt)
Dialog
Dialog Dialog(String (String titulo, titulo, Frame Frame vent, vent, boolean boolean modal) modal) void void show() show() void void dispose() dispose() void void setTitle(String setTitle(String titulo) titulo) boolean boolean handleEvent(Event handleEvent(Event evt) evt)
Eventos
Event.WINDOW_DESTROY Event.WINDOW_DESTROY Event.WINDOW_ICONIFY Event.WINDOW_ICONIFY Event.WINDOW_DEICONIFY Event.WINDOW_DEICONIFY Event.WINDOW_EXPOSE Event.WINDOW_EXPOSE
Eventos
Event.WINDOW_DESTROY Event.WINDOW_DESTROY Event.WINDOW_ICONIFY Event.WINDOW_ICONIFY Event.WINDOW_DEICONIFY Event.WINDOW_DEICONIFY Event.WINDOW_EXPOSE Event.WINDOW_EXPOSE
146
73
Contenedores (III)
MenuBar
MenuBar MenuBar() () add(Menu add(Menu menu) menu) setHelpMenu(Menu setHelpMenu(Menu menu) menu)
Menu
Menu(String Menu(String nombre) nombre) add(MenuItem add(MenuItem elem) elem) add(Menu add(Menu submenu) submenu)
PopupMenu
PopupMenu(String PopupMenu(String nombre) nombre) add(MenuItem add(MenuItem elem) elem) add(Menu add(Menu submenu) submenu) show(Component show(Component c, c, int int x, x, int int y) y)
147
Distribuidores
FlowLayout
static static int int CENTER CENTER static static int int LEFT LEFT static static int int RIGHT RIGHT FlowLayout(int FlowLayout(int alin,int alin,int espX, espX, int int espY) espY)
BorderLayout
FlowLayout(int FlowLayout(int espX, espX, int int espY) espY)
GridLayout
GridLayout(int GridLayout(int numFil, numFil, int int numCol, numCol, int int EspX, EspX, int int EspY) EspY)
148
74
Contenedores y distribuidores
GridLayout(1,4,5,5)
FlowLayout(FlowLayout.CENTER,10,10) BorderLayout(0,10)
BorderLayout(0,0)
IAESTE/CVR 2003 - Curso de Iniciacin a Java
GridLayout(6,1,0,0)
149
Color
static static int int white white static static int int black black static static int int blue blue static static int int red red ... ... Color Color(float (float r, r, float float g, g, float float b) b)
Font
static static int int BOLD BOLD static static int int ITALIC ITALIC static int PLAIN static int PLAIN Font(String Font(String nom, nom, int int estilo, estilo, int int tam) tam)
FontMetrics
int int getHeight() getHeight() int int stringWidth(String stringWidth(String lin) lin)
IAESTE/CVR 2003 - Curso de Iniciacin a Java
75
Event
static static int int ACTION_EVENT ACTION_EVENT static static int int KEY_PRESS KEY_PRESS static static int int KEY_RELEASE KEY_RELEASE static static int int LIST_SELECT LIST_SELECT static static int int LIST_DESELECT LIST_DESELECT static static int int MOUSE_DOWN MOUSE_DOWN static static int int MOUSE_MOVE MOUSE_MOVE static static int int MOUSE_DRAG MOUSE_DRAG static static int int WINDOW_DESTROY WINDOW_DESTROY int int id id // // Tipo Tipo de de mensaje mensaje
Insets
int int bottom, bottom, int int top top int int left, left, int int right right Insets(int Insets(int t, t, int int l, l, int int b, b, int int r) r)
Dimension
int int height height int int width width Dimension(int Dimension(int w, w, int int h) h)
151
Applets
n Los applets son mini-aplicaciones incrustadas en una pgina
web, ejecutadas por la mquina virtual Java asociada al navegador que visualiza la pgina.
n Estas aplicaciones se descargan junto con la pgina en formato
por lo tanto es un Panel , no una ventana. Este panel tiene asignados una posicin y dimensiones dentro del documento.
n Los applets tienen unas restricciones de seguridad muy
estrictas: no pueden acceder a los recursos de la mquina cliente (en concreto al sistema de ficheros) y solo pueden establecer conexiones de red con el servidor de la pgina.
152
76
Anatoma de un Applet
n Para crear un applet, se debe crear una clase que extienda a
java.applet.Applet (nota: la clase Applet no est situada en la librera awt, sino en la librera applet) y sobreescribir alguno (o todos) de las siguientes funciones:
n void init(): Esta funcin se llama cuando se acaba de cargar el
applet en el navegador. Aqu se debe incluir el cdigo que crea la interfaz de usuario.
n boolean handleEvent(Event evt): Aqu se incluye el cdigo de
procesado de eventos.
n void start(): Esta funcin se llama cuando el applet pasa a
visible en la pgina.
IAESTE/CVR 2003 - Curso de Iniciacin a Java 153
La clase Applet
Applet
void void init() init() void void start() start() void void stop() stop() void void destroy() destroy() boolean boolean handleEvent(Event handleEvent(Event evt) evt) void void paint(Graphics paint(Graphics g) g) Image Image getImage(URL getImage(URL dir) dir) void void play(URL) play(URL) String String getParameter(String getParameter(String nombre) nombre)
explcitamente
n Los applets no tienen como
intrprete java
n Se incluyen en el cdigo de una
154
77
n Ejecucin:
explorer pagina.html navigator pagina.html appletviewer pagina.html
156
78
Modificar el visor de ficheros y directorios adaptndolo a una aplicacin de ventanas. Modificar el conversor de moneda convirtindolo en un applet. Instalacin y uso del entorno Java:
n Es necesario fijarse en el directorio en que se instala el
por separado.
IAESTE/CVR 2003 - Curso de Iniciacin a Java 157
79