EDIII

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 154

Estructura de Datos III

Coordinador: Prof. Ing. Pablo Pandolfo

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

Contenido:
Introduccin a Java. Componentes del lenguaje. Clases y Objetos. Herencia. Interfaces y clases internas. Excepciones y depuracin. Secuencias y archivos. Programacin genrica. Anotaciones. Internacionalizacin
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
2

Introduccin a Java
Java abarca dos aspectos:
Una plataforma: es un ambiente de software y/o hardware sobre el que se ejecuta un programa.
Enorme biblioteca. Cdigo reutilizable. Entorno de ejecucin: seguridad, adaptabilidad, Garbage Collector

Un lenguaje: posibilita el desarrollo de aplicaciones seguras, robustas sobre mltiples plataformas en redes heterogneas y distribuidas.
Sintaxis agradable. Semntica comprensible.
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
3

Introduccin a Java
La plataforma Java se compone de:
La Java Virtual Machine (JVM): es la base de la Plataforma Java y puede ser incorporada en la mayora de las plataformas (hardware y sistema operativo). Contiene el intrprete Java. La Java Application Programming Interface (Java API): es una coleccin de componentes de software que proveen una amplia gama de funcionalidades, como GUIs, I/O, Seguridad, etc. Est dividida en paquetes o libreras de componentes relacionadas.
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
4

Introduccin
La Plataforma Java (la API y la JVM) independiza al programa Java del hardware.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

Introduccin
Principales caractersticas del Lenguaje:
Simple y Familiar Orientado a Objetos Distribuido Robusto Seguro Arquitectura neutral Multithread Interpretado Dinmico

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

Introduccin
Simple y Familiar
El objetivo de los diseadores de Java fue crear un lenguaje de programacin que fuera fcil de aprender. Java adopt una sintaxis similar a la de C/C++ teniendo en cuenta su popularidad. Y elimin aquellas caractersticas que son fuente de confusin. Caractersticas de C/C++ eliminadas en Java
No ms preprocesador No ms estructuras de datos ni uniones No ms tipos enumerativos No ms funciones No ms herencia mltiple de clases No ms GOTO No ms punteros

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

Introduccin
Orientado a Objetos:
Java posee todas las caractersticas de un lenguaje orientado a objetos
Polimorfismo. Encapsulamiento. Herencia.

Java implementa herencia simple de clases. Una clase puede ser subclase de una nica clase. Todas las clases heredan de la clase Object. (Todo es un objeto) Java enriquece el modelo de herencia simple de clases, implementando interfaces.
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
8

Introduccin
Distribuido:
Con Java es posible usar protocolos como HTTP y FTP para leer o copiar archivos remotos de manera tan simple como si estuviesen en el File System local. El comportamiento distribuido de Java posibilita la colaboracin y la distribucin de carga de trabajo del sistema. Ejemplo: Applets. RMI (Java Remote Method Invocation) provee una forma simple y directa de manejar objetos distribuidos.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

Introduccin
Seguro:
Mapa de memoria y alocacin de memoria:
En Java no existe el concepto de punteros a memoria al estilo C y C++. En Java el modelo de alocacin de memoria es transparente al programador, ya que es controlado ntegramente por JVM.

Chequeos de seguridad en el Class Loader:


Las clases de la API Java no pueden ser sobrescritas por clases importadas desde la red. Las clases importadas desde la red, se ubican en espacios de nombres privados.

Verificacin del ByteCode: el intrprete Java chequea los archivos .class que vienen de la red, evaluando:
Que el cdigo no falsifique punteros. Que el cdigo no viole restricciones de acceso. Que el cdigo no viole el acceso a los objetos usando casting.
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
10

Introduccin
Arquitectura neutral:
Java fue diseado para soportar aplicaciones que se ejecutan en ambientes de redes heterogneos, independientemente de la plataforma de hardware y del sistema operativo. La arquitectura neutral dada por los ByteCodes es el paso ms importante hacia la portabilidad de los programas. Write once, run anywhere.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

11

Introduccin
Multithreaded:
Un Thread es un flujo de control secuencial dentro de un programa. Java provee mltiples threads en un programa, ejecutndose concurrentemente y llevando a cabo tareas distintas. La API Java contiene primitivas de sincronizacin. Los mltiples hilos (threads) de ejecucin permiten mejorar la interactividad y la performance del sistema. (Mejor respuesta interactiva y comportamiento de tiempo real)

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

12

Introduccin
Interpretado y dinmico:
El compilador Java genera ByteCodes para la JVM. El intrprete, incorporado en la JVM es el que permite ejecutar el programa. Los ByteCodes de Java pueden ejecutarse en cualquier plataforma que tenga la JVM implementada. Java es dinmicamente extensible ya que las clases se linkean a medida que se necesitan y pueden ser cargadas dinmicamente a travs de la red.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

13

Introduccin
Tipos de programas:
Applets: son pequeos programas que se ejecutan dentro de un web browser Java-compatible. (p.e. Netscape Navigator, Microsoft Internet Explorer, HotJava). Aplicaciones: son programas comunes que se ejecutan utilizando solo a JVM como plataforma. Servlets: son programas que corren dentro de un ambiente provisto por un contenedor. Los contenedores son servidores de aplicaciones. Su ejecucin se desencadena escribiendo su URL en un browser web.
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
14

Introduccin
Java es un lenguaje de la empresa SUN Primera versin 1.0 (1996)
Versin 1.0 1.1 1.2 1.3 1.4 5.0 Caractersticas El lenguaje en s Clases internas Ninguna (Java 2) J2SE/EE/ME Ninguna Aserciones Clases genricas, for each, argumentos variables, enumeraciones
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

N Clases e Interfaces 211 477 1524 1840 2723 3270


15

Introduccin
Entornos de programacin Java
JDK: Java Development Kit Java SDK: Software Development Kit (versiones 1.2 a 1.4)

Entornos integrado de desarrollo (IDE)


Forte Sun ONE Studio Sun Java Studio Netbeans (IDE de SUN, principal competencia de Eclipse) Eclipse (escrito en Java)

Opciones de entorno:
JDK + editor de texto IDE

Uso de herramientas de la lnea de comandos


Abrir ventana de shell Ejecutar los siguientes comandos:
Javac Bienvenido.java Java Bienvenido
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
16

Introduccin
Eclipse
Es un IDE abierto y extensible (plugins) Un IDE es un programa compuesto por un conjunto de herramientas tiles para un desarrollador. Software libre. Gran parte de la programacin Eclipse hecha por IBM. Antecesor de Eclipse: VisualAge En 2001 IBM y Borland crearon la Fundacin Eclipse Sitio web: www.eclipse.org
Versin 3.2 3.3 3.4 3.5 3.6 Ao 2006 2007 2008 2009 2010 Nombre Callisto Europa Ganymede Galileo Helio
17

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

Introduccin
La aplicacin Hola Mundo
public class HelloWorld { public static void main(String[] args) { System.out.println(Hola mundo); } } >>> javac HelloWorld.java >>> java HelloWorld >>> Hola mundo

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

18

Componentes del lenguaje


En Java existen dos categoras de tipos de datos:
Tipos primitivos:
int boolean char byte short long float double 32-bit complemento a dos true o false 16-bit caracteres Unicode 8-bit complemento a dos 16-bit complemento a dos 64-bit complemento a dos 32-bit IEEE 754 64-bit IEEE 754

Clases o interfaces

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

19

Componentes del lenguaje


Para los tipos primitivos existen clases wrappers:
int Integer boolean Boolean char Character ...

Para qu utilizar las clases wrappers? Java no es un lenguaje orientado a objetos puro.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

20

Componentes del lenguaje


