You are on page 1of 36

Programacin Orientada a Objetos (3er curso, grupo 31) 3.

Clases y objetos en Java

23.02.11

Clases y objetos en Java

Definicin de una clase: estructura de datos + funciones


class CuentaBancaria { long numero; String titular; long saldo; void ingresar (long cantidad) { saldo += cantidad; } void retirar (long cantidad) { if (cantidad > saldo) System.out.println ("Saldo insuficiente"); else saldo -= cantidad; } }
Variables

Mtodos

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Variables
Definen una estructura de datos (como un struct de C) class CuentaBancaria { long numero; String titular; long saldo; } Pueden almacenar objetos class CuentaBancaria { long numero; l Cliente titular; long saldo = 0; } Por defecto se inicializan a 0 null class Cliente { String nombre; i b long dni; }
Las variables se pueden inicializar directamente en la clase (con una expresin arbitraria que no genere checked exceptions)
3

struct CuentaBancaria { long numero; char *titular; long saldo; };

Creacin de objetos
Una clase define un tipo de dato que se puede utilizar para declarar variables CuentaBancaria cuenta1, cuenta2; C t B i t 1 t 2 Declarar un objeto es declarar una referencia a un objeto
CuentaBancaria

Los objetos se crean con el operador new cuenta1 = new CuentaBancaria ();

numero titular saldo

-- sin definir --- sin definir --- sin definir --

Crear un objeto significa reservar espacio en memoria para sus variables new reserva memoria para un objeto y devuelve una referencia al objeto Los objetos siempre utilizan memoria dinmica
4

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Creacin de objetos y acceso a variables


CuentaBancaria cuenta1, cuenta2; cuenta1 = new CuentaBancaria (); cuenta2 = cuenta1; Cliente cliente1 = new Cliente (); cliente1.nombre = "Luis Gomez"; cliente1.dni = 25672046; cuenta1.numero cuenta1 numero = 6831531; cuenta1.titular = cliente1; cuenta1.saldo = 100000; cuenta2.saldo = 200000;

cuenta1

cuenta2

cliente1

CuentaBancaria

numero 6831531 titula titular saldo 200000


Cliente

nombre "Pilar Garcia" dni 25672046

cuenta2.titular.nombre = "Pilar Garcia";


5

Mtodos
Los mtodos son funciones definidas dentro de una clase (Similar a puntero a funcin en un struct de C) Los mtodos pueden referenciar directamente a las variables de la clase Los mtodos se invocan sobre un objeto de la clase a la que pertenecen Al ejecutar un mtodo invocado sobre un objeto de clase A, las variables de la clase A toman el valor que tienen en el objeto
numero cuenta2.numero titular cuenta2.titular saldo cuenta2.saldo

cuenta2.ingresar(1000);

void ingresar (long cantidad) { saldo += cantidad; }


cuenta2.saldo
6

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Llamadas a mtodos desde un mtodo


Los mtodos pueden invocar directamente otros mtodos de la misma clase Al ejecutar un mtodo invocado sobre un objeto de clase A, las llamadas a otros mtodos de la clase A se ejecutan sobre el mismo objeto a menos que se invoquen sobre otro objeto
cuenta3 = new CuentaBancaria (); cuenta2.transferencia (cuenta3, 1000); class CuentaBancaria { ... void transferencia (CuentaBancaria destino, long cantidad) { if (cantidad <= saldo ) { retirar (cantidad); destino.ingresar (cantidad); } } }
cuenta2.retirar (cantidad)
7

Los mtodos se ejecutan en el contexto de un objeto


Objetos a los que puede acceder un mtodo:
1. Objeto de la invocacin: implcitamente, accediendo directamente a sus variables y mtodos 2. Objeto definido en una variable local 3. Objeto pasado como argumento 4. Objeto almacenado en una variable de la clase

En C, el objeto de la invocacin sera un argumento ms C En POO, el objeto de la invocacin juega un papel distinto: el mtodo invocado pertenece al objeto y no a la inversa En el cdigo de un mtodo, el objeto de la invocacin no se ve explcitamente: se accede a sus variables y mtodos
8

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Objetos accedidos desde un mtodo


