Este documento presenta una introducción a Java, incluyendo sus características principales como lenguaje orientado a objetos inspirado en C++ y compilado independientemente de la máquina. También describe elementos básicos de Java como tipos de datos, operadores, instrucciones condicionales e iterativas, y menciona brevemente entornos de programación como Emacs/JDEE.
1. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Java
Entorno de Programaci´on Emacs/JDEE/Ant
Luis Fernando Llana D´ıaz
Departamento de Sistemas Inform´aticos y Computaci´on
Universidad Complutense de Madrid
8 de abril de 2013
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
2. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Sintaxis inspirada en C++.
Lenguaje orientado a objetos.
C´odigo compilado independiente de
la m´aquina j-c´odigo.
Lenguaje de moda.
Compilador e int´erpretes gratuito.
Libres seg´un la versi´on.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
3. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Entornos de programaci´on
Consola+editor de textos.
Editor de texto emacs + JDEE.
Eclicpse y NetBeans, entornos libres.
JBuilder entorno propietario.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
4. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
GNU-emacs (JDEE)
Ventajas
C´odigo libre.
Editor potente (coloreado,
sangrado autom´atico,
compilaci´on integrada).
Editor programable.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
5. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
GNU-emacs (JDEE)
Ventajas
C´odigo libre.
Editor potente (coloreado,
sangrado autom´atico,
compilaci´on integrada).
Editor programable.
Desventajas
Dificultad para entornos
gr´aficos.
Entorno desconocido.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
6. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Programa “Hola Mundo”
1/* El primer programa
2como aparece en todos los
3libros */
4
5/** Esto es un comentario
6* para ser procesado con ’javadoc ’.
7* Clase " ejecutable " Hola mundo.
8*/
9public class HolaMundo {
10// Clase ´upblica . ´oSlo puede haber una en cada fichero .
11// ´aAdems el fichero se debe llamar ’PrimerPrograma .java ’
12/** El ´emtodo ´aesttico "main" es el
13* que comienza a ejecutarse .
14* @author Luis Fernando Llana ´ıDaz
15* @version 1.0
16* @since 5/ oct /98
17* @param args son los parametros introducidos en la ´ılnea de comandos
18*
19*/
20public static void main (String [] args ){
21System.out.println("Hola");
22}
23}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
7. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Elmentos b´asicos
Instrucci´on de asignaci´on.
Instrucci´on condicional (if).
Instrucci´on iterativa (while, for, do-while).
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
8. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Tipos B´asicos
Tipo Que contiene Rango
byte entero de 8 bits -128 a 128
short entero de 16 bits -32.768 a 32.767
int entero de 32 bits -2.147.483.648 a 2.147.483.647
long entero de 64 bits −263
a 263
− 1
float coma flotante de 32 bits 6 d´ıgitos significativos (10−46
, 1038
)
double coma flotante de 64 bits 15 d´ıgitos significativos (10−324
, 10308
)
char Car´acter Unicode ’a’, ’b’, . . . ’´a’, ’~n’,. . . ’0’, ’1’, . . .
boolean valores booleanos true y false
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
9. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Literales
Enteros:
Decimal: 37
Hexadecimal: 0x25
Octal: 045
Caracteres
’a’, ’b’, . . . ’´a’, ’~n’, . . . , ’0’, ’1’, . . .
Caracteres “escape”: ’n’, ’’, ’’’, ’"’.
Reales
Float: 1.0345F, 1.04E-12f, .0345f,
1.04e-13f
Double: 1.0345, 1.0345d, 5.6E-120D
Cadenas de caracteres: "holan".
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
10. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Declaraci´on de variables
Estilo C++.
Permite declaraci´on de variables al vuelo.
Java es sensible a may´usculas y min´usculas.
Notaci´on:
Nombres de variables y clases largos.
Las variables todas en min´usculas, si una variable se compone
de varias palabras, la segunda y siguientes palabras empiezan
por may´uscula:
numero, numeroPalabras
Las clases empiezan por may´usculas y las dem´as en min´usculas:
Lista, ListaEnlazada
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
11. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Declaraci´on de variables
1public class Variables {
2public static void main (String [] args)
3{
4int num1; // ´oDeclaracin ´aestndar
5double media =2.5; // ´oDeclaracin e ´oinicializacin
6
7num1 =6;
8System.out.println("num1: "+num1 );
9
10int x, num2; // ´oDeclaracin al vuelo
11x=2; num2 =10;
12System.out.println("x: "+x+"nnum2: "+num2 );
13
14int num3=x*num2; // ´oDeclaracin e ´oinicializacin al vuelo
15System.out.println("num3: "+num3 );
16
17media=num1/num2;
18// media =0
19System.out.println("media: "+media );
20
21media =( double)num1/num2;
22// media =0.6
23System.out.println("media: "+media );
24}
25}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
12. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Operadores
Operadores aritm´eticos
+ suma para enteros y reales.
- resta para enteros y reales.
* producto para enteros y reales.
/ divisi´on entera entre enteros y con decimales para reales.
% resto de la divisi´on entera entre enteros.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
13. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Operadores l´ogicos
Operadores l´ogicos
conjunci´on &&, ¡ojo! no confundir con &.
disyunci´on || , ¡ojo! no confundir con |.
negaci´on !.
Operadores relacionales
igualdad ==.
desigualdad !=.
comparaci´on <, <=, >, >=.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
14. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Operadores l´ogicos
Expresi´on condicional
1i %2 ? 1:0
2..........
3mes ==2 && bisiesto ? 29:28
Operadores l´ogicos no estrictos
1if (x!=0 && 1/x >3)
2..................
3while (i<=n && v[i]==0)
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
15. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Constantes
1public static final double CUALQUIERA =3.14159265;
2public static final int MAXIMO_NUMERO_ELEMENTOS =5000;
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
16. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Cadenas de caracteres
1public class PrString {
2
3public static void main(String args []) {
4String s1 = "Hola";
5String s2 = "Patata";
6String s3 = s1+" "+s2;
7System.out.println(s3.length ());
8for (int i = 0; i < s3.length (); i++) {
9String mensaje = "Letra "+i+":"+s3.charAt(i)+":";
10System.out.println(mensaje );
11}
12
13}
14}
String es una clase especial en Java. Sus objetos son inmutables.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
17. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Instrucci´on condicional
1if (expresi´on booleana )
2instrucci´on
3
4if (expresi´on booleana )
5instrucci´on
6else
7instrucci´on
1if (x==0)
2System.out.println("x vale 0");
3else {
4System.out.print("x vale ");
5System.out.println(x);
6}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
18. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Instrucci´on condicional
1public class PruebaIf {
2public static void main(String [] args) {
3int x=0;
4
5if (x!=0 && 1/x=0);
6System.out.println (1/x);
7else
8System.out.print("x ´aest ");
9System.out.println("indefinido");
10}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
19. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Instrucciones iterativas
1while (expresi´on booleana )
2instrucci´on
1do
2instrucci´on
3while (expresi´on booleana )
1for (inicializaci´on ; expresi´on booleana ; incremento )
2instrucci´on
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
20. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Instrucciones iterativas
1i=0;
2while (i<n && v[i]==0) i++;
1for (int i=1; i<n; i++){
2int posMin=i;
3for (int j=i+1; j<n; j++){
4if (v[j]<v[posMin ]) posMin=j;
5}
6intercambiar (v,i,posMin );
7}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
21. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Usos “prohibidos” de bucle for
Uso de bucle for como bucle while:
1for (i=0; i<n && v[i]==0; i++);
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
22. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Instrucciones iterativas
1public class PruebaBucles {
2static void bucleWhile () {
3int i=1;
4boolean para = false;
5System.out.println("Bucle WHILE");
6while (i <=1000 && !para) {
7System.out.println("i: "+i);
8// Sale del bucle cuando se cumple la ´ocondicin .
9if (i==10) {
10System.out.println("Me voy ....");
11para = true;
12}
13i++;
14}
15}
16
17static void bucleFor () {
18System.out.println("Bucle FOR");
19for (int i=1; i <=10; i++)
20System.out.println("i: "+i);
21}
22// ´eDespus del bucle la varaible ’i’ no ´aest definida ;
23
24public static void main(String [] args) {
25bucleWhile ();
26bucleFor ();
27}
28}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
23. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Distinci´on de casos
1switch (n %7){
2case 0:
3System.out.println("Es lunes");
4break;
5case 1:
6System.out.println("Es martes");
7break;
8...
9...
10case 6:
11System.out.println("Es domingo");
12break;
13default:
14System.out.println("Esto es imposible");
15}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
24. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Distinci´on de casos
1public class PruebaSwitch {
2static char prueba1(char c) {
3char letra;
4
5switch (c) {
6case ’a’:
7letra=’-’;
8break;
9case ’e’:
10letra=’-’;
11break;
12case ’i’:
13letra=’-’;
14break;
15case ’o’:
16letra=’-’;
17break;
18case ’u’:
19letra=’-’;
20break;
21default: letra=c;
22}
23return letra;
24}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
25. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Distinci´on de casos
1static void prueba2(int i) {
2switch (i){
3case 1:
4System.out.println("Caso 1: "+i);
5case 2:
6System.out.println("Caso 2:"+i);
7case 3:
8System.out.println("Caso 3:"+i);
9case 4:
10System.out.println("Caso 4:"+i);
11case 5:
12System.out.println("Caso 5:"+i);
13default:
14System.out.println("Caso por defecto");
15}
16}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
26. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Distinci´on de casos
1public static void main(String [] args) {
2char letra=prueba1(args [0]. charAt (0));
3System.out.println("letra:"+letra+":");
4
5System.out.println("llamada con 1");
6prueba2 (1);
7System.out.println("llamada con 2");
8prueba2 (2);
9System.out.println("llamada con 3");
10prueba2 (3);
11System.out.println("llamada con 4");
12prueba2 (4);
13System.out.println("llamada con 5");
14prueba2 (5);
15System.out.println("llamada con 6");
16prueba2 (6);
17}
18}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
27. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
M´etodos
Java no tiene procedimientos, s´olo hay funciones (m´etodos).
Existen funciones que devuelven nada (tipo void).
Todos los par´ametros son de entrada, pero cuidado con los
punteros o referencias.
Las funciones admiten sobrecarga.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
28. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Sobrecarga
1public class Sobrecarga {
2final static double PI =3.1415926535897932;
3
4static double max(double a, double b){
5double m=a;
6if (b>a) m=b;
7return m;
8}
9static double max(double a){
10double m=PI;
11if (a>PI) m=a;
12return m;
13}
14static int max(int a, int b){
15int m=a;
16if (b>a) m=b;
17return m;
18}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
29. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Sobrecarga
1public static void main(String [] args ){
2double x=Double.parseDouble(args [0]);
3double y=Double.parseDouble(args [1]);
4int a=Integer.parseInt(args [2]);
5int b=Integer.parseInt(args [3]);
6
7System.out.print("´aMximo entre "+x+" y "+y+": ");
8System.out.println(max(x,y));
9
10System.out.print("´aMximo entre "+x+" y "+PI+": ");
11System.out.println(max(x));
12
13System.out.print("´aMximo entre "+a+" y "+b+": ");
14System.out.println(max(a,b));
15}
16}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
30. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Arrays
1int [] v; // definicion de arrays
2double [][] m; //´odefinicin de matrices
3.................................
4int [] v = new int [10]; //´odefinicin y ´ocreacin de array de 10 componentes
5.................................
6int [] v = {1,2,3,4,5}; //´odefinicin y ´ocreacin de array
7.................................
8int [] m = new int [10][10];
9.................................
10int [][] m = {{1 ,2 ,3} ,{4 ,5 ,6} ,{7 ,8 ,9}};
Todos los arrays empiezan a numerarse desde 0;
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
31. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Arrays
1import java.util.Random;
2public class PrArray {
3private static final int N=10;
4private static void escribe(int [] v) {
5System.out.print("[");
6for (int i = 0; i<v.length ; i++) {
7if (i>0)
8System.out.print(",");
9System.out.print(v[i]);
10}
11System.out.println("]");
12}
13public static void main(String [] args) {
14int [] v = new int[N];
15genera(v);
16escribe(v);
17ordena(v);
18escribe(v);
19int [] u = v;
20u[0]=10000;
21escribe(u);
22}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
32. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Arrays
1private static void genera(int [] v) {
2Random r = new Random ();
3for (int i = 0; i<v.length ; i++)
4v[i] = r.nextInt () % (3*N);
5}
6private static void ordena(int [] v) {
7for (int i = 0; i < v.length ; i++) {
8int pos = i;
9for (int j = i+1; j<v.length ; j++)
10if (v[j]<v[pos])
11pos = j;
12int aux = v[i];
13v[i] = v[pos ];
14v[pos ]=aux;
15}
16}
17}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
33. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Paquetes
Hechos
Cualquier programa puede tener varios cientos o miles de
clases.
La propia API de Java tiene m´as de 3000 clases.
No es dif´ıcil escoger el nombre de una clase que ya
est´e cogido.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
34. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Paquetes
Hechos
Cualquier programa puede tener varios cientos o miles de
clases.
La propia API de Java tiene m´as de 3000 clases.
No es dif´ıcil escoger el nombre de una clase que ya
est´e cogido.
Paquete
Es una colecci´on de clases con un mismo objetivo.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
35. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Clase soporte.Teclado
1package soporte;
2
3import java.io. BufferedReader ;
4import java.io. IOException ;
5import java.io. InputStreamReader ;
6public class Teclado {
7...
8...
9}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
36. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Esqueleto de proyecto Java
1.
2|-- build.xml
3|-- prj.el
4‘-- src
5| |-- pr1
6| | ‘-- Pr.java
7| ‘-- pr2
8| ‘-- Pr.java
9|-- lib
10‘-- classes
11|-- pr1
12| ‘-- Pr.class
13‘-- pr2
14‘-- Pr.class
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
37. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Objeto es un ejemplar de una clase.
Estado interno, no manipulable directamente.
M´etodos de manipulaci´on.
Programa colecci´on de clases.
Clase definici´on de objetos.
Similar a RECORD de Pascal + m´etodos de manipulaci´on.
Java no es un lenguaje orientado a objetos puro, tiene tipos
primitivos.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
38. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Implementaci´on de fechas
Implementaci´on de fecha:
Representaci´on de una fecha ordinaria (d´ıa/mes/a˜no)
moderna (desde 01/01/1601).
Dada una fecha, pasar a la siguiente, anterior, a˜nadir/restar
d´ıas.
Comparar fechas.
¿Cu´antos d´ıas hay entre 2 fechas?
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
39. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Uso de fechas
1import fecha.Fecha;
2public class PrFecha {
3public static void main (String [] args) {
4Fecha f1=new Fecha (30, Fecha.DICIEMBRE ,1999);
5Fecha f2=new Fecha (1, Fecha.MARZO ,2004);
6while (f1.compareTo(f2) <=0) {
7System.out.println(f1.diaSemana ()+":"+f1);
8f1.siguiente ();
9}
10}
11}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
40. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Implementaci´on de fechas
1package fecha;
2public class Fecha implements Comparable{
3private int dia;
4private int mes;
5private int anyo;
6public Fecha( int _dia , int _mes , int _anyo ) {
7dia = _dia; mes = _mes; anyo = _anyo;
8}
9public String toString( ) {
10return dia + "/" + mes + "/" + anyo;
11}
12public int compare(Object o)
13..........
14}
15public void anyadir(int ´ıdas) {
16..........
17}
18public void siguiente () {
19anyadir (1);
20}
21public void anterior () {
22anyadir (1);
23}
24public int diasHasta(Fecha otra) {
25......
26}
27}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
41. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Implementaci´on m´as real
Establecemos una fecha inicial el d´ıa 0, para simplificar el
01/01/1601 ¿por qu´e?.
Representamos cada fecha como el n´umero de d´ıas
transcurridos desde el d´ıa 0.
Necesitamos m´etodos de traducci´on
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
42. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Clase Fecha
1package fecha;
2
3public class Fecha implements Comparable , Cloneable{
4// Constantes para los meses
5public final static int ENERO =0;
6public final static int FEBRERO =1;
7......................................
8public final static int DICIEMBRE =11;
9
10// Constantes para los ´ıdas
11public final static int LUNES =0;
12public final static int MARTES =1;
13......................................
14public final static int DOMINGO =6;
15......................................
16......................................
17......................................
18
19//´ıDas transcurridos desde del 1 de enero de 1601
20private int diasDesdeInicio ;
21public Fecha(int dia , int mes , int anyo) {
22compruebaFecha (dia , mes , anyo );
23diasDesdeInicio = calculaDiasDesdeInicio (dia , mes , anyo );
24}
25}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
43. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Clase Fecha
1public void anyadirDias (int inc) {
2int d= diasDesdeInicio +inc;
3if (d<0) throw new FechaFueraDeRango ("´ıDa anteror al permitido");
4diasDesdeInicio =d;
5}
6
7public void siguiente () {
8anyadirDias (1);
9}
10public void anterior () {
11anyadirDias ( -1);
12}
13
14public boolean equals(Object obj) {
15if (! (obj instanceof Fecha )) return false;
16return diasDesdeInicio ==(( Fecha)obj ). diasDesdeInicio ;
17}
18
19public int compareTo(Object o) {
20if (!(o instanceof Fecha ))
21throw new ClassCastException ("Se requiere un objeto de clase Fecha");
22return diasDesdeInicio -(( Fecha)o). diasDesdeInicio ;
23}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
44. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Clase Fecha
1private static int calculaDiasDesdeInicio (int elDia , int elMes , int elAnyo ){
2int dias;
3
4dias= calulaDiasHastaPrimeroDe (elAnyo );
5dias=dias+ calculaDiasHastaPrimeroDelMes (elMes ,elAnyo );
6dias=dias+elDia -1; // el 1/1/1601 es el dia 0
7return dias;
8}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
45. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Clase Fecha
1protected static int diasMes(int mes , int anyo) {
2int [] diasMes ={31 , 28, 31,
330, 31, 30,
431, 31, 30,
531, 30, 31};
6int dias = diasMes[mes] + ( (mes == FEBRERO )? anyoBisiesto (anyo ):0 );
7return dias;
8}
9private static int calculaDiasHastaPrimeroDelMes (int mes , int anyo ){
10int dias = 0;
11for (int i = 0; i < mes; i++) {
12dias = dias + diasMes(i,anyo );
13}
14return dias;
15}
16
17private static int calulaDiasHastaPrimeroDe (int elAnyo ){
18int dias;
19int diff = elAnyo - ANYO_INICIO ;
20dias = diff *365; // se anyaden 365 dias por cada ~nao
21dias = dias + diff / 4; //~naadimos 1 por cada ´umltiplo de 4
22dias = dias - (diff /100); //se quida 1 por cada ´umltimo de 100
23dias = dias + (diff /400); //se ~naade 1 por cada ´umltimo de 400
24
25return dias;
26}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
46. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Clase Fecha
1public String toString (){
2FechaTerna f = new FechaTerna( diasDesdeInicio );
3return f.toString ();
4}
5......................................
6......................................
7class FechaTerna {
8private int dia;
9private int mes;
10private int anyo;
11public FechaTerna(int _dia , int _mes , int _anyo ) {
12dia = _dia; mes = _mes; anyo = _anyo;
13}
14public String toString () {
15return dia+"/"+mes+"/"+anyo;
16}
17......................................
18}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
47. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Clase Fecha
1private static final int grupo1 = 365;
2private static final int grupo4 = 4*365+1;
3private static final int grupo100 = 25* grupo4 -1;
4private static final int grupo400 = 4* grupo100 +1;
5
6public FechaTerna(int dias) {
7int quedan = dias;
8int grupos400 = quedan / grupo400;
9quedan = quedan % grupo400;
10int grupos100 = quedan / grupo100;
11quedan = quedan % grupo100;
12int grupos4 = quedan / grupo4;
13quedan = quedan % grupo4;
14int grupos1 = quedan / grupo1;
15quedan = quedan % grupo1;
16int anyo = Fecha.ANYO_INICIO +
17grupos1 + 4* grupos4 +
18100* grupos100 + 400* grupos400;
19int mes =0;
20while (quedan >= Fecha.diasMes(mes ,anyo )) {
21quedan = quedan -Fecha.diasMes(mes ,anyo );
22mes ++;
23}
24this.dia = quedan +1;
25this.mes = mes +1;
26this.anyo = anyo;
27}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
48. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Terminolog´ıa
clase
Definici´on de objetos. Todo objeto pertenece a una clase.
1Fecha f1=new Fecha (30, Fecha.DICIEMBRE ,1999);
2Fecha f2=new Fecha (1, Fecha.MARZO ,2004);
1package fecha;
2
3public class Fecha implements Comparable{
4....................................................
5....................................................
6}
7
8class FechaTerna {
9....................................................
10....................................................
11}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
49. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Terminolog´ıa
constructor
Procedimiento que construye objetos
1public Fecha(int dia , int mes , int anyo) {
2compruebaFecha (dia , mes , anyo );
3diasDesdeInicio = calculaDiasDesdeInicio (dia , mes , anyo );
4}
1public FechaTerna(int _dia , int _mes , int _anyo ) {
2dia = _dia; mes = _mes; anyo = _anyo;
3}
En Java los constructores tienen el mismo nombre que la clase.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
50. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Terminolog´ıa
atributo
Variable de un objeto
1private int diasDesdeInicio ;
1private int dia;
2private int mes;
3private int anyo;
Normalmente los atributos son privados al objeto: desde fuera del
objeto no deben ser accesibles, se debe acceder a ellos a trav´es de
m´etodos de acceso.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
51. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Terminolog´ıa
m´etodos
1while (f1.compareTo(f2) <=0) {
2System.out.println(f1.diaSemana ()+":"+f1);
3f1.siguiente ();
4}
5.....................................
6public int compareTo(Object o) {
7if (!(o instanceof Fecha ))
8throw new ClassCastException ("Se requiere un objeto de clase Fecha");
9return diasDesdeInicio -(( Fecha)o). diasDesdeInicio ;
10}
11..........................................
12public void anyadirDias (int inc) {
13int d= diasDesdeInicio +inc;
14if (d<0) throw new FechaFueraDeRango ("´ıDa anteror al permitido");
15diasDesdeInicio =d;
16}
17public void siguiente () {
18anyadirDias (1);
19}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
52. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Restricci´on de permisos
Los objetos pertenecen a clases, las clases se agrupan en paquetes.
Conviene restringir el acceso a los elementos del objeto
public desde cualquier clase (independientemente del
paquete).
protected desde clases que est´an el mismo paquete.
private s´olo desde la misma clase.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
53. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Referencias
Tanto las variables de objetos como los arrays son referencias
1int n=4576;
2int [] v={45 ,36 ,56 ,25};
3Fecha f = new Fecha (3, Fecha.DICIEMBRE ,2007);
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
54. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Referencias, efecto lateral
1int [] u=v;
2u[0]=56; // v [0]=56
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
55. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Referencias, efecto lateral
1Fecha f1 = f;
2f1.siguiente ();
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
56. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Referencias, objeros como par´ametros
1void avanza(Fecha fecha) {
2fecha.siguiente ();
3}
4
5avanza(f);
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
57. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Referencias, cambiar de referencia
1f = new Fecha (31, Fecha.DICIEMBRE ,2007);
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
58. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Referencias, generaci´on de basura
1f1 = new Fecha (8, Fecha.OCTUBRE ,2007);
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
59. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Referencias
El contenido de las variables de objetos y arrays son referencias a
los objetos y arrays.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
60. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Referencias
El contenido de las variables de objetos y arrays son referencias a
los objetos y arrays.
Si dos variables hacen referencia al mismo objeto las
modificaciones tienen efectos laterales
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
61. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Referencias
El contenido de las variables de objetos y arrays son referencias a
los objetos y arrays.
Si dos variables hacen referencia al mismo objeto las
modificaciones tienen efectos laterales
Los par´ametros de los procedimientos son por valor: Las
referencias no pueden cambiar, pero el contenido de los
objetos s´ı.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
62. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Referencias
El contenido de las variables de objetos y arrays son referencias a
los objetos y arrays.
Si dos variables hacen referencia al mismo objeto las
modificaciones tienen efectos laterales
Los par´ametros de los procedimientos son por valor: Las
referencias no pueden cambiar, pero el contenido de los
objetos s´ı.
Cuando un objeto no tiene referencias es considerado basura,
que debe se recogida por el recolector de basura (garbage
collector). En Java existe un recolector de basura autom´atico.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
63. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Calificativo static
Algo est´atico pertenece a la clase. Es com´un a todos los objetos de
la clase.
Variables comunes a todos los objetos.
M´etodos que no hacen referencia a atributos din´amicos (no
est´aticos).
Permiten mejor aprovechamiento de los recursos.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
64. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Calificativo final
Se a˜nade las partes que no se pueden cambiar
Variables constantes.
M´etodos que no se pueden reescribir en la herencia.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
65. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Referencia null
1Fecha f1; // Referencia no definida
2Fecha f2=null; // Referencia a objeto nulo.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
66. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Igualdad de referencias
Dos referencias son iguales si y s´olo si apuntan al mismo objeto
1boolean b;
2int [] u = v;
3b = u==v; // b es true
4int [] w = new int [4];
5w[0]=56; w[1]=36; w[2]=56; w[3]=25;
6b = u==w; // b es false
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
67. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Igualdad de referencias
1public class Fecha {
2...........
3public Fecha clone () {
4Fecha fecha = new Fecha ();
5fecha. diasDesdeInicio = this. diasDesdeInicio ;
6return fecha;
7}
8..........
9}
10............
11Fecha f = new Fecha (1,ENERO ,1956);
12Fecha f1 = f; // referencias iguales ;
13Fecha f2 = f.clone (); // referencias distintas a objeros iguales .
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
68. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Igualdad de referencias
1boolean b;
2b = f==f1; // b es true;
3b = f==f2; // b es false;
4b = f1==f2; // b es false;
1boolean b;
2b = f.equals(f1); // b es true;
3b = f.equals(f2); // b es true;
4b = f1.equals(f2); // b es true;
5b = f1.equals(f); // b es true;
6b = f2.equals(f1); // b es true;
7b = f2.equals(f); // b es true;
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
69. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Igualdad de referencias
1f.siguiente ();
2b = f==f1; // b es true;
3b = f==f2; // b es false;
4b = f1==f2; // b es false;
1boolean b;
2b = f.equals(f1); // b es true;
3b = f.equals(f2); // b es false;
4b = f1.equals(f2); // b es false;
5b = f1.equals(f); // b es true;
6b = f2.equals(f1); // b es false;
7b = f2.equals(f); // b es false;
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
70. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Herencia: relaci´on es un I
Seres materiales
Seres inertes
Coches
Renault
El coche de Flora
Seres vivos
Plantas
Flores
El geranio de juan
Animales
Insectos Peces Mam´ıferos
Perros
El caniche de juan
Humanos
Vendedores
Floristas
Flora
Profesores
Enrollados
Juan
Capullos
Luis
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
71. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Herencia: relaci´on es un II
Recorrido de la jerarqu´ıa
Seg´un se recorre la jerarqu´ıa los elementos que est´an por debajo
heredan caracter´ısticas de los elementos superiores:
Todos los objetos tienen masa y vol´umen.
Todos los seres vivos nacen, crecen, etc. . . .
Todos los mam´ıferos maman cuando son peque˜nos, etc. . . .
Todos los perros ladran.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
72. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Herencia: relaci´on es un III
Por tanto el perro de juan
tienen masa y vol´umen.
nace, crece, etc. . . .
mam´o cuando fue peque˜no, etc. . . .
ladra.
Caracter´ısticas heredadas
Existen caracter´ısticas que no cambian (peso y vol´umen).
Caracter´ıticas que se a˜naden.
Caracter´ısticas que se modifican, se refinan o cambian.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
73. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Herencia m´ultiple
Padre Director de banco
Director de banco con hijos
Pepe
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
74. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Herencia en Java
Interfaces.
Clases abstractas.
Extensi´on de clases.
Implementaci´on de interfaces.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
75. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Clase Object
1public class Patata {
2.......
3.......
4.......
5}
1public class Patata extends Object {
2.......
3.......
4.......
5}
Clase Object
La clase Object es la superclase de todas las clases en Java.
Dispone, entre otros, de los m´etodos:
boolean equals(Object obj)
String toString()
Estos m´etodos se deben sobreescribir en las subclases.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
76. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Clase Fecha
1public boolean equals(Object obj) {
2if (! (obj instanceof Fecha )) return false;
3return diasDesdeInicio ==(( Fecha)obj ). diasDesdeInicio ;
4}
1public String toString (){
2FechaTerna f = new FechaTerna( diasDesdeInicio );
3return f.toString ();
4}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
77. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Extensi´on de clases
Extensi´on de clase
1package fecha;
2public class FechaFueraDeRango extends RuntimeException {
3public FechaFueraDeRango (String s) {
4super(s);
5}
6}
Extensi´on de interfaz
1public class Fecha implements Comparable{
2.........
3.........
4.........
5}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
78. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Clases, clases abstracas e interfaces
Clase normal: todalmente definida, puede haber objetos de esa
clase.
Clase abstracta: parcialmente definida, puede tener alg´un atributo,
m´etodos totalmente definidos y m´etodos no
definidos.
Interfaz: s´olo define alg´un m´etodo, pero sin implementar.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
79. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Clase Abstracta
1public abstract class Patata{
2private int atributo;
3public abstract modifica(int x);
4}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
80. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Interfaz
El interfaz Comparable del API de Java debe ser de la forma
1package java.lang;
2public interface Comparable {
3public int compareTo(Object o);
4}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
81. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Herencia m´ultiple
1public class Patata {
2public int x;
3public void incrementa (){
4x=x+1;
5}
6}
1public class Tomate {
2public int x;
3public void incrementa (){
4x=x+10;
5}
6}
1public class Lechuga extends Patata , Tomate {
2public int y;
3}
4......
5......
6Lechuga lechuga = new Lechuga ();
7lechuga.incrementa (); // incrementa x = x+1 ´o x = x+10 ?
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
82. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Herencia m´ultiple en Java
En Java existe versi´on restringida de herencia
Se puede extender s´olo 1 clase.
Se puende implementar m´as de 1 interfaz.
1public class Trazador extends Frame
2implements WindowListener , ObjetoComparable {
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
83. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Objeto super
Invocaci´on a la superclase
1public class Estudiante{
2private String nombre;
3public Estudiante(String nombre) {
4this.nombre = nombre;
5}
6public void estudia(double tiempo ){....}
7}
1public class EstudiantePerezoso extends Estudiante{
2public EstudiantePerezoso (String nombre) {
3super(nombre );
4}
5public void trabaja(double tiempo ){
6super.estudia(tiempo /3);
7descansa(tiempo /3);
8super.estudia(tiempo /3);
9}
10}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
84. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Objeto this
1public class Fecha {
2....................
3public Fecha(int dia , int mes , int anyo) {
4compruebaFecha (dia , mes , anyo );
5diasDesdeInicio = calculaDiasDesdeInicio (dia , mes , anyo );
6}
7
8public Fecha () {
9this (1 ,1 ,1998);
10}
11....................
12}
1class FechaTerna {
2private int dia;
3private int mes;
4private int anyo;
5......................
6public FechaTerna(int dias) {
7this.dia = quedan +1;
8this.mes = mes +1;
9this.anyo = anyo;
10}
11........
12}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
85. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Figuras planas
1package geometria. figurasPlanas ;
2public interface FiguraPlana {
3public boolean intersecaCon ( FiguraPlana otra );
4public double distancia(Punto p);
5}
1package geometria. figurasPlanas ;
2public abstract class Superficie implements FiguraPlana{
3public abstract boolean estaDentro(Punto P);
4public abstract double superficie ();
5}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
86. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Puntos
1public class Punto implements FiguraPlana {
2public Punto(double x, double y){
3posX=x; posY=y;
4}
5public double distancia(Punto otro ){
6Vector v=new Vector(this ,otro );
7return v.modulo ();
8}
9public boolean equals(Object o){
10if (o instanceof Punto) {
11Punto otro = (Punto)o;
12return (this.posX == otro.posX) && (this.posY == otro.posY );
13}
14else return false;
15}
16public boolean intersecaCon ( FiguraPlana otra ){
17if (otra instanceof Punto) {
18return this.equals(otra );
19}
20else {
21return otra. intersecaCon (this );
22}
23}
24}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
87. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
M´etodo equals
Definido en Object, todos los objetos son subclase suya: todos
tienen definido el m´etodo equals.
1public boolean equals(Object o){
2if (o instanceof Punto) {
3Punto otro = (Punto)o;
4return (this.posX == otro.posX) && (this.posY == otro.posY );
5}
6else return false;
7}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
88. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Interfaces Comparable y Cloneable
1public class Fecha implements Comparable , Cloneable{
2................................
3public int compareTo(Object o) {
4if (!(o instanceof Fecha ))
5throw new ClassCastException ("Se requiere un objeto de clase fecha.Fecha."+
6"He recibido algo de clase "+o.getClass (). getNa
7return diasDesdeInicio -(( Fecha)o). diasDesdeInicio ;
8}
9public Fecha clone () {
10Fecha fecha = new Fecha ();
11fecha. diasDesdeInicio = this. diasDesdeInicio ;
12return fecha;
13}
14.......................
15}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
89. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Interfaz Comparable
1package java.lang;
2public interface Comparable <T> {
3public int compareTo(T o);
4}
Se usa para:
ordenaci´on.
colecciones ordenadas.
1public class Fecha implements Comparable <Fecha >, Cloneable{
2.............
3.............
4public int compareTo(Fecha o) {
5return diasDesdeInicio -o. diasDesdeInicio ;
6}
7}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
90. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Interfaz Comparable
Autoriza el uso del m´etodo clone de la clase object.
Copia los atributos, no hace un clone de los atributos.
Si se quiere hacer p´ublico hace falta reescribirlo.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
91. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Est´atico y din´amico
Est´atico
Conocido en tiempo de compilaci´on.
Din´amico
Lo que se conoce en tiempo de ejecuci´on.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
92. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Tipo est´atico
1public class Fecha {
2....................
3public boolean equals(Object obj) {
4..............
5..............
6}
7....................
8}
¿Qu´e sabemos de obj?
El objeto al que hace referencia obj pertenece a un subclase de
Object.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
93. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Tipo din´amico
1public class Fecha {
2....................
3public boolean equals(Object obj) {
4..............
5..............
6}
7....................
8Fecha f1 = new Fecha (31,JULIO ,2006);
9Fecha f2 = new Fecha (31,JULIO ,2005);
10boolean b = f1.equals(f2);
11........
12}
¿Qu´e sabemos de obj?
f2 es de clase Fecha. Cuando se hace la llamada obj va a ser una
referencia a un objeto de clase Fecha.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
94. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Calificativo static
Los m´etodos y atributos marcados como static
son inherentes a la clase,
todos los objetos los comparten ,
se pueden invocar directamente desde la clase.
1public class Fecha {
2....................
3....................
4public final static int ENERO =0;
5.................
6}
7........
8Fecha f = new Fecha (1, Fecha.ENERO ,2005);
Si un atributo es est´atico
Se comparte por todos los objetos de la clase
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
95. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Calificativo static
1public class Fecha {
2....................
3....................
4private static int calculaDiasDesdeInicio (int elDia , int elMes , int elAnyo ){
5int dias;
6
7dias= calulaDiasHastaPrimeroDe (elAnyo );
8dias=dias+ calculaDiasHastaPrimeroDelMes (elMes ,elAnyo );
9dias=dias+elDia -1; // el 1/1/1601 es el dia 0
10return dias;
11}
12
13....................
14
15}
Si un m´etodo es est´atico
Se gana en eficiencia (tiempo/memoria)
No puede hacer referencia a atributos no est´aticos.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
96. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Permisos de acceso
Los m´etodos y atributos de una clase pueden ser
public: accesibles desde cualquier clase.
protected: accesibles desde clases que est´en en el mismo
paquete o desde subclases.
private s´olo es accesible desde la propia clase.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
97. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
¿Qu´e es una excepci´on? I
Excepci´on
Es un evento que ocurre durante la ejecuci´on de un programa e
interrumpe su ejecuci´on normal
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
98. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
¿Qu´e es una excepci´on? II
Cuando se produce una excepci´on se puede
Capturarla y arreglar la situaci´on
Transmitir el error al procedimiento llamante
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
99. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Capturar/Transmitir una excepci´on
1public static int leeInt () throws IOException {
2try {
3return Integer.parseInt(teclado.readLine ());
4}
5catch ( NumberFormatException e) {
6System.out.println("´uNmero incorrecto , ´admelo otra vez.");
7return leeInt ();
8}
9}
El m´etodo readLine puede lanzar java.io.IOException
El m´etodo parseInt puede lanzar
java.lang.NumberFormatException
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
100. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Instrucci´on try/catch/finally
1try {
2codigo
3} catch (Excepcion1e1 ) {
4codigo1
5} catch (Excepcion2e2 ) {
6codigo2
7}
8..........
9} finally {
10
11}
Intenta ejecutar el c´odigo.
Si se produce una excepci´on de clase Excepcionk se ejecuta el
c´odigo codigok
El c´odigo en finally se ejecuta al final en cualquier caso.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
101. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Instrucci´on try/catch/finally
1public void writeList () {
2PrintWriter out = null;
3try {
4System.out.println("Entering try statement");
5out = new PrintWriter (
6new FileWriter("OutFile.txt"));
7for (int i = 0; i < SIZE; i++)
8out.println("Value at: " + i + " = "
9+ vector.elementAt(i));
10} catch ( ArrayIndexOutOfBoundsException e) {
11System.err.println("Caught "
12+ " ArrayIndexOutOfBoundsException : "
13+ e.getMessage ());
14} catch ( IOException e) {
15System.err.println("Caught IOException: "
16+ e.getMessage ());
17} finally {
18if (out != null) {
19System.out.println("Closing PrintWriter ");
20out.close ();
21
22}
23else {
24System.out.println(" PrintWriter not open");
25}
26}
27}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
102. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Declarar/lanzar excepciones
Requisito captura o declarar
Si una instrucci´on en un m´etodo puede lanzar una excepci´on se
debe
Capturar con instrucci´on catch
El m´etodo debe declarar (throws) que la puede lanzar.
Excepciones normales deben cumplir el requisito
Errores errores externos (fallos de hardaware). No necesitan
cumplir el requisito.
Excepciones Runtime errores internos que se debe a fallos, usos
incorrectos de una API. No necesitan cumplir el
requisito.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
103. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Lanzar excepciones
1public void anyadirDias (int inc) {
2int d= diasDesdeInicio +inc;
3if (d<0) throw new FechaFueraDeRango ("´ıDa anteror al permitido");
4diasDesdeInicio =d;
5}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
104. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Escribiendo excepciones
1package fecha;
2public class FechaFueraDeRango extends RuntimeException {
3public FechaFueraDeRango (String s) {
4super(s);
5}
6}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
105. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
¿Para qu´e?
1private static List leePuntos(String fichero)
2throws FileNotFoundException , IOException{
3
4BufferedReader lector = new BufferedReader (new FileReader(fichero ));
5List listaPuntos =new LinkedList ();
6String datos=lector.readLine ();
7while (datos != null ){
8Punto p=new Punto(datos );
9listaPuntos.add(p);
10datos=lector.readLine ();
11}
12return listaPuntos;
13}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
106. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Evitar conversiones de tipo
1private static void analizaListaPuntos (List c){
2Iterator itr=c.iterator ();
3int i=1;
4while(itr.hasNext ()){
5Punto p = (Punto)itr.next ();
6...........................
7}
8}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
107. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Evitar conversiones de ejecuci´on
1Lista lista = leePuntos(fichero );
2lista.add(new Recta(new Punto (0,0), new Punto (1 ,0)));
3analizaPuntos (lista );
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
108. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Definiendo clases gen´ericas
1public interface List <E>{
2void add(E x);
3Iterator <E> iterator ();
4}
5
6public interface Iterator <E>{
7E next ();
8boolean hasNext ();
9}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
109. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Subclases
1List <Punto > ls = new ArrayList <Punto >();
2List <FiguraPlana > lo = ls; // Es admisible?
1lo.add(new Recta(A,B)); // ´ısera legal.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
110. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Comodines
1void muestra(Collection <Object > c) {
2for (Object e : c) {
3System.out.println(e);
4}
¿Puedo pasarle algo de tipo Lista<FiguraPlana>?
1void muestra(Collection <?> c) {
2for (Object e : c) {
3System.out.println(e);
4}
Es una colecci´on de tipo desconocido, pero al menos deben ser
objetos.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
112. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
M´etodos gen´ericos
1void insterta(Collection <?> c, FiguraPlana [] figuras) {
2for (FiguraPlana f : figuras) {
3c.add(f); // Ilegal , no se el tipo base de figura .
4}
5}
1void insterta(Collection <? extends FiguraPlana > c, FiguraPlana [] figuras) {
2for (FiguraPlana f : figuras) {
3c.add(f); // Ilegal , no se el tipo base de figura .
4}
5}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
113. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
1private static <Fig extends FiguraPlana > void insterta(Collection <Fig > c,
2Fig [] figuras) {
3for (Fig f : figuras) {
4c.add(f);
5}
6}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
114. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
1interface Sink <T> {
2flush(T t);
3}
4public static <T> T writeAll(Collection <T> coll , Sink <T> snk) {
5T last;
6for (T t : coll) {
7last = t;
8snk.flush(last );
9}
10return last;
11}
12
13.....................
14
15Sink <Object > s;
16Collection <String > cs;
17String str = writeAll(cs , s); // Ilegal .
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
115. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
1public static <T> T writeAll(Collection <? extends T>, Sink <T>) {
2...
3}
4...
5String str = writeAll(cs , s); // Devuelve algo de clase Object
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
116. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
1public static <T> T writeAll(Collection <T>, Sink <? super T>) {
2...
3}
4...
5String str = writeAll(cs , s); // Devuelve algo de clase Object
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
117. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Flujos de entrada/salida
Stream de entrada
Stream de entrada
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
118. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Byte Streams
1import java.io. FileInputStream ;
2import java.io. FileOutputStream ;
3import java.io. IOException ;
4
5public class CopiaBytes {
6public static void main(String [] args) throws IOException {
7FileInputStream in = null;
8FileOutputStream out = null;
9try {
10in = new FileInputStream (args [0]);
11out = new FileOutputStream (args [1]);
12int c;
13
14while ((c = in.read ()) != -1) {
15out.write(c);
16}
17
18} finally {
19if (in != null) {
20in.close ();
21}
22if (out != null) {
23out.close ();
24}
25}
26}
27}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
119. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Llamada desde la l´ınea de comandos
1luis@casa :~/ docencia/Java06 -07$ java CopiaBytes quijote.txt quijote2.txt
1public static void main(String [] args) throws IOException {
2.............
3}
4
5args.length () 2
6args [0] "quijote.txt"
7args [1] "quijote2.txt"
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
122. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Buffering
1inputStream =
2new BufferedReader (new FileReader(args [0]));
3outputStream =
4new BufferedWriter (new FileWriter(args [1]));
5.........................
6.........................
7outputStream .flush (); // vaciamos el buffer de escritura
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
123. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Leyendo cosas que no son caracteres
M´etodos Integer.parseInt(java.lang.String),
Double.parseDouble(java.lang.String)
Clase java.util.Scanner
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
124. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
clase Scanner
1import java.io .*;
2import java.util.Scanner;
3
4public class Escaner {
5public static void main(String [] args) throws IOException {
6Scanner s = null;
7try {
8s = new Scanner(new BufferedReader (new FileReader(args [0])));
9
10while (s.hasNext ()) {
11System.out.println(s.next ());
12}
13} finally {
14if (s != null) {
15s.close ();
16}
17}
18}
19}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
125. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
clase Scanner
1import java.io .*;
2import java.util.Scanner;
3
4public class SumaScan {
5public static void main(String [] args) throws IOException {
6Scanner s = null;
7try {
8s = new Scanner(new BufferedReader (new FileReader(args [0])));
9double suma =0;
10while (s.hasNext ()) {
11if (s. hasNextDouble ()) {
12suma += s.nextDouble ();
13} else {
14String d = s.next ();
15suma += Double.parseDouble(d);
16System.out.println("Error:"+d);
17}
18}
19System.out.format("Suma: %sn",suma );
20} finally {
21if (s != null) {
22s.close ();
23}
24}
25}
26}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
126. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
clase Scanner
Fichero numeros.txt
11.994.986 ,34
22.000.000 ,00
33.000.000 ,00
43000000
510.11
1~/ Java$ export CLASSPATH =./ classes/
2~/ Java$ /opt/java/jdk1 .5/ bin/java SumaScan numeros.txt
3Error :10.11
4Suma: 9994996.45
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
127. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Construyendo puntos
1public class Punto implements FiguraPlana {
2private double posX ,posY;
3public Punto(String s){
4Scanner scan = new Scanner(s);
5scan.useLocale(Locale.US);
6posX=scan.nextDouble ();
7posY=scan.nextDouble ();
8}
9................
10................
11}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
128. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Construyendo puntos
1public class Punto implements FiguraPlana {
2private double posX ,posY;
3public Punto (String s){
4Scanner scan = new Scanner(s);
5posX=Double. parseDouble(scan.next ());
6posY=Double. parseDouble(scan.next ());
7}
8................
9................
10}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
130. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Leyendo puntos
Fichero puntos.txt
14 5
27 3
31 1
40.5 1
51 0.5
67 4
70 2
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
131. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Leyendo
1public class PruebaGeometriaI {
2private static void leeFiguras(String fichero) {..}
3
4private static void leePuntos(String fichero) {..}
5
6public static void main(String args []) throws IOException , FileNotFoundException {
7String nombrePuntos =args [0];
8String nombreFiguras =args [1];
9System.out.println("Puntos:");
10leePuntos( nombrePuntos );
11System.out.println("Figuras:");
12leeFiguras( nombreFiguras );
13}
14}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
132. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Leyendo puntos
1private static void leePuntos(String fichero)
2throws FileNotFoundException , IOException{
3
4BufferedReader lector = new BufferedReader (new FileReader(fichero ));
5String datos=lector.readLine ();
6while (datos != null ){
7Punto p=new Punto(datos );
8System.out.println(p);
9datos=lector.readLine ();
10}
11}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
133. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Leyendo figuras
1private static FiguraPlana construyeFigura (String tipoFigura , String datos ){..}
2
3private static void leeFiguras(String fichero)
4throws FileNotFoundException , IOException{
5
6BufferedReader lector = new BufferedReader (new FileReader(fichero ));
7String tipoFigura=lector.readLine ();
8int i=1;
9while (tipoFigura != null ){
10String datos=lector.readLine ();
11FiguraPlana figura= construyeFigura (tipoFigura ,datos );
12System.out.println(figura );
13tipoFigura=lector.readLine ();
14}
15}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
134. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Construyendo figuras
1private static FiguraPlana construyeFigura (String tipoFigura , String datos ){
2FiguraPlana figura;
3if (tipoFigura.equals("punto")) figura=new Punto(datos );
4else if (tipoFigura.equals("recta")) figura=new Recta(datos );
5else if (tipoFigura.equals("segmento")) figura=new Segmento(datos );
6else if (tipoFigura.equals(" paralelogramo ")) figura=new Paralelogramo (datos );
7else if (tipoFigura.equals("circulo")) figura=new Circulo(datos );
8else throw new RuntimeException ("Figura no implementada :"+tipoFigura+":");
9return figura;
10}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
135. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Invocaci´on desde la l´ınea de comandos
Variable de entorno CLASSPATH
Debe apuntar al directorio ra´ız donde est´en los ficheros .class
1~/ Java$ ls
2build.xml figuras.txt prj.el quijote3.txt src
3classes lib puntos.txt quijote4.txt
4CVS numeros.txt quijote2.txt quijote.txt
5~/ Java$ echo $CLASSPATH
6
7~/ Java$ export CLASSPATH =./ classes
8~Java$ echo $CLASSPATH
9./ classes/
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
136. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Invocaci´on desde la l´ınea de comandos
Variable de entorno JAVA HOME
Debe apuntar al directorio donde est´a la instalaci´on de Java.
1~/ Java$ ls ls -ald /opt/java/jdk1 .5
2lrwxrwxrwx 1 root root 11 2006 -07 -18 07:53 /opt/java/jdk1 .5 -> jdk1 .5.0 _07
3~/ Java$ echo $JAVA_HOME
4/opt/java/jdk
5~/ Java$ export JAVA_HOME =/ opt/jdk/jdk1 .5
6~/ Java$ echo $JAVA_HOME
7/opt/jdk/jdk1 .5
8~/ Java$ $JAVA_HOME/bin/java PruebaGeometriaI puntos.txt figuras.txt
9Puntos:
10Punto: (4.0 ,5.0)
11..............
12Punto: (0.0 ,2.0)
13Figuras:´ı
14Crculo:Punto: (5.0 ,5.0):2.0*
15Segmento: Punto: (3.0 ,4.0) - Punto: (8.0 ,4.0)
16Recta: 1.0*X + 0.0*Y = 3.0
17.................................´ı
18Paraleppedo*Punto: (2.0 ,2.0): Punto: (0.0 ,4.0): Punto: ( -2.0 ,2.0): Punto: (0.0 ,0.0)*´ı
19Paraleppedo*Punto: (0.0 ,0.0): Punto: (2.0 ,2.0): Punto: (6.0 ,2.0): Punto: (4.0 ,0.0)*
20Punto: (2.0 ,3.0)
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
137. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Jerarqu´ıa de clases de colecciones
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
138. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Colecciones
Collection Grupo de objetos.
Set Concepto matem´atico. El orden no importa, no hay
repeticiones. SortedSet.
List El orden es importante, admite repeticiones.
Map Concepto de funci´on matem´atica. SortedMap
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
139. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Jerarqu´ıa de clases: Map
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
140. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Interfaz Collection
1public interface Collection <E> extends Iterable <E> {
2................................
3boolean add(E element );
4Iterator <E> iterator ();
5..........................
6Object [] toArray ();
7<T> T[] toArray(T[] a);
8}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
141. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Interface Iterador
1public Interface Iterator {
2public boolean hasNext ();
3public Object next ();
4void remove ();
5}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
142. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Uso de listas
1private static List leePuntos(String fichero)
2throws FileNotFoundException , IOException{
3
4BufferedReader lector = new BufferedReader (new FileReader(fichero ));
5List listaPuntos =new LinkedList ();
6String datos=lector.readLine ();
7while (datos != null ){
8Punto p=new Punto(datos );
9listaPuntos.add(p);
10datos=lector.readLine ();
11}
12return listaPuntos;
13}
1private static void analizaListaPuntos (List c){
2Iterator itr=c.iterator ();
3int i=1;
4while(itr.hasNext ()){
5Punto p = (Punto)itr.next ();
6...........................
7}
8}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
143. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Errores en tiempo de ejecuci´on
¿Qu´e pasar´ıa si a˜nadiera un objeto que no sea de clase Punto?
1Lista lista = leePuntos(fichero );
2lista.add(new Recta(new Punto (0,0), new Punto (1 ,0)));
3analizaPuntos (lista );
La l´ınea
1Punto p = (Punto)itr.next ();
lanzar´ıa un java.lang.ClassCastException.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
144. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Clases gen´ericas
1public Interface List <E> {
2......
3public Iterator <E> iterator ()
4.....
5}
1public Interface Iterator <E> {
2public boolean hasNext ();
3public E next ();
4void remove ();
5}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
145. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Uso de listas con gen´ericos
1private static List <Punto > leePuntos(String fichero)
2throws FileNotFoundException , IOException{
3
4BufferedReader lector = new BufferedReader (new FileReader(fichero ));
5List <Punto > listaPuntos =new LinkedList <Punto >();
6String datos=lector.readLine ();
7while (datos != null ){
8Punto p=new Punto(datos );
9listaPuntos.add(p);
10datos=lector.readLine ();
11}
12return listaPuntos;
13}
1private static void analizaListaPuntos (List <Punto > c){
2Iterator <Punto > itr=c.iterator ();
3int i=1;
4while(itr.hasNext ()){
5Punto p = itr.next ();
6...........................
7}
8}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
146. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Errores en tiempo de compilaci´on
¿Qu´e pasar´ıa si a˜nadiera un objeto que no sea de clase Punto?
1Lista <Punto > lista = leePuntos(fichero );
2lista.add(new Recta(new Punto (0,0), new Punto (1 ,0)));
No compila, la lista es de puntos y puedo a˜nadir rectas.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
147. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Interfaz Collection
1public interface Collection <E> extends Iterable <E> {
2int size ();
3boolean isEmpty ();
4boolean contains(Object element );
5boolean add(E element );
6boolean remove(Object element );
7Iterator <E> iterator ();
8
9boolean containsAll (Collection <?> c);
10boolean addAll(Collection <? extends E> c);
11boolean removeAll(Collection <?> c);
12boolean retainAll(Collection <?> c);
13void clear ();
14
15Object [] toArray ();
16<T> T[] toArray(T[] a);
17}
Los m´etodos contains y remove comparan los objetos seg´un el
m´etodo equals.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
148. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Interfaz Set
No a˜nade m´etodos.
No puede haber elementos repetidos.
Subclases
HashSet La mejor en eficiencia, los iteradores no garantizan el
orden. M´etodo hashCode en la clase Object.
TreeSet Implementaci´on con ´arboles roji-negros. Los
iteradores recorren el conjunto seg´un el orden
establecido por sus elementos
LinkedHashSet Otra implementaci´on de las tablas hash.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
149. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
M´etodo equals
Definido en la clase Object. Hay que sobreescribirlo si se va a usar
una clase como elemento de una colecci´on.
Debe ser una relaci´on de orden: o1!=null, o2!=null y
o3!=null
Reflexivo o1.equals(o1)
Sim´etrico o1.equals(e2)==o2.equals(e1)
Si o1.equals(o2) y o2.equals(o3) entonces
o1.equals(o3)
Si o!=null entonces o.equals(null)==false.
Debe ser consistente: distintas invocaciones a lo largo de un
programa debe dar el mismo resultado si no cambian el valor
de los objetos.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
150. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
M´etodo hashCode
Definido en la clase Object. Hay que sobreescribirlo si se va a usar
una clase como elemento de una colecci´on tipo hash.
Debe ser consistente.
Si o1.equals(o2), entonces o1.hashCode()=o2.hashCode.
No debe ser necesariamente inyectiva, dos objetos distintos
pueden tener el mismo valor.
Deber´ıa distribuir uniformemente los objetos.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
151. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
M´etodo CompareTo
1public class Fecha implements Comparable <Fecha >, Cloneable {
2................
3public int compareTo(Fecha f) {
4....
5}
6..........
7}
Implementa relaci´on de orden
x.compareTo
< 0 si x < y
= 0 si x = y
> 0 si x > y
Debe ser implementada para tener colecciones ordenadas.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
152. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
M´etodo CompareTo
sgn(x.compareTo(y)) == -sgn(y.compareTo(x)).
Debe ser reflexiva antisim´etrica y transitiva, para objetos no
nulos
si x.compareTo(x)==0.
si x.compareTo(y)<=0 y y.compareTo(x)<=0 entonces
x.compareTo(z)==0 y z.compareTo(x)==0.
si x.compareTo(y)<=0 y y.compareTo(z)<=0 entonces
x.compareTo(z)<=0.
Debe ser consistente con el resto de los objetos. Si
x.compareTo(y)==0 entonces para todo z entonces
sgn(x.compareTo(z)) == sgn(y.compareTo(z)).
es conveniente que sea consistente con equals: x.equals(y)
sii x.compareTo(y)==0
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
153. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
PrColeccion
1public class PrColeccion {
2public static void lee(String nombre , Collection <String > conjunto)
3throws IOException {
4BufferedReader reader = null;
5try {
6reader = new BufferedReader (new FileReader(nombre ));
7String linea = reader.readLine ();
8while (linea != null) {
9conjunto.add(linea );
10linea = reader.readLine ();
11}
12} finally {
13if (reader != null) {
14reader.close ();
15}
16}
17}
18public static void muestra(Collection <String > conjunto) {
19for (String s : conjunto) {
20System.out.println(s);
21}
22
23}
24}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
154. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
PrConjunto
1public class PrConjunto {
2public static void main(String [] args) throws Exception{
3String tipo = args [1];
4Set <String > conjunto = null;
5if (tipo.equals("hash")) {
6conjunto = new HashSet <String >();
7} else if (tipo.equals("tree")) {
8// Collator c = Collator . getInstance (new Locale ("es","ES "));
9// conjunto = new TreeSet <String >(c);
10conjunto = new TreeSet <String >();
11} else {
12throw new RuntimeException ("Clase no implementada : "+tipo );
13}
14
15PrColeccion.lee(args [0], conjunto );
16PrColeccion.muestra(conjunto );
17}
18}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
155. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Lista de nombres
Fichero nombres.txt
1Luis
2Almudena
3Javier´A
4lvaro
5Isabel
6Marisa
7Natalia
8Alberto´e
9Andrs
10Andres
11Andros
12Luis
13Almudena
14Javier´A
15lvaro
16Isabel
17Marisa
18Natalia
19Alberto´e
20Andrs
21Andres
22Andros
23Luis
24Almudena
25Javier´A
26lvaro
27IsabelLuis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
156. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Ejecuci´on de conjuntos
1~/ Java$ $JAVA_HOME/bin/java PrConjunto nombres.txt tree
2Alberto
3Almudena
4Andres
5Andros´e
6Andrs
7Isabel
8Javier
9Luis
10Marisa
11Natalia´A
12lvaro
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
157. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Iteradores
Un iterador es un objeto que sirve para recorrer una estructura
1public interface Iterator <E> {
2boolean hasNext ();
3E next ();
4}
1for (Iterator <String > it = coleccion.iterator (); it.hasNext (); )
2String s = s.next ();
3System.out.println ();
4}
1for (String s : coleccion) {
2System.out.println(s);
3}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
158. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Listas
El orden de los objetos es importante, puede haber repeticiones de
objetos.
1public interface List <E> extends Collection <E> {
2// Acceso posicional
3E get(int index );
4E set(int index , E element ); // optional
5boolean add(E element ); // optional
6void add(int index , E element ); // optional
7E remove(int index ); // optional
8boolean addAll(int index ,
9Collection <? extends E> c); // optional
10
11// ´uBsquedas
12int indexOf(Object o);
13int lastIndexOf (Object o);
14
15// Iteradores de listas
16ListIterator <E> listIterator ();
17ListIterator <E> listIterator (int index );
18
19// Sublistas
20List <E> subList(int from , int to);
21}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
159. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Iteradores de listas
1public interface ListIterator <E> extends Iterator <E> {
2boolean hasNext ();
3E next ();
4boolean hasPrevious ();
5E previous ();
6int nextIndex ();
7int previousIndex ();
8void remove (); // optional
9void set(E e); // optional
10void add(E e); // optional
11}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
160. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Implementaciones de listas
ArrayList Generalmente m´as eficiente.
LinkedList Eficiente cuando no se hacen accesos posicionales.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
161. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Maps
1public interface Map <K,V> {
2
3// Operaciones ´absicas
4V put(K key , V value );
5V get(Object key );
6V remove(Object key);
7boolean containsKey(Object key );
8boolean containsValue (Object value );
9int size ();
10boolean isEmpty ();
11
12void putAll(Map <? extends K, ? extends V> m);
13void clear ();
14
15// Vistas
16public Set <K> keySet ();
17public Collection <V> values ();
18public Set <Map.Entry <K,V>> entrySet ();
19
20// Interface for entrySet elements
21public interface Entry {
22K getKey ();
23V getValue ();
24V setValue(V value );
25}
26}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
162. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
PrMap
1public class PrMap {
2private static void lee(String nombre ,
3Map <String ,Integer > map) throws IOException {
4BufferedReader reader = null;
5try {
6reader = new BufferedReader (new FileReader(nombre ));
7String linea = reader.readLine ();
8while (linea != null) {
9Integer i = map.get(linea );
10if (i== null) {
11i = new Integer (1);
12} else {
13i = new Integer(i.intValue ()+1);
14}
15map.put(linea ,i);
16linea = reader.readLine ();
17}
18} finally {
19if (reader != null) {
20reader.close ();
21}
22}
23}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
163. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
PrMap
1
2private static void muestra(Map <String ,Integer > map) {
3for (String s: map.keySet ()) {
4System.out.println(s+":"+map.get(s));
5}
6}
7public static void main(String [] args) throws Exception{
8String tipo = args [1];
9Map <String ,Integer > map = null;
10if (tipo.equals("hash")) {
11map = new HashMap <String ,Integer >();
12} else if (tipo.equals("tree")) {
13map = new TreeMap <String ,Integer >( Collator. getInstance ());
14} else {
15throw new RuntimeException ("Clase no implementada : "+tipo );
16}
17
18lee(args [0], map);
19muestra(map);
20}
21}
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java
164. Java b´asico Tipos B´asicos Instrucciones b´asicas Paquetes Objetos herencia Excepciones Gen´ericos Entrada/Salida Coleccion
Implementaciones
HashMap Basadas en tablas hash.
TreeMap Basadas en ´arboles, cuando las claves se pueden
ordenar.
Luis Fernando Llana D´ıaz Departamento de Sistemas Inform´aticos y Computaci´onUniversidad Complutense de Madrid
Java