Clase String:
Es una secuencia de caracteres. No es un tipo primitivo. Los String son instancias de la clase java.lang.String. El compilador trata a los String como si fuesen tipos del lenguaje. La clase tiene varios mtodos para trabajar con ellos. Como crear uno:
String saludo = Hola; String otroSaludo = new String(Como ands?);
saludo.length(); saludo.charAt(0); saludo.substring(0,2); saludo.compareTo(adios); saludo.equals(Hol); saludo.indexOf(a); saludo.indexOf(a, 2); saludo.toLowerCase(); saludo.toUpperCase(); saludo.equalsIgnoreCase(h); saludo.endsWith(la);
21

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

Componentes del lenguaje


Operadores:
Asignacin: i = i + 1; j += k; Aritmticos: i+4*f j (8 / b) Lgicos: a && b d || c !a Relacionales: 2 >= p a == 5 b != 8 Otros: i++ j-[] . () (refundicin) new instanceof Condicional: x<y?x:y

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

22

Componentes del lenguaje


Arreglos:
Todo arreglo es de un tipo o una clase. Se los instancia con el operador new Son zero-based Ejemplos:
char[] carcteres; String[] palabras = new String[10]; float[] arreglo = {2, 4, 6}; int[][] matriz = {{1}, {3, 4}}; carcteres = new char[]{a, 1}; palabras[2] = chango;

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

23

Componentes del lenguaje


Parmetros de la lnea de comandos
public class Mensaje { public static void main(String[] args) { if (args[0].equals(-h)) System.out.println(Hola ); if (args[0].equals(-a)) System.out.println(Adis ); for(int i=1; i<args.length; i++) System.out.println( + args[i]); System.out.println(!); } }
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
24

Componentes del lenguaje


Parmetros de la lnea de comandos:
>>> java Mensaje h mundo cruel >>> Hola, mundo cruel! >>> java Mensaje a mundo cruel >>> Adis, mundo cruel!

Operaciones de arreglos:
int [] a = new int [10000]; Arrays.sort(a); Arrays.binarySearch(a, 3); Arrays.fill(a, 3);
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
25

Componentes del lenguaje


Estructuras de control:
If: if (condicin) { sentencias } While: while (condicin) { sentencias } For: for (int i=0; i < 8; i++) { sentencias } If else: if (condicin) { sentencias } else { sentencias } Switch: switch (i) { case 1:{sentencias;[break;]} case 2:{sentencias;[break;]} case 3:{sentencias;[break;]} }
26

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

Componentes del lenguaje


Comentarios:
Existen tres tipos:
Por lnea: // Bloque de cdigo: /* */ JavaDoc: /** */ Genera automticamente la documentacin.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

27

Componentes del lenguaje


Entrada y Salida
Entrada de datos por teclado:
Scanner in = new Scanner(System.in); in.nextLine(); //lee una lnea de entrada in.next(); //lee una sola palabra in.nextInt(); //lee un entero in.nextDouble(); //lee nmero de coma flotante in.hasNext(); //si hay o no otra palabra in.hasNextInt(); //si hay o no otro entero in.hasNextDouble(); //si hay o no otro nmero de coma flotante
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
28

Componentes del lenguaje


Entrada y Salida
Salida de datos a consola:
System.out.print(Hola mundo); System.out.println(Hola mundo); Double x = 10000.0/3.0; System.out.println(x); //3333.3333333 System.out.printf(%8.2f, x); //3333.33 System.out.printf(%,.2f, x); //3,333.33 String.format(Hola, %s. El ao que viene tendrs %d, nombre, edad);
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
29

Componentes del lenguaje


Ejercicios:
Recorrer el siguiente arreglo de nmeros sumando en una variable los nmeros pares y en otra los impares. Recorrerlo utilizando un for y luego utilizando un while.

int[] arreglo = new int[150]; int pares; int impares;


Imprimir los 20 primeros nmeros enteros positivos. Sumar los 1000 primeros nmeros naturales (1+2+3+4+...+1000), imprimiendo por cada suma el resultado parcial obtenido. Comprobar si un entero es par o impar.
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
30

Clases y Objetos
Paradigma de Programacin:
Conjunto de:
Elementos, Estructuras, y Reglas

Para:
Disear y construir Programas

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

31

Clases y Objetos
Programa orientada a objetos:
Un conjunto de objetos que colaboran envindose mensajes Slo hay objetos Lo nico que pueden hacer es enviar y recibir mensajes Si quers que algo se haga...
Necesitas un objeto que lo haga, y... Otro objeto que le enve un mensaje

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

32

Clases y Objetos
Qu es un objeto?
Los objetos son los elementos computacionales que utilizamos para construir programas Un objeto es una abstraccin de un ente del dominio de problema (Realidad) Abstraccin:
Lo que ese ente es Por qu ese ente existe

La esencia de un ente es lo que hace que ese ente sea lo que es, y nada ms.
Qu hace que un lpiz sea un lpiz?

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

33

Clases y Objetos
Objetos como Abstracciones
Un objeto presenta:
Un comportamiento bien determinado
Qu hace el objeto? Representa la esencia del ente

Una implementacin para ese comportamiento


Cmo hace el objeto lo que hace? Provee una posible implementacin para esa esencia

Una Identidad
Cmo podemos distinguir un objeto de otro? Identidad vs. Igualdad

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

34

Clases y Objetos
El comportamiento
El comportamiento indica qu sabe hacer el objeto. Sus responsabilidades. Se especifica a travs del conjunto de mensajes que el objeto sabe responder.

La Implementacin
La implementacin indica cmo hace el objeto para responder a sus mensajes. Se especifica a travs de:
Un conjunto de mtodos, y Un conjunto de colaboradores

Es privada del objeto. Ningn otro objeto puede accederla.


Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
35

Clases y Objetos
Un ejemplo simple

Ciclo de vida de un objeto:


Creacin Uso Destruccin
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
36

Clases y Objetos
Clases
Una clase es un objeto responsable de crear otros objetos (sus instancias) Una clase representa un concepto en el dominio de problema Las clases sirven como repositorios activos de la especificacin e implementacin de sus instancias Quin crea a los objetos que representan clases?
Metaclases

Todo el cdigo que se escribe en Java se encuentra dentro de una clase.


Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
37

Clases y Objetos
Relaciones entre clases:
Dependencia
utiliza un Pedido utiliza la clase Cuenta.

Composicin
tiene un Pedido contiene objetos de tipo Articulo.

Herencia
es un PedidoVigente es un Pedido.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

38

Clases y Objetos
Clase
Cada clase, excepto la clase Object, es una extensin (subclase), de una sola clase ya existente (herencia simple). En Java, una clase se compone de:
Declaracin Cuerpo

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

39

Clases y Objetos
Forma general de declaracin de una Clase:
package nombrePaquete; {importaciones} [modificadores] class nombreClase [extends nombreSuperClase] [implements nombresInterfaces] { }

Si una clase no declara explcitamente su superclase, entonces se asume que extiende a la clase Object.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

40

Clases y Objetos
nombrePaquete:
Todo nombre de paquete debe por convencin comenzar con una letra minscula. Java utiliza caracteres Unicode: fcil, araa, vistaCliente2 son nombres de paquetes vlidos. El alcance de un identificador de paquete es todo el paquete en donde se declara, por lo tanto no puede haber dos paquetes con el mismo nombre dentro de un mismo paquete.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

41

Clases y Objetos
Modificadores:
Existen tres modificadores:
public abstract: clases que no se pueden instanciar. Toda clase que tenga 1 o mas mtodos abstractos tiene que declararse abstracta a su vez. Puede tener atributos y mtodos concretos. final: clases que no se pueden extender. Ejemplo String. Todos los mtodos de una clase final son final automticamente NO as los atributos.

Son opcionales Se pueden combinar, salvo abstract y final.


Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
42