class X { String nombre; } class Y { int i; } class Z { String nombre; }

class A { int num; X obj4; void f (int n, Y obj3) { Z obj2 = new Z (); 4. obj4.nombre = obj2.nombre num = obj3.i + n; } 2. } 1. 3.

1. 2. 3. 4.

Variable del objeto de la invocacin Objeto definido en variable local Objeto pasado como argumento Objeto almacenado en variable de clase

El objeto de la invocacin (1) no se ve como los otros objetos (2, 3, 4) pero est implcito: el mtodo f accede a sus variables

Paso de argumentos: siempre por valor


class ClaseMain { public static void main (String args[]) { int n = 5; ; System.out.println ("Antes: " + n); f (n); System.out.println ("Despues: " + n); } static void f (int i) { System.out.println ("Durante: " + ++i); } }

10

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Paso de argumentos: referencias (I)


class ClaseMain { public static void main (String args[]) { CuentaBancaria cuenta = new CuentaBancaria (); cuenta.saldo = 100000; System.out.println ("Saldo antes: " + cuenta.saldo); arruinar (cuenta); System.out.println ("Saldo despues: " + cuenta.saldo); } static void arruinar (CuentaBancaria cnt) { cnt.saldo = 0; cnt = null; } }

11

Paso de argumentos: referencias (II)


class ClaseMain { public static void main (String args[]) { int a[] = {5, 4, 3, 2, 1}; System.out.println ("Antes: " + a[3]); f (a); System.out.println ("Despues: " + a[3]); } static void f (int x[]) { x[3] = 0; x = new int[8]; x[3] = 5; } }

12

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Constructores
Mtodos que se ejecutan automticamente al crear los objetos de una clase (i al reservar memoria para l objetos, i al i l (i.e. l i los bj t i.e. l invocar a new) ) Finalidad tpica
Valores iniciales para las variables de los objetos Otras operaciones de inicializacin

Utilidad
Simplificacin de la sintaxis Encapsulamiento de las variables de los objetos: evitar el acceso externo

13

Constructores: ejemplo
class Cliente { String nombre; long dni; Cliente (String str, long num) { nombre = str; dni = num; } } class CuentaBancaria { long numero; Cliente titular; long saldo; CuentaBancaria (long num, Cliente clt, long s) { numero = num; titular = clt; saldo = s; } }

14

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Creacin de objetos con constructores


Los constructores se ejecutan automticamente al crear los objetos
Cliente cliente1 = new Cliente ("Luis Gomez", 25672046);
Cliente

CuentaBancaria cuenta1 = new CuentaBancaria (6831531, cliente1, 100000);

nombre "Luis Gomez" dni 25672046

CuentaBancaria cuenta2 = new CuentaBancaria (8350284, new Cliente ("Pilar Garcia", 15165442), 200000);
15

Constructores por defecto


Si no se definen constructores, Java proporciona uno por defecto
class A { A () { } }

Si se define un constructor, el constructor por defecto no es definido


class Cliente { ... Cliente (String str, long num) { ... } } // Bloque main Cliente cliente1 = new Cliente (); // Error: No constructor matching Cliente() found in Cliente
16

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