Clases y Objetos
nombreClase:
Todo nombre de clase debe por convencin comenzar con una letra mayscula. Java utiliza caracteres Unicode: Intil, Pequea, NegroEl8 son nombres de clases vlidos. El alcance de un identificador de clase es todo el paquete en donde se declara la clase, por lo tanto no puede haber dos clases con el mismo nombre dentro de un mismo paquete.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

43

Clases y Objetos
Cuerpo
Se considera como cuerpo de una clase todo lo encerrado entre { y }. En el cuerpo se declaran:
Atributos Constructores Mtodos

Otras clases

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

44

Clases y Objetos

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

45

Clases y Objetos
Constructores, declaracin
package nombrePaquete; public class NombreClase { [accesibilidad] NombreClase ([parmetros])[throws excepciones] { ... } }

Los constructores:
No son mtodos Tienen el mismo nombre que su clase No se heredan de las superclases
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
46

Clases y Objetos
Constructores, accesibilidad:

public class MesaAlgarrobo extends Mesa { public MesaAlgarrobo() {} } abstract class Mesa { Mesa() {} }
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
47

Clases y Objetos
Constructores :
Si una clase no declara ningn constructor, entonces tiene el constructor por defecto.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

48

Clases y Objetos
Constructores:
Una clase puede tener varios constructores (overloading). Los diferentes constructores se diferencian por el nmero y tipo de los parmetros. Los constructores tienen el mismo manejo de excepciones que los mtodos.
public class Crculo { protected Crculo(Punto punto) {...} public Crculo(Punto punto, Color color) { this(punto); ... } }
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
49

Clases y Objetos
Variables:
Todas las variables tienen un tipo. El tipo puede ser:
Tipo primitivo Clase Interfaz Declaracin en una clase: [accesibilidad] [modificadores] tipo nombre [= valor]; Declaracin en un mtodo: [final] tipo nombre [= valor];

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

50

Clases y Objetos
Variables, accesibilidad:

public class MesaAlgarrobo extends Mesa { private Color color; bool redonda; }
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
51

Clases y Objetos
Variables, modificadores:
static: variables de clase. Existen desde que el ClassLoader carga la clase. Pertenecen a la clase y no a ningn objeto individual (variable compartida) transient: no persistentes. volatile: indica a la JVM que la variable puede ser modificada en forma asincrnica por cualquier thread. final: constantes. Deben recibir valor inicial cuando se construye el objeto. En lo sucesivo, el campo o atributo no podr ser modificado. Ejemplo: Math.PI

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

52

Clases y Objetos
Variables:
Nombre:
Compuesto de caracteres Unicode. Por convencin los nombres de las variables empiezan con minscula. Como en las clases, si se juntan varias palabras, al principio de cada una se coloca mayscula. Case Sensitive.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

53

Clases y Objetos
Variables:
Visibilidad: bloque de cdigo en donde es accesible la variable Hay 3 categoras:

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

54

Clases y Objetos
Mtodos, definicin:
Consta de dos partes:
Declaracin: se declaran los modificadores, tipo de retorno, nombre, lista de excepciones. Cuerpo: se declaran las variables locales y el cdigo del mtodo. [accesibilidad] [modificadores] tipoRetorno nombreMtodo([parmetros]) [throws excepciones] { ... }

Ejemplo: public boolean isEmpty() {...}


Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
55

Clases y Objetos
Mtodos, modificadores:

Se declaran mtodos privados cuando:


Demasiado cerca de la implementacin Requieren un determinado orden de llamada Se utilizan en las operaciones de la propia clase
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
56

Clases y Objetos
Mtodos, modificadores:
abstract: Un mtodo abstracto no tiene implementacin. Debe ser miembro de una clase abstracta. Actuan como reservas de espacio para los mtodos que se implementan en las subclases. static: Declara al mtodo como mtodo de clase. No necesita de un objeto que lo controle. Ejemplo: Math.pow
Mtodos factora: Mtodos estticos que retornan objetos de su propia clase. Ejemplo: NumberFormat.getCurrencyInstance()

final:El mtodo no puede ser redefinido por las subclases. native: El mtodo est implementado en otro lenguaje. synchronized: Permite que mltiples objetos invoquen el mismo mtodo con exclusin mutua.
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
57

Clases y Objetos
Mtodos, tipo de retorno:
Todo mtodo debe tener un tipo de retorno o void si el mtodo no devuelve nada. Ejemplos:
public void beOn() public boolean isEmpty() public Object[] getElements() public Enumeration elements() public Vector getElements()
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
58

Clases y Objetos
Mtodos, nombre:
Cualquier identificador vlido puede ser nombre de mtodo. Caracteres Unicode. Los nombres de los mtodos empiezan con minscula. Pueden existir mltiples mtodos con el mismo nombre. Los mtodos se diferencian por el nmero y tipo de los parmetros. Se recomienda el uso de getters y setters:
getX() Mtodo de acceso o consulta. No escribir mtodos de acceso que devuelvan referencias de objetos que se pueden modificar. Solucin: clonarlo (.clone()) setX() Mtodo de modificacin
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
59

Clases y Objetos
Mtodos, lista de parmetros:
Es una lista delimitada por coma de la forma tipo parmetro. Los tipos primitivos se pasan por valor. Los objetos usan pasaje de referencias por valor. No se puede declarar una variable dentro de un mtodo con el mismo nombre que un parmetro. Ejemplo:
void unMtodo(int x, int y, String s)

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

60

Clases y Objetos
Mtodos, lista de excepciones:
Java plantea un esquema de excepciones estricto. Contiene todas las excepciones que se pueden levantar a raz de la ejecucin del mtodo. Cuando se invoca un mtodo que puede levantar una excepcin, hay que incluirlo dentro de una clusula try catch.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

61

Clases y Objetos
Mtodos, cuerpo:
Se considera como cuerpo todo lo encerrado entre { y }. Las variables locales enmascaran a las variables miembro de la clase. Las variables declaradas dentro de los mtodos duran lo que dura el mtodo. this:
Se refiere al objeto actual. Slo puede aparecer en el cuerpo de un mtodo de instancia, en un constructor o en la inicializacin de una variable de instancia.

super:
Se refiere a la superclase del objeto actual.

return:
Se utiliza para devolver un valor en los mtodos que devuelven algo (no void).
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
62

Clases y Objetos
Clases Predefinidas
Math
Math.sqrt(double):double Math.pow(double, double):double Math.max(int, int):int Math.min(int, int):int Math.random():double [0,1) Date fecha = new Date();

Date

GregorianCalendar
GregorianCalendar hoy = new GregorianCalendar(); hoy.get(Calendar.MONTH)
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
63

Clases y Objetos
Ciclo de vida de un objeto. Fases:
Creacin Utilizacin Finalizacin

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

64

Clases y Objetos
Creacin:
Se lleva a cabo utilizando los constructores.
Rectangle rect = new Rectangle();

Esta sentencia realiza:


Declaracin Instanciacin Inicializacin

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

65

Clases y Objetos
Creacin:
new es el operador de Java que aloca espacio para un nuevo objeto. Luego del new se coloca un constructor con sus parmetros si los tuviera. Ejemplos:
new Rectangle(10,10); new Rectangle(new Point(10, 10), 10, 10);

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

66

Clases y Objetos
Utilizacin de objetos:
Invocacin de mtodos, acceso a variables y constantes: En clases:
Movible.ORIGEN; Math.abs(-1);

En instancias:
rect.width(); new Point(10,10).x;

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

67

Clases y Objetos
Finalizacin:
Conceptualmente existen dos variantes:
El usuario se encarga de liberar los recursos (Delphi).

El sistema es el encargado de liberar los recursos (Smalltalk, Java).

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

68

Clases y Objetos
Finalizacin:
Las referencias mantenidas en variables locales son liberadas cuando salen del alcance o cuando se les asigna null. Los objetos son recolectados cuando no existen ms referencias a ellos. Antes de destruir un objeto el Garbage Collector llama al mtodo finalize() de dicho objeto. Se utiliza para liberar recursos.
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
69

Clases y Objetos
Paquetes, descripcin:
Un paquete es un conjunto de clases e interfaces relacionadas que proveen acceso protegido y administracin de nombres. Las clases e interfaces que son parte del lenguaje estn agrupadas en paquetes de acuerdo a su funcin:
java.lang: Clases del lenguaje. Se importa por defecto. java.io: para manejo de Entrada/Salida

El programador agrupa sus clases e interfaces en paquetes, anteponiendo la clusula package NombreDelPaquete; a las declaraciones de todas las clases e interfaces agrupadas.
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
70

Clases y Objetos
Paquetes, Creacin:
Un paquete es creado simplemente incorporando una clase o una interfaz. Se requiere escribir la sentencia package como primer sentencia del archivo fuente en donde se est definiendo la clase o la interfaz.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

71

Clases y Objetos
Paquetes, beneficios:
Reconocer y encontrar fcilmente las clases e interfaces relacionadas. Evitar conflictos de nombres, ya que cada clase pertenece a un nico paquete. Controlar el acceso a las clases del paquete. Si no se usa la sentencia package, las clases e interfaces se ubican en el paquete por defecto (default package), que es un paquete sin nombre. No es recomendable utilizar este paquete.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

72

Clases y Objetos
Paquetes, accesos:
Las clases e interfaces miembros de un paquete declarados pblicos pueden ser accedidos desde afuera del paquete, de alguna de las siguientes formas:
Refirindose a su nombre largo:
graphics.Rectangle miRect = new graphics.Rectangle();

Importndolo:
import graphics.Circle; Circle miCir = new Circle();

Importando el paquete ntegro:


import graphics.*; Circle miCir = new Circle(); Rectangle miRec = new Rectangle();
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
73

Clases y Objetos
Clases de enumeracin:
Para declarar variables con un conjunto restringido de valores. Enum es una clase. El enum posee objetos. Ejemplo:
enum Porte {MINI, MEDIANO, GRANDE, EXTRA_GRANDE}; Porte s = Porte.MEDIANO;

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

74

Clases y Objetos
Clases de enumeracin:
Ejemplo:
public enum Talla { MINI(S), MEDIANO(M), GRANDE(L), EXTRA_GRANDE(XL); private Talla(String abrev){ this.abrev = abrev; } public String getAbreviatura() { return abrev; } private String abrev; }
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
75

Clases y Objetos
Reflection, definicin:
Es la habilidad que tiene un programa para realizar algn tipo de computacin sobre s mismo. Tambin se conoce como introspeccin. Para esto es necesario representar los elementos que forman parte de los sistemas de objetos:
Clases Mensajes

Es un mecanismo potente y complejo. Inters especial para los constructores de herramientas y no para los programadores de aplicaciones.
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
76

Clases y Objetos
Reflection, tipos:
Structural Reflection:
Referida a las propiedades estructurales de los sistemas, como jerarquas de clases, tipos, etc. (versin provista por Java)

Behavioral Reflection:
Que ataca el comportamiento de los objetos en el sistema. Utilizada para monitorear y modificar dicho comportamiento.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

77

Clases y Objetos
Reflection, funcionalidad:
Determinar la clase de un objeto. Obtener informacin acerca de las clases: modificadores, constructores, mtodos, variables, superclases e interfaces que implementan. Obtener informacin acerca de las interfaces: declaracin de mtodos y constantes. Invocar mtodos que no son conocidos hasta el tiempo de ejecucin. Crear instancias de clases que son desconocidas hasta el tiempo de ejecucin.
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
78

Clases y Objetos
Cmo obtener instancias de la clase Class?
Class c = mystery.getClass(); TextField t = new TextField(); Class c = t.getClass(); Class s = c.getSuperclass(); Class c = java.awt.Button.class; Class c = Class.forName(strg);

Creacin de un objeto:
c.newInstance() //Llama al constructor predeterminado.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

79

Clases y Objetos
Descubriendo los modificadores: public void printModifiers(Object o) { Class c = o.getClass(); int m = c.getModifiers(); if (Modifier.isPublic(m)) System.out.println("public"); if (Modifier.isAbstract(m)) System.out.println("abstract"); if (Modifier.isFinal(m)) System.out.println("final"); }
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
80

Clases y Objetos
Recuperando las variables: public void printPublicFieldNames(Object o) { Class c = o.getClass(); Field[] publicFields = c.getFields(); for (int i = 0; i < publicFields.length; i++) { String fieldName = publicFields[i].getName(); Class typeClass = publicFields[i].getType(); String fieldType = typeClass.getName(); System.out.println("Name: " + fieldName + ", Type: " + fieldType); } }

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

81