La variable this
Definida implcitamente en el cuerpo de los mtodos Referencia al objeto sobre el que se invoca el mtodo
class Vector3D { double x, y, z; ... double productoEscalar (Vector3D u) { return x * u.x + y * u.y + z * u.z; // return this.x * u.x + this.y * u.y + this.z * u.z; } double modulo () { return (double) Math.sqrt (productoEscalar (this)); } } // Bloque main Vector3D v = new Vector3D (2, -2, 1); v.modulo ();
17

La variable this: relaciones inversas


class Nodo { Nodo anterior; Nodo siguiente; void conectar (Nodo z) { siguiente = z; z.anterior = this; } }
Nodo Nodo siguiente anterior Nodo

siguiente anterior

siguiente anterior

siguiente anterior

18

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

this en constructores
class Cliente { String nombre; long dni; Cliente (String str, long num) { nombre = str; dni = num; } CuentaBancaria cuentas[] = new CuentaBancaria [20]; int ncuentas = 0; CuentaBancaria void nuevaCuenta (CuentaBancaria cuenta) { cuentas[ncuentas++] = cuenta; } Cliente } CuentaBancaria class CuentaBancaria { long numero; Cliente titular; long saldo; CuentaBancaria (long num, Cliente clt, long s) { numero = num; titular = clt; saldo = s; clt.nuevaCuenta (this); } }

CuentaBancaria

19

Sobrecarga de mtodos
class Plano3D { double a, b, c, d; , , , ; Plano3D (double aa, double bb, double cc, double dd) { a = aa; b = bb; c = cc; d = dd; } boolean paralelo (Plano3D p) { Vector3D u = new Vector3D (a, b, c); Vector3D v = new Vector3D (p.a, p.b, p.c); return u.paralelo (v); } boolean paralelo (Recta3D r) { Vector3D u = new Vector3D (a, b, c); return u.perpendicular (r.vector); } }
20

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Sobrecarga de constructores
class Punto3D { double x, y, z; Punto3D (double xx, double yy, double zz) { x = xx; y = yy; z = zz; } } class Vector3D { double x, y, z; Vector3D (double xx, double yy, double zz) { x = xx; y = yy; z = zz; } Vector3D (Punto3D p, Punto3D q) { x = q.x - p.x; y = q.y - p.y; z = q.z - p.z; } boolean paralelo (Vector3D u) { return (x * u.y == y * u.x) && (x * u.z == z * u.x); } boolean perpendicular (Vector3D u) { return productoEscalar (u) == 0; } }

21

Llamada a mtodos sobrecargados


class Recta3D { Punto3D punto; Vector3D vector; Recta3D (Punto3D p, Vector3D v) { punto = p; vector = v; } } // Bloque main Plano3D p1 = new Plano3D ( , p (2, Plano3D p2 = new Plano3D (1, Recta3D r = new Recta3D (new new p1.paralelo (p2); p1.paralelo (r);

4, 3, 1); , , ); 0, -2, 1); Punto3D (1, 0, 1), Vector3D (1, 1, -1));

22

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Sobrecarga de mtodos: ambigedad


class A { void f (int n) { y p p System.out.println ("Tipo int"); } void f (float x) { System.out.println ("Tipo float"); } } // Bloque main

Se ejecuta la definicin j f compatible ms especfica

A a = new A(); byte b = 3; long l = 3; double d = 3; a.f(l); a.f(b); a.f(d); // ERROR: necesita cast // explcito
23

Destruccin de objetos (I)


La memoria reservada para los objetos se libera por garbage collection (GC) GC libera la memoria de los objetos no referenciados en ninguna parte
CuentaBancaria cuenta1 = C t B i t 1 new CuentaBancaria (8350284, new Cliente ("Luis Perez", 15165442), 200000); cuenta1.titular = new Cliente ("Pilar Gomez", 25672046);
Cliente CuentaBancaria

cuenta1

numero 8350284 titular saldo 200000


Cliente

nombre "Luis Perez" dni 15165442 cuentas

nombre "Pilar Garcia" dni 25672046 cuentas

GC

24

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Destruccin de objetos (II)


Soltar expresamente una referencia:
cuenta1 = null;
CuentaBancaria

GC

cuenta1

numero 8350284 titular saldo 200000 null


Cliente

nombre "Pilar Garcia" dni 25672046 cuentas

Un objeto se libera slo cuando se sueltan todas las referencias a l


CuentaBancaria cuenta2 = cuenta1; cuenta1 = null; // El objeto no se libera an

Es posible solicitar garbage collection: System.gc ();

25

Control de acceso Miembros pblicos vs. privados