Clases y Objetos
Recuperando los mtodos: public void showMethods(Object o) { Class c = o.getClass(); Method[] methods = c.getMethods(); for (int i = 0; i < methods.length; i++) { String name = methods[i].getName(); System.out.println(Name: " + name); String return = methods[i].getReturnType().getName(); System.out.println("Return Type: " + return); Class[] paramTypes = methods[i].getParameterTypes(); System.out.print("Parameter Types:"); for (int k = 0; k < paramTypes.length; k ++) { String parameterString = paramTypes[k].getName(); System.out.print(" " + parameterString); } System.out.println(); } }

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

82

Clases y Objetos
Ejercicios:
Defina una clase punto que tendr dos atributos, de tipo real, x e y, que representarn las coordenadas del punto dentro del plano. Defina un mtodo que tenga como argumento otro objeto de la clase punto y que calcule la distancia entre los dos puntos. Para probar esta funcionalidad, escriba un mtodo main en el que se creen dos puntos, el primero de los cuales deber tener las coordenadas 100.0, 200.0 y el segundo deber tener las coordenadas 400.0, 800.0 y calcule e imprima la distancia entre ambos. Defina una clase 'Monedero' que permita gestionar la cantidad de dinero de que una persona dispone en un momento dado. La clase deber tener un constructor que permitir crear un monedero con una cantidad de dinero inicial y deber definir un mtodo para meter dinero en el monedero, otro para sacarlo y finalmente, otro para consultar el disponible; solo podr conocerse la cantidad de dinero del monedero a travs de este ltimo mtodo. Por supuesto, no se podr sacar ms dinero del que haya en un momento dado en el monedero. Para probar el funcionamiento de la clase, escriba un mtodo 'main' con una serie de instrucciones que hagan uso de los mtodos definidos.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

83

Herencia
Usamos las clases para representar parte del conocimiento que adquirimos del dominio de problema Qu sucede cuando las clases comparten parte del conocimiento que representan?
Subclasificacin

Crear clases nuevas que se construyan tomando como base clases ya existentes. Cuando se hereda, se reutilizan mtodos y atributos (pueden ser statics) Permite extender la funcionalidad de un objeto.
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
84

Herencia

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

85

Herencia

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

86

Herencia
public class CajaDeAhorro extends CuentaBancaria { }

CajaDeAhorro es subclase/clase derivada / clase hija


Especialidades Tiene mas funcionalidad Cambios no afectan a la superclase.

CuentaBancaria es superclase / clase base / clase padre


Generalidades
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
87

Herencia
Los constructores NO se heredan de las superclases. Si se puede invocar del constructor de la subclase a la superclase con super(). Debe ser primera sentencia del cuerpo del constructor.
public class CajaDeAhorro extends CuentaBancaria { public CajaDeAhorro() { super(); } }

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

88

Herencia
Polimorfismo:
Dos o ms objetos son polimrficos respecto de un conjunto de mensajes, si todos pueden responder esos mensajes, an cuando cada uno lo haga de un modo diferente. Podemos decir que objetos polimrficos corresponden a un mismo tipo de objeto. Mismo tipo significa mismo comportamiento esencial, independientemente de implementacin. Permite que clases de distintos tipos puedan ser referenciadas por una misma variable
CuentaBancaria cta; cta = new CajaDeAhorro(); cta = new CuentaCorriente();

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

89

Herencia

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

90

Herencia

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

91

Herencia
El Polimorfismo es la clave de un buen diseo
Cdigo genrico Objetos desacoplados Objetos intercambiables Objetos reusables Programar por protocolo, no por implementacin (buscar la esencia)

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

92

Herencia
Binding
Binding Temprano o Esttico
Operandos y operadores son ligados en tiempo de compilacin Es el programador quin decide qu se debe ejecutar

Binding Tardo o Dinmico


Operandos y operadores son ligados en tiempo de ejecucin Es el objeto receptor del mensaje quin decide qu se debe ejecutar

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

93

Herencia
Clase Object
Todas las clases de Java extienden a Object. Es la clase raz de todo el rbol de la jerarqua de clases de Java. Se puede utilizar una variable de tipo Object como referencia de objetos de cualquier tipo. Mtodos de Object
public boolean equals(Object obj)
Define que significa que dos objetos sean iguales. La implementacin en Object retorna true si y solo si se trata del mismo objeto (equivale a una comparacin usando ==)

public String toString()


Utilizado para obtener una representacin textual conveniente. Los wrappers de tipos primitivos (Integer, Character, Boolean) lo sobrescriben.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

94

Herencia
Modele una Empresa con empleados. Una empresa conoce a todos sus empleados. Los empleados pueden ser de planta permanente o temporaria, adems hay gerentes, que tambin son empleados de planta permanente, pero siguen un rgimen salarial particular. Cuando un empleado es de planta permanente cobra la cantidad de horas trabajadas por $30, ms antigedad ($10 por ao de antigedad), ms salario familiar. Cuando es de planta temporaria, no cobra antigedad y cobra la cantidad de horas trabajadas por $20, ms salario familiar. El salario familiar es $20 por cada hijo, los empleados casados adems cobran $10 por su esposa/o. Un gerente cobra de manera similar a un empleado de planta permanente pero su hora trabajada vale $40, por antigedad se le pagan $15 por ao, mientras que el salario familiar es el mismo que el de los empleados de planta permanente y temporal. Defina e implemente el mensaje montoTotal() en la clase Empresa, que retorna el monto total que la empresa debe pagar en concepto de sueldos a sus empleados. Realice la implementacin del sistema completo en Java. Provea una clase TestEmpresa para instanciar y testear su sistema. En el mtodo main de esa clase cree el siguiente escenario y enve a la empresa el mensaje montoTotal() para obtener la liquidacin total. Una empresa, con el CUIT y Razn Social que desee, y con los cuatro empleados que se describen a continuacin. Un empleado de Planta Temporaria con 80 horas trabajadas, con esposa y sin hijos. Un empleado de Planta Permanente (que no sea gerente) con 80 horas trabajadas, con esposa, 2 hijos y 6 aos de antigedad. Un empleado de Planta Permanente (que no sea gerente) con 160 horas trabajadas, sin esposa, sin hijos y con 4 aos de antigedad. Un Gerente con 160 horas trabajadas, con esposa, un hijo y 10 aos de antigedad

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

95

Herencia
Un negocio se dedica a la reparacin de PCs. Cada PC que recoge contiene informacin sobre el cdigo de la reparacin, el cdigo del cliente, la descripcin de la avera y el precio de la reparacin. Adems contiene un campo entero que recoge el estado de la reparacin con la siguiente informacin: . Cuando llega una PC al taller se queda pendiente de aprobar el presupuesto y el estado es 0 . Cuando el cliente acepta el presupuesto el campo estado se pone a 1 . Cuando el ordenador esta reparado el campo estado se pone a 2 Algunas PCs estn en garanta, en cuyo caso se aadir un campo con la fecha de compra (AAAAMMDD) a) Codifique la clase PC. Tendr un constructor que permita inicializar el cdigo de la reparacin, el cdigo del cliente y la descripcin de la avera. Tambin tendr un mtodo que permita convertir a cadena una representacin de la PC. b) Codifique una subclase para las pcs en garanta. En esta clase, el mtodo que convierte la PC en cadena aadir tambin la fecha de la compra. c) Codifique una clase Taller. El constructor de dicha clase permitir la creacin de una coleccin de donde se almacenarn las PCs que estn en el taller; dicho constructor tomar como argumento el nmero de PCs mximo que puede tener el taller. La clase Taller contendr mtodos para: La entrada de una PC en el taller. La aceptacin del presupuesto de una reparacin por el cliente. El mtodo deber buscar la PC y poner el estado de la reparacin a 1. La comunicacin del final de la reparacin de la PC . Este mtodo recibir el cdigo de la reparacin y pondr el estado a 2. En el caso de ordenadores que no estn en garanta recibir tambin el precio y actualizar el campo correspondiente. La entrega de una PC, dejando el elemento que ocupaba a nulo.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

96

Herencia
Modele una Empresa de Correo con envos a diferentes lugares del pas. Una empresa conoce todos sus envos. Los envos pueden ser cartas o encomiendas, adems hay telegramas, que tambin son cartas, pero siguen un clculo de precio particular. Un envo implementa la interfaz Calculable, la misma describe la funcionalidad precio que devuelve un double. Cuando un envo es una encomienda el precio se calcula sobre el peso de la misma, siendo la cantidad de gramos de peso por $0.01 ms precio por distancia. Cuando es una carta solo se cobra por distancia. El precio por distancia es de $1 si no supera los 100 km., $1.5 si la distancia est entre los 100 km. y los 500 km. y $2 si supera los 500 Km. Un telegrama se cobra de manera similar a una carta pero se le adiciona $0.01 por carcter (no se incluyen los espacios en blanco). Si la cantidad de palabras supera las 100 lanzar la exception SuperaLimiteException. Defina e implemente el mensaje liquidacinTotal() en la clase Correo, que retorna el monto total que la empresa debe cobrar en concepto de precios de envo. Realice la implementacin del sistema completo en Java. Provea una clase TestCorreo para instanciar y testear su sistema. En el mtodo main de esa clase cree el siguiente escenario y enve a la empresa de correo el mensaje liquidacinTotal() para obtener la liquidacin total. Una empresa, con el CUIT y Razn Social que desee, y con los cuatro envos que se describen a continuacin. Una encomienda con 120 km. de recorrido y con 3.5 kg. de peso Una carta con 650 km. de recorrido. Una carta con 5 km. de recorrido. Un telegrama con 405 Km. de recorrido y un texto Te deseo hoy y siempre felicidad completa. Las clases se organizan en el paquete, cuyo nombre es su apellido.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

97

Interfaces y clases internas


Interfaz
Es una forma de describir lo que deberan hacer las clases sin especificar como deben hacerlo (protocolo de comportamiento) Es una coleccin de declaraciones de constantes y definiciones de mtodos sin implementacin, agrupados bajo un nombre. La razn de usar interfaces es que Java tiene comprobacin estricta de tipos. Cuando se hace una llamada a un mtodo, el compilador necesita ser capaz de averiguar si el mtodo existe realmente. Puede extender mltiples interfaces. Por lo tanto, se tiene herencia mltiple de interfaces. Una clase que implementa una interfaz debe implementar cada uno de los mtodos que estn definidos en sta. Una clase puede implementar una o mas interfaces.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

98

Interfaces y clases internas


Forma general de declaracin:
package nombrePaquete; {importaciones} [public] interface NombreInterfaz [extends SuperInterfaces] { [Constantes] [Encabezados de mtodos] }

SuperInterfaces es una lista de nombres de interfaces separados por coma. Una interfaz hereda todas las constantes y mtodos de sus SuperInterfaces.
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
99

Interfaces y clases internas


public interface Comparable<T> { int compareTo(T otro); } public class CuentaBancaria implements Comparable<CuentaBancaria> { public int compareTo(CuentaBancaria otro){ if (saldo < otro.saldo) return -1; if (saldo > otro.saldo) return 1; return 0; }
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
100

Interfaces y clases internas


Interfaces, propiedades:
No son clases. Se pueden declarar variables de tipo interfaz. Las variables de tipo interfaz tienen que referirse a un objeto de tipo de una clase que implemente la interfaz. Se puede usar instanceof para comprobar si un objeto implementa o no la interfaz. Se pueden extender las interfaces. No se pueden poner atributos ni mtodos estticos, si es posible aportar constantes en ellas. Las clases pueden implementar mltiples interfaces. No debe crecer, si se cambia el comportamiento de una interfaz, todas las clases que la implementen fallaran.
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
101

Interfaces y clases internas


Clases internas (Inner classes):
Definicin: una clase anidada es una clase que se encuentra dentro de otra.
public class UnaClase { . . . class UnaClaseAnidada { . . . } }

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

102

Interfaces y clases internas


Razones de porque podran ser necesario hacer esto:
Los mtodos de las clases internas pueden acceder a los datos que se encuentren en el mismo mbito en que hayan sido definidos. Se pueden ocultar de otras clases del mismo paquete. Las clases internas annimas son tiles cuando se intentan definir retrollamadas sin escribir mucho cdigo. Las clases internas son un fenmeno del compilador, no de la mquina virtual (no posee conocimiento respecto a ellas) Las clases se traducen a archivos
UnaClase$UnaClaseAnidada.class
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
103

Interfaces y clases internas


Clases internas, caractersticas:
Solo pueden instanciarse dentro de su clase contenedora. Se instancian de la misma forma que una clase comn. Puede haber mltiples niveles de clases anidadas. Las clases anidadas pueden tener las mismas caractersticas que las clases comunes, salvo que no pueden declarar ni mtodos ni variables static. Pueden acceder a todas las variables y mtodos de la clase contenedora, incluso los private. La clase contenedora puede acceder a todas las variables y mtodos de la clase anidada, incluso los private. Se utilizan principalmente para estructurar mejor el cdigo dentro de una clase.
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
104

Interfaces y clases internas


Clases internas, clases annimas:
Son clases que se declaran en el cdigo para ser utilizadas en un solo lugar. Sintaxis crptica. Deben ser simples, sino utilizar clases anidadas comunes. No tienen modificadores de acceso ni constructores.
JButton jButton = new JButton(new AbstractAction() { public void actionPerformed(ActionEvent e) { ... } });
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
105

Colecciones
ArrayList
java.util.ArrayList<T> Ajusta automticamente su capacidad a medida que se ingresan y eliminan elementos. Es una clase genrica que admite un tipo como parmetro. Mas eficiente que la clase Vector. Construtores:
ArrayList<T>() ArrayList<T>(int capacidadInicial)

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

106

Colecciones
ArrayList
Mtodos:
size(): int //nmero de elementos almacenados actualmente. ensureCapacity(int capacidad): void trimToSize(): void //reduce capacidad de almacenamiento a su tamao actual add(T obj): boolean add(int indice, T obj): void //desplaza hacia adelante set(int indice, T obj): void // sobreescribe get(int indice): T remove(int indice): T remove(T obj): boolean
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
107

Colecciones
Stack
java.util.Stack<E> Extiende a Vector. Lgica LIFO Constructores:
Stack()

Mtodos:
push(E obj): E pop(): E peek(): E empty(): boolean
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
108

Excepciones
Introduccin:
Representan condiciones excepcionales que el programador quiere tratar. La clase Exception extiende la clase Throwable. La clase Throwable provee caractersticas tiles para tratar con excepciones. Especficamente:
provee un slot para un mensaje. contiene un stack trace.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

109

Excepciones
Manejo de errores en tiempo de ejecucin:
Introduccin de datos de formato incorrecto. (NumberFormatException) Archivo con informacin incorrecta. (IOException) ndice matricial incorrecto. (ArrayIndexOutOfBoundsException) Null.mtodo() (NullPointerException)

Usuarios esperan que el programa se comporte de forma sensata cuando se producen errores volver a un estado seguro.
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
110

Excepciones
Clasificacin de excepciones: Error describe errores internos y el agotamiento de recursos dentro del sistema de ejecucin de Java. No se deben lanzar objetos de este tipo. RuntimeException Se produce porque se ha cometido un error de programacin
Throwable Error Exception IOException RuntimeException

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

111

Excepciones
Declaracin:
Para crear excepciones propias generalmente se hace una subclase de Exception.
package nombrePaquete; {importaciones} [modificadores] class nombreException extends Exception { }

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

112

Excepciones
Cmo se causan excepciones?
Implcitamente: el programa hace algo ilegal. Explcitamente: ejecucin de la sentencia throw.
class SinNaftaException extends Exception { } class Auto { ... if (nafta < 0.1) throw new SinNaftaException(); ... }

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

113

Excepciones
Cmo manejar una excepcin?
try { // Cdigo que levanta una excepcin. } catch (TipoExcepcin nombre) { // Cdigo que se ejecuta en caso de excepcin. } finally { // Cdigo que se ejecuta siempre. }

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

114

Excepciones
Ejemplo
public Object pop() throws SinElementosException { if (this.getElementos().isEmpty()) {
throw new SinElementoException();

} else { return this.getElementos().removeLast(); }} ... try {


elemento = pila.pop();

} catch (SinElementosException e) { e.printStackTrace(); }


Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
115

Excepciones
Sobre el uso de excepciones:
Una condicin de error es tratada slo donde tiene sentido hacerlo y no en todo el nivel entre que ocurre y es tratada. El cdigo puede ser escrito como si todas las operaciones funcionaran correctamente. Deben ser tratadas lo ms especficamente posible. No se deben dejar vacos o solo imprimiendo el stack trace los bloques catch.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

116

Logs
El sistema de generacin de logs maneja un registrador predeterminado llamado Logger.global que se puede emplear en lugar de System.out java.util.logging.Logger Sintaxis inspirada en Log4j Logs dirigirlos a Consola (ConsoleHandler), Archivo (FileHandler) o tubera (SocketHandler) Se pueden definir registradores propios Logger registrador = Logger.getLogger(com.miApp); Existen 7 niveles de registros:
SEVERE WARNING INFO CONFIG FINE FINER FINEST fatales advertencias informaciones configuraciones depuraciones detalles mas detalles

De forma predeterminada se fijan los tres primeros niveles. registrador.setLevel(Level.FINE); //todos los niveles de FINE y superiores. registrador.setLevel(Level.ALL); //todos los niveles registrador.setLevel(Level.OFF); //desactiva todos los niveles

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

117

Logs
Envo de mensajes: registrador.warning(Esto es un warning); registrador.fine(Depuraciones); //= registrador.log(Level.FINE, Depuraciones); Mtodos de conveniencia para seguir el flujo de ejecucin: registrador.entering(UnaClase, unMetodo); registrador.throwing(UnaClase, unMetodo, Throwable); registrador.exiting(UnaClase, unMetodo);
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
118

Logs
Ejemplo
import java.util.logging.*; public class Main { private static Logger logger = Logger.getLogger(Main.class.getName()); public static void main(String[] args) { logger.setLevel(Level.FINER); logger.setUseParentHandlers(false); Handler manejador = new ConsoleHandler(); manejador.setLevel(Level.FINER); logger.addHandler(manejador); logger.entering(Main.class.getName(), "main"); logger.exiting(Main.class.getName(),"main"); } }
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
119

Aserciones
Expresiones de uso frecuente para hacer programacin defensiva. Solo deben emplearse para hallar errores internos del programa durante las pruebas. El mecanismo de aserciones permite insertar pruebas durante la comprobacin y hacer que se eliminen automaticamente en el cdigo de produccion. Ejemplos: assert condicin; assert x>=0; assert condicin : expresin; assert x>=0 : x; Ambas sentencias evaluan la condicin y lanzan un AssertionError si resulta ser false. En la segunda sentencia, la expresin se le pasa al constructor del objeto AssertionError y se transforma en una cadena de mensaje. Las aserciones por default estan desactivadas. Se activan ejecutando el programa con las opciones (argumentos de la VM):
-enableassertions o -ea

Y se desactivan:
-disableassertions o -da
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
120

Aserciones
Ejemplo
public class MainAsserciones { public static void main(String[] args) { int x = -1; assert x>0:x; } }

Exception in thread "main" java.lang.AssertionError: -1 at MainAsserciones.main(MainAsserciones.java:5)


Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
121

Depurador de Eclipse
Se pueden fijar puntos de ruptura.
Sobre la lnea deseada <CTRL+SHIFT+B>

Empezar a depurar
Run Debug As Java Application

Inspeccionar variables.
Cuando el depurador se detiene en un punto de ruptura, se puede ver la pila de llamadas y las variables locales.

Avanzar paso a paso por un programa


Step into (F5) Step over (F6)
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
122

Ejercicio
Implementar un simulador de Vehculos. Existen dos tipos de Vehculos: Coche y Camin. Sus caractersticas comunes son la matricula y la velocidad. En el momento de crearlos, la matricula se recibe por parmetro y la velocidad se inicializa a cero. El mtodo toString() de los vehculos devuelve informacin acerca de la matricula y la velocidad. Adems se pueden acelerar, pasando por parmetro la cantidad en km/h que se tiene que acelerar. Los coches tienen adems un atributo para el nmero de puertas, que se recibe tambin por parmetro en el momento de crearlo. Tiene adems un mtodo que devuelve el nmero de puertas (este comportamiento esta descripto en la interfaz Puertable). Los camiones tienen un atributo de tipo Remolque que inicializa a null (para indicar que no tiene remolque). Adems tiene un mtodo porRemolque(), que recibe el Remolque por parmetro, y otro quita Remolque(). Cuando se muestre la informacin de un camin que lleve remolque, adems de la matricula y la velocidad del camin, debe aparecer la informacin del remolque. En esta clase hay que sobrescribir el mtodo acelerar de manera que si el camin tiene remolque y la velocidad mas las aceleracin superan los 100 km/h se lance un excepcin de tipo DemasiadoRapidoException. Hay que implementar la clase Remolque. Esta clase tiene un atributo de tipo entero que es el peso y cuyo valor se le da en el momento de crear el objeto. Debe tener un mtodo toString() que devuelva la informacin del remolque. Utilizando esta implementacin, desarrolle una aplicacin que haga lo siguiente: Declare y cree un objeto de la clase ArrayList con 4 vehculos (2 camiones y 2 coches) Suponiendo que no se sabe en que posicin del vector estn los coches y los camiones: Ponga un remolque de 5000 Kg. a los camiones. Acelere todos los vehculos y escriba por pantalla la informacin de todos ellos.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

123

Ejercicio
Una editorial de libros edita libros en tres formatos diferentes: edicin rstica, edicin blanco y negro con tapa dura, edicin color con tapa dura. La informacin de la editorial para todos los libros es igual: nombre autor, titulo libro, cantidad de pginas, cantidad de figuras que tiene el libro. El costo de la impresin depende en lo que el cliente solicita: rstica, tapa dura, o lujo El costo de un libro editado en forma rstica es el valor por pgina por la cantidad de pginas, el costo un libro editado con tapa dura es igual que el anterior ms un valor fijo y la edicin de lujo es igual a la anterior ms un valor fijo por la cantidad de figuras a color que lleva el libro, es decir: Sea v el valor de la pgina, w el valor adicional por tapa dura y z el valor adicional por color, entonces: rstica: v x cantidad de pginas tapa dura: v x cantidad de pginas + w lujo: v x cantidad de pginas +w+ z x cantidad de figuras Ingresar por teclado el nombre del cliente, la cantidad de libros a imprimir y qu tipo de edicin solicita y almacenarlo en un ArrayList. Ingresar por teclado los valores v, w y z y la cantidad de libros a imprimir y emitir el valor total de edicin. Se deber usar una interface que describe la funcionalidad costoEdicinLibro(), la misma devuelve un double.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

124

Ejercicio

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

125

Ejercicio

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

126

Ejercicio

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

127

Secuencias y Archivos
Secuencia
Secuencia de entrada: Un objeto del que se puede leer una sucesion de bytes. (InputStream) Secuencia de salida: Un objeto del que se puede escribir una sucesin de bytes. (OutputStream)

La clase File
No sirve ni para leer ni para escribir en un archivo, sino que sirve para trabajar con el sistema de archivos de la mquina del usuario. Puede representar tanto archivo como directorio.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

128

Secuencias y Archivos
File f = new File(c:\\prueba.txt); = new File(c:\\, prueba.txt); = new File(File directorio, String nombre); canRead(): boolean canWrite():boolean delete():boolean exits():boolean getCanonicalFile(): File getCannonicalPath(): String getName(): String getParent(): String
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
129

Secuencias y Archivos
getParentFile(): File getPath(): String isDirectory(): boolean isFile(): boolean isHidden(): boolean lastModified(): long length(): long list(): String[] listFiles(): File[] list(FilenameFilter): String[] listFiles(FilenameFilter): File[]
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
130

Secuencias y Archivos
createNewFile(): boolean mkdir(): boolean renameTo(File): boolean setLastModified(long fecha): boolean setReadOnly(): boolean toURL(): URL

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

131

Secuencias y Archivos
La interfaz FilenameFilter
public class FiltroExtensiones implements FilenameFilter { private String extension; public FiltroExtensiones(String extension) { this.extension = extension; } public boolean accept(File dir, String nombre) { return nombre.endsWith(extension); } }
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
132

Secuencias y Archivos
Lectura de Objetos
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("c:\\prueba.dat"))); Punto p = (Punto) ois.readObject(); System.out.println(p.getX());