class A { public int x; private int y; public void f () { ... } private void g () { ... } void h () { x = 2; y = 6; f (); g (); A a = new A () (); a.x = 2; a.y = 6; a.f (); a.g (); } } class B { void h A a a.x a.y a.f a.g } } () { = new A (); = 2; = 6; // Error (); (); // Error

26

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Control de acceso: otras modalidades


Modalidades de ocultacin de variables, mtodos y constructores de una clase
Clase Package Subclase Cualquiera

private (por defecto) package p protected public

X X X X X X X X X X

Modalidades de ocultacin de clases: public package


27

Ocultacin de variables y mtodos dentro de clases


class A { int w; // package private int x; protected int y; public int z; private void f () { ... } void h () { w = 2; x = 6; y = 8; z = 3; f (); } } class B { void h A a a.w a.x a.y a.z a.f } } () { = new A (); = 2; = 6; // Error = 8; = 3; (); // Error

28

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Ocultacin de clases dentro de packages


A.java
package p1; // Clase pblica public class A { ... } // Clase del package class B { ... } package p2; class C { void f () { p1.A a; p1.B b; // Error }

29

Packages
Conjunto de clases definidas en un directorio Evitar conflictos de smbolos Cada clase pertenece a un package Si no se define ningn package para una clase, java la incluye en el package DefaultPackage

30

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Definir packages
graphics\Circle.java
package graphics; public class Circle { public void paint () { ... } ... } } } ...