Escritura de Objetos
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("c:\\prueba.dat"))); oos.writeObject(new Punto(1,2));

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

133

Secuencias y Archivos
Lectura de Texto
BufferedReader br = new BufferedReader(new FileReader("c:\\prueba.dat")); while((linea=br.readLine()) != null) System.out.println(linea); //otra forma de leer!!! for (; in.ready(); linea += in.readLine() + "\n");

Escritura de Texto
BufferedWriter bw = new BufferedWriter(new FileWriter("c:\\prueba.dat")); bw.write(hola);
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
134

Secuencias y Archivos - Ejercicio


Cargar en un vector la poblacin (Cromosoma) leda del archivo Poblacion.txtcreado previamente en su mquina con los siguientes datos genticos {1110, 0111, 1111, 0001}. Cada cromosoma esta formado por un conjunto finito de genes (smbolos binarios) y su adaptabilidad (decodificacin gentica). Ejemplo: 0111 Adap=7 El objetivo es mostrar en pantalla el funcionamiento del algoritmo junto con la mejor solucin (el individuo que mejor se adapt mayor adaptabilidad) luego de haberse elegido aleatoriamente un cromosoma y mutado uno de sus genes en la misma generacin. Mutacin (alteracin gentica): alteracin aleatoria del valor que toma una posicin en la cadena. Ejemplo: AleatorioCromosoma=2 Cromosoma= 0111 AleatorioGen =2 Cromosoma= 0011

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

135

Mapas
Concepto
Un mapa es una estructura de Java que permite almacenar pares clave-valor. Mapas importantes:
Properties:
Extiende a hashtable (ordena por valor y no por clave) til para almacenar y recuperar archivos de propiedades.

HashMap
Extiende a AbstractMap Implementacin basada en una tabla hash

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

136

Mapas
Properties
Properties prop = new Properties(); prop.put(user, ppando); prop.get(user); prop.load(new FileInputStream(new File("propiedades/prop.properties")));

HashMap
HashMap<String, Object> map = new HashMap<String, Object>(); map.put("user", "ppando"); map.get("user");
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
137

Generics
Consiste en escribir cdigo que se puede reutilizar para objetos de muy distintos tipos. Antes de JDK 5.0, la programacin genrica en Java siempre se realizaba por herencia (Object). Problemas:
Se necesita una refundicin siempre que se recupera un valor. No hay comprobacin de errores. Un error de compilacin es mucho mejor que una excepcin de refundicin (ClassCastException) durante la ejecucin.

JDK 5.0 ofrece una solucin mejor: los parmetros de tipo.


Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
138

Generics
Definicin de una clase genrica:
Es una clase que tiene una o mas variables de tipo. Ejemplo:
public class Pareja <T> { private T prim; private T seg; public Pareja() {prim=null; seg=null;} public Pareja(T p, T s) {prim=p; seg=s;} public T getPrim() {return prim;} public T getSeg() {return seg;} }

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

139

Generics
Los tipos genricos se particularizan reemplazando las variables de tipo por tipos, de la forma:
Pareja<String> obj = new Pareja<String>(); Pareja<String> obj2 = new Pareja<String>(1, 2); String primero = obj2.getPrim();

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

140

Generics
Mtodos genricos:
Se puede definir un nico mtodo con parmetros de tipo.
public class AlgMatrices { public static <T> T getInicial(T[] a) { return a[a.length/2]; } } String [] vocales = {a, e, i}; String inicial = AlgMatrices.<String>getInicial(vocales);
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
141

Generics
Lmites para las variables de tipo:
Restringir T a una clase que implemente una interfaz o a una subclase. Ejemplo:
public static <T extends Comparable> T min(T[] a){ ... }

Las variables o comodines de tipo pueden tener mltiples lmites, por ejemplo:
<T extends Comparable & Serializable>

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

142

Generics
Lmites para las variables de tipo:
No es posible reemplazar un parmetro de tipo por un tipo primitivo. No es posible lanzar ni capturar objetos de clases genricas. No se permite que una clase genrica extienda a Throwable. No es posible declarar vectores de tipos parametrizados. Ejemplo:
Pareja<String> [] v = new Pareja<String>(10); //Error

No se pueden crear objetos de tipos genricos. Ejemplo:


new T(); //Error

No es posible hacer referencias a variables de tipo en atributos o mtodos estticos. Ejemplo:


private static T ejemplarUnico; //Error

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

143

Generics
Tipo comodn:
Denota cualquier tipo genrico de Pareja cuyo parmetro de tipo sea una subclase CuentaBancaria, tal como Pareja<CajaDeAhorro>, pero no Pareja<String>
Pareja<? extends CuentaBancaria>

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

144

Anotaciones
Son marcadores que se insertan en el cdigo fuente para procesarlas empleando ciertas herramientas. Se pueden procesar los marcadores en el nivel de cdigo fuente, pero el compilador tambin puede insertarlos en archivos de clases. @Retention(RetentionPolicy.RUNTIME) Las anotaciones se definen mediante una interfaz de anotacin. Todas las interfaces de anotacin extienden implcitamente la interfaz java.lang.annotation.Annotation
[modificadores] @interface nombreAnotacion { declaraciones de elementos }
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
145

Anotaciones
Las declaraciones de los elementos tienen la forma:
tipo nombreElemento(); tipo nombreElemento() default valor_predeterminado;
public @interface NotificacioError { String asignadoA() default [none]; int gravedad() = 0; }

Las anotaciones tienen el formato:


@NotificacioError(gravedad=10, asignadoA=Harry) @NotificacioError(gravedad=10) @NotificacionError
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
146

Anotaciones
La otra abreviatura es la de anotacin de valor nico:
public @interface Bug { String value(); } @Bug(1234)

Los tipos de elementos de anotacin pueden ser los siguientes:


Tipos primitivos / String / Class / Tipos enumerados / Tipos de anotacin / Vector de los tipos anterios.
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
147

Anotaciones
Se pueden agregar anotaciones a los siguientes elementos:
Paquetes @Target(ElementType.PACKAGE) Clases (incluyendo enum) Interfaces (incluyendo las interfaces de anotacin) Mtodos @Target(ElementType.METHOD) Constructores @Target(ElementType.CONSTRUCTOR) Atributos @Target(ElementType.FIELD)

Anotaciones normales:
@Deprecated (Aplicable a todo) @Override (Solo aplicable a mtodos)

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

148

Anotaciones
Metaanotaciones (aplicable a anotaciones)
@Target: Sirve para restringir los elementos a los que se puede aplicar la anotacin.
@Target(ElementType.PACKAGE) @Target({ElementType.METHOD, ElementType.CONSTRUCTOR}) Las anotaciones que no tienen una restriccin @Target se pueden aplicar a cualquier elemento.

@Retention: Inclusin de anotaciones


@Retention(RetentionPolicy.SOURCE) No se incluyen en .class @Retention(RetentionPolicy.CLASS) Se incluyen en .class, JVM no las carga @Retention(RetentionPolicy.RUNTIME) Se incluyen en .class, JVM las carga

@Documented @Inherited Cuando una clase tiene una anotacin heredada, todas sus subclases poseen automticamente la misma anotacin.

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

149

Anotaciones
Ejemplos:
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Hack { String value() default "";}

@Documented @Retention(RetentionPolicy.RUNTIME) public @interface Deprecated {}

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

150

Internacionalizacin
Cuando se examina una aplicacin que est adaptada para el mercado internacional, la diferencia mas evidente es el idioma. Formatos:
Numricos: 123,456.78 != 123.456,78 Fechas: 31/12/2010 != 12/31/2010

Para poder controlar el formato, se utiliza la clase Locale. Para expresar el idioma y el lugar de una forma concisa y estandarizada, Java utiliza otros cdigos que han sido definidos por la:
ISO 639 (idioma local). Ejemplo sp, en, pt ISO 3166 (cdigo pas). Ejemplo ES, US, PT

Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo

151

Internacionalizacin
Para describir una ubicacin:
Locale espaa = new Locale(sp, ES); Locale ingles = new Locale(Locale.ENGLISH, Locale.US); Locale default = Locale.getDefault(); //especificado por el SO local.

Formatos Numricos
Locale loc = new Locale(de, DE); NumberFormat fmt = NumberFormat.getCurrencyInstance(loc); fmt.format(123456.78);
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
152

Internacionalizacin
Valores monetarios:
NumberFormat fmtEuros = NumberFormat.getCurrencyInstance(Locale.US); fmtEuros.setCurrency(Currency.getInstance(EUR));

Formatos de Fechas:
Locale loc = new Locale(de, DE); DateFormat fmtFecha = DateFormat.getDateInstance(DateFormat.SHORT, loc); fmtFecha.format(new Date());
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
153

Internacionalizacin
Manojo de recursos
Cuando se est traduciendo una aplicacin, es necesario definir las cadenas de mensajes de forma externa (recurso) Nombres posibles de archivo de propiedades:
Cadenas_es_ES.properties Cadenas_es.properties Cadenas_en_US.properties Cadenas_pt_PT.properties ResourceBundle manojo = ResourceBoundle.getBoundle(Cadenas, ubic); String rotuloBotonAceptar = manojo.getString(botonAceptar);
Universidad Kennedy Estructura de Datos III Prof. Ing. Pablo Pandolfo
154

También podría gustarte