graphics\Rectangle.java
package graphics; public class Rectangle { public void paint () { ...

31

Utilizar clases de otro package


... graphics.Circle c = new graphics.Circle (); c.paint (); ...

import graphics.Circle; ... Circle c = new Circle (); c.paint (); ...

import graphics.*; ... Circle c = new Circle (); Rectangle r = new Rectangle (); c.paint (); r.paint (); ...

Importar clase

Importar todas las clases del package


32

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Packages y directorios
Nombre del package estructura de directorios CLASSPATH: lista de directorios donde java busca packages directorio incluido di t i i l id en variable de entorno CLASSPATH i bl d t

package tool.browser.graphics package tool.browser.interaction package tool.editor


package tool.editor;

Packages importados automticamente:


java.lang DefaultPackage Package actual

public class WorkArea { ... }


33

Packages predefinidos
java.applet java.awt java.awt.datatransfer java.awt.event java.awt.image java.beans java.io java.lang java.lang.reflect java.math java.net java.rmi java.rmi.dgc java.rmi.registry java.rmi.server java.security java.security.acl java.security.interfaces java.sql java.text java.util java.util.zip (actualmente cerca de 200)
34

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Ocultacin dentro de clases y packages


package p1; public class A { int w; // package private int x; protected int y; public int z; }

package p2; class C { void h () { p1.A a = new p1.A (); a.w = 2; // Error a.x = 6; // Error a.y = 8 // E 8; Error a.z = 3; } } class D extends p1.A { void h () { p1.A a = new p1.A (); w = 2; a.w = 2; // Error x = 2; a x = 6; // Error a.x z = 3; a.z = 3; a.y = 8; // Error y = 8; D d = new D (); d.y = 8; } }
35

Variables estticas (I)


class CuentaCorriente { static double interes; } Similares a variables globales Variables de clase (i.e. estticas) vs. variables de instancia (por defecto) Las variables estticas pertenecen a la clase, no a los objetos Acceso a variables estticas: desde la clase o desde los objetos CuentaCorriente cuenta = new CuentaCorriente (); cuenta.interes = 0.3; CuentaCorriente.interes = 0.2;
36

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Variables estticas (II)


Las variables estticas son compartidas por todos los objetos de la clase (no se crea una copia por objeto como con las variables de instancia) CuentaCorriente cuenta1 = new CuentaCorriente (); CuentaCorriente cuenta2 = new CuentaCorriente (); cuenta1.interes = 0.3; cuenta2.interes = 0.4; System.out.println (cuenta1.interes); 0.4

La memoria de las variables estticas se reserva al cargar la clase en el intrprete Java


37

Mtodos estticos
class CuentaCorriente { long numero; static long ncuentas; static long generarNumero () { return ncuentas++; } } Similares a funciones globales Pueden ser invocados desde la clase o desde los objetos CuentaCorriente cuenta = new CuentaCorriente (); cuenta.numero = cuenta.generarNumero (); cuenta.numero = CuentaCorriente.generarNumero ();
38

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Mtodos estticos: restricciones


Pueden acceder a variables y mtodos estticos de la misma clase No pueden acceder a this No pueden acceder a variables ni mtodos de instancia de la clase static long generarNumero () { numero = numcuentas++; // Error return ncuentas; } Los mtodos de instancia s pueden acceder a variables y mtodos estticos void cobrarIntereses () { saldo += saldo * interes / 100; } CuentaBancaria () { // Constructor numero = generarNumero (); } Un constructor no puede ser esttico
39

Variables y mtodos estticos tpicos


Variables estticas: System.in, System.out, Math.PI, Integer.MAX_VALUE, etc. Mtodos estticos: System.exit(int), Math.sqrt(double), Math.cos(double), Integer.valueOf(String), main, etc.

40

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Bloques de inicializacin esttica


class A { static double num; String x; static { num = 5.2; x = "Hola"; // Error } } class A { static double num = 5.2; String x = "Hola"; }

Se j S ejecutan slo una vez: al cargar l clase t l l la l Se permite un nmero arbitrario de bloques en una clase No pueden referenciar variables de instancia ni mtodos de instancia Utiles para inicializar variables estticas con tratamiento de errores Cuando es posible, mejor inicializar en la declaracin o en constructores
41

Variables final
Similar a constantes, no se puede modificar su valor, inicializacin obligatoria class Circle { final double PI = 3.141592653589793; void f () { PI = 3.0; // Error } } Ms eficiente: static final Un constructor no puede ser final
42

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Libreras de clases fundamentales

Cadenas de caracteres: La clase java.lang.String


String encapsula cadenas de caracteres y su manipulacin String char[ ] Los caracteres de un String no se pueden modificar Constructores String (char[]) String (String) Creacin de strings char[] chars = {'a','b','c'}; String s = new String (chars); String s1 = "Hello"; String s2 = new String (s1); Literales: Java crea objetos de tipo String para los literales
44

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Mtodos de la clase String (I)


Acceso (la notacin str[n] no existe para String) String str = "abcdabc"; abcdabc ; str.length (); str.charAt (4); str.substring (3, 5); str.indexOf ("bc"); str.lastIndexOf ("bc"); // // // // // 7 'a' "da" 1 5 "abcdabcxyz" "ABCDABC" "axcdaxc" // "Hola que tal"
45

Manipulacin (se devuelve un String) str.concat ("xyz"); // str.toUpperCase (); // str.replace ('b', 'x'); // " Hola que tal ".trim ();

Mtodos de la clase String (II)


Conversin a String: static String valueOf (<cualquier tipo>) String.valueOf (2.34567); String.valueOf (34); // "2.34567" // "34"

String.valueOf (new Plano3D ()); // "Plano3D@1d07be" Comparacin String s1 = "abc", s2 = new String ("abc"), s3 = "abx"; s1 == s2; 1 2 s1.equals (s2); s1.compareTo (s3); // f l false // true // -21 < 0

46

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Cadenas de caracteres: La clase java.lang.StringBuilder


Desde Java 1.5, recomendado en lugar de StringBuffer (equivalente) Los caracteres de un StringBuilder s se pueden modificar Los objetos de tipo StringBuilder gestionan automticamente su capacidad
Toman una capacidad inicial La incrementan cuando es necesario

Constructores StringBuilder() StringBuilder(int c) // Capacidad inicial: 16 caracteres // Capacidad inicial: c caracteres // s.length() + 16 caracteres
47

StringBuilder(String s)// Capacidad inicial:

Mtodos de StringBuilder (I)


Acceso (igual que para String): length(), charAt(int), ... Conversin a String: toString() Modificacin de la cadena StringBuilder str = new StringBuilder ("abcdef"); str.setCharAt (2, 'q'); str.append ("ghi"); str.insert (3, "xyz"); str.insert (6, 1.23); str.delete (2, 10); str.reverse (); // str = "abqdef" // str = "abqdefghi" // str = "abqxyzdefghi" // str = "abqxyz1.23defghi" // str = "abdefghi" (versin 1.2) // str = "ihgfedba"

48

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Mtodos de StringBuilder (II)


Manipulacin de longitud y capacidad length(), capacity() setLength(int), ensureCapacity(int) Operador de concatenacin: internamente se utiliza un StringBuilder "DNI de " + cliente.nombre + ": " + cliente.dni new StringBuilder() append("DNI de ") StringBuilder().append( DNI ) .append(cliente.nombre).append(": ") .append(cliente.dni).toString()

49

Entrada y salida estndar: La clase java.lang.System


System.out, System.err
Objeto de la clase java.io.PrintStream Mtodos: print(<cualquier tipo>), println(<cualquier tipo>), flush(), format(<String>,<cualquier tipo>,...), printf(...) format y printf emiten java.util.IllegalFormatException

System.in
Objeto de la clase java.io.InputStream Mtodos: read() read(byte[]) read(byte[],int,int) read(), read(byte[]), Emiten java.io.IOException Redireccionamiento de la E/S estndar: System.setOut(PrintStream), System.setErr(PrintStream) System.setIn(InputStream)
50

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Entrada estndar con java.io.BufferedReader


InputStream InputStreamReader BufferedReader String (System.in) import java.io.*; public static void main (String args[]) throws IOException { BufferedReader reader = new BufferedReader (new InputStreamReader (System.in)); String str = reader.readLine (); }

51

Alternativa: E/S estndar con java.io.Console


Se obtiene con System.console() Mtodos Mt d como readLine(), f dLi () format(...), printf(...), readPassword () t( ) i tf( ) dP d public static void main (String args[]) throws IOException { Console c = System.console (); if (c == null) { System.err.println ("No console."); System.exit (1); } String str = c.readLine ("Introduzca su nombre: "); ... } Excepciones java.io.IOException, java.util.IllegalFormatException
52

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Escritura en fichero en modo texto con java.io.PrintStream


Permite escribir en modo texto (como con System.out) PrintStream printer = new PrintStream (new FileOutputStream ("abc.txt")); printer.print ("Dos + " + 2); printer.println (" = " + (2+2)); ... printer.close (); Emite java.io.IOException

53

Lectura de fichero en modo texto con java.io.BufferedReader


Permite leer en modo texto (como con System.in) BufferedReader reader = new BufferedReader (new FileReader ("abc.txt")); String str = reader.readLine (); ... reader.close (); Emite java.io.IOException

54

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Entrada y salida en fichero binario: La clase java.io.RandomAccessFile


Permite leer y escribir tipos primitivos (no objetos) en forma binaria Abrir un fichero // Modalidades: "r", "rw" RandomAccessFile f = new RandomAccessFile ("abc.txt","r"); f.close (); Mtodos: readInt() int, readBoolean() boolean, etc. writeInt(int), writeBoolean(boolean), etc. getFilePointer(), seek(long), length(), setLength() Emiten java.io.IOException
55

Funciones matemticas: La clase java.lang.Math


Constantes: Math.PI, Math.E Mtodos: sqrt(double), pow(double,double), random(), abs(double), max(double,double), round(double), cos(double), sin(double), tan(double), acos(double), exp(double), log(double), etc. (Existen versiones float, long, int para abs, max, min, round)

56

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Clases para tipos numricos (I) (package java.lang)


Byte, Short, Integer, Long, Float, Double Encapsulamiento (wrapping) de valores para manejo genrico de tipos Integer n = new Integer (54); // n es un objeto // 54 es un dato primitivo Conversin automtica tipo primitivo objeto por el compilador n = 27; int i = n; // n es un objeto, 27 es un dato primitivo // i es un dato primitivo, n es un objeto // String Integer // Integer String int String
57

Conversin a St i y viceversa C i String i n = Integer.valueOf ("91"); String s1 = m.toString ();

String s2 = String.valueOf (27.5); // // etc.

Clases para tipos numricos (II)


Constantes (variables de clase) Integer.MIN_VALUE -2147483648 2 836 8 Integer.MAX_VALUE Float.MIN_VALUE Float.MAX_VALUE // etc. Float.NEGATIVE_INFINITY Float.POSITIVE_INFINITY Float.NaN 2147483647 1.4E-45 3.4028235E38 public static final

58

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Clases para otros tipos primitivos


Clase java.lang.Character Character c = 'a'; char ch = c; Character.isDigit ('2'); Character.isLetter ('a'); Character.isLowerCase ('a'); ch = Character.toUpperCase ('a'); Clase java.lang.Boolean Boolean b1 = true; l boolean b = b1; String s1 = b1.toString (); String s1 = String.valueOf (true); // b l boolean Boolean l // Boolean boolean // Boolean String // boolean String
59

// char Character // Character char // true // true // true // ch = 'A'

Boolean b2 = Boolean.valueOf ("true");// String Boolean

La clase java.util.ArrayList
Lista de longitud variable de cualquier tipo de objetos Similar a array, pero su capacidad aumenta o disminuye dinmicamente Longitud, capacidad, incremento Constructores ArrayList lista = new ArrayList (); // Capacidad inicial: 10

ArrayList lista = new ArrayList (100); // Capacidad inicial: 100 Ajustar la capacidad: ensureCapacity(int), )

60

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Mtodos de ArrayList (I)


ArrayList lista = new ArrayList (); // lista = { } Insercin lista.add (2); lista.add (new Integer (2)); lista.add (new Float (4.5)); lista.add (1, "Hola"); // Warning (antes error) // lista = { 2 } // lista = { 2, 4.5 } // lista = { 2, "Hola", 4.5 }

lista.set (0, new Character ('b')); // lista = { 'b', "Hola", 4.5 } Eliminar elementos: lista.remove (new Float (4.5)); lista.remove (0); // lista = { 'b', "Hola" } // lista = { "Hola" }

61

Mtodos de ArrayList (II)


Acceso // Suponiendo que lista = { 'b', "Hola", 4.5 } lista.get (1); // "Hola"

lista.indexOf ("Hola"); // 1 (-1 si no encontrado) Longitud y capacidad: size(), isEmpty(), ensureCapacity(int), trimToSize() Conversin a array: toArray() ArrayList tipado: ArrayList<Double> lista = new ArrayList<Double> (); Iteracin: iterator() Iterator

62

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Iteracin sobre un ArrayList


Mtodos de la interfaz Iterator
hasNext() boolean next() Object (o tipo especificado)

Ejemplo (suponiendo que la clase Punto2D tiene un mtodo print())


ArrayList<Punto2D> lista = new ArrayList<Punto2D> (); lista.add (new Punto2D (0, 1)); lista.add (new Punto2D (2, -3)); lista.add (new Punto2D (-1, 1)); System.out.println ("Los elementos de la lista son: "); Iterator<Punto2D> iter = lista.iterator (); while (iter.hasNext()) iter.next () .print (); for (int i = 0; i < lista.size (); i++) lista.get (i) .print (); for (Punto2D p : lista) p.print (); Con iterador

Sin iterador Enhanced for


63

Otras clases
Package java util: LinkedList HashMap Set Collections Date java.util: LinkedList, HashMap, Set, Collections, Date, StringTokenizer... Package java.text: DateFormat, DecimalFormat Package java.math: BigDecimal, BigInteger (precisin y capacidad arbitrarias) La clase java.lang.System: in, out, exit(int) La clase java.lang.Runtime: getRuntime(), exec(String), exit(int)

64

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Enumeraciones (I)
Enumeracin simple
Definicin: Utilizacin: public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } Day d = Day.SATURDAY;

Una enumeracin es una subclase de java lang Enum java.lang.Enum


El mtodo Enum.values() devuelve un array con los valores de la enumeracin

Clases de enumeracin
public enum Planet { MERCURY (3.303e+23, 2.4397e6), EARTH URANUS JUPITER (1.9e+27, 7.1492e7), VENUS SATURN (4.869e+24, 6.0518e6), (6.421e+23, 3.3972e6), (5.688e+26, 6.0268e7), (5.976e+24, 6.37814e6), MARS (8 686e+25 2 5559e7) (8.686e+25, 2.5559e7),

NEPTUNE (1 024e+26 2 4746e7); (1.024e+26, 2.4746e7);

private final double mass, radius; Planet (double m, double r) { mass = m; radius = r; } public static final double G = 6.67300E-11; // gravit. constant double gravity () { return G * mass / (radius * radius); } double weight (double m) { return m * gravity(); } ...
65

Enumeraciones (II)
... public static void main (String[] args) { double earthWeight = Double.valueOf (args[0]); double mass = earthWeight/EARTH.gravity (); for (Planet p : Planet.values ()) System.out.println ("Your weight on " + p + " is " + p.weight (mass)); } }

66

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Tipos genricos
Permiten definir clases parametrizadas por un tipo El compilador se encarga de hacer los castings Los errores se detectan en tiempo de compilacin, no de ejecucin Tipos restringidos, wildcards, mtodos genricos

67

Ejemplo (I)
abstract class Figura { abstract double area (); } class Circulo extends Figura { Punto2D centro; double radio; Circulo (Punto2D p, double r) { centro = p; radio = r; } double area () { return Math.PI * radio * radio; } } class Rectangulo extends Figura { double left, top, width, height; Rectangulo (double l, double t, double w, double h) { left = l; top = t; width = w; height = h; } double area () { return width * height; } }
68

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Ejemplo (II)
class Box<T> { T t; void set (T elem) { t = elem; } T get () { return t; } } // Bloque main ... Box<Circulo> bCirc = new Box<Circulo> (); g g Box<Rectangulo> bRect = new Box<Rectangulo> (); bCirc.set (new Circulo (new Punto2D (2, 1), 3)); Compilacin o ejecucin? Circulo c = bCirc.get (); // no cast! bRect.set (new Rectangulo (2, 1, 5, 4)); bCirc.set (new Rectangulo (2, 1, 5, 4)); // Error ...
69

Tipo restringido
class Box<T extends Figura> { T t; void set (T elem) { t = elem; } T get () { return t; } double area () { return t.area (); } } // Bloque main Compilacin ... o ejecucin? Box<Circulo> bCi B <Ci l > bCirc = new B <Ci Box<Circulo> () l > (); Box<Rectangulo> bRect = new Box<Rectangulo> (); Box<Punto2D> bPunto = new Box<Punto2D> (); // Error ...

70

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

Programacin Orientada a Objetos (3er curso, grupo 31) 3. Clases y objetos en Java

23.02.11

Jerarquas de tipos genricos


Box<Circulo> no es subtipo de Box<Figura>
Box<Figura> b = new Box<Circulo> (); ArrayList<Object> a = new ArrayList<String> ();
Por qu?

Compilacin o ejecucin?

// Error // Error

Box<Circulo> s es subtipo de Box<? extends Figura>


Box<? extends Figura> b = new Box<Circulo> (); b.set (new Rectangulo (2, 1, 5, 4)); ArrayList<?> // Error ArrayList<? extends Object> a1 = new ArrayList<String> (); a2 = new ArrayList<String> ();

Box<Figura> es subtipo de Box<? super Circulo>


Bo <? s per Circ lo> b1 = ne Bo <Fig ra> () Box<? super Circulo> new Box<Figura> (); Box<? super Circulo> b2 = new Box<Rectangulo> (); // Error

Restricciones de los tipos wildcard


b.set (new Circulo (...)); a1.set (new Object ()); a2.set (new Object ()); // Error // Error // Error
71

Pablo Castells

Escuela Politcnica Superior Universidad Autnoma de Madrid

You might also like