EDIII
EDIII
EDIII
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.
Introduccin
Principales caractersticas del Lenguaje:
Simple y Familiar Orientado a Objetos Distribuido Robusto Seguro Arquitectura neutral Multithread Interpretado Dinmico
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
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.
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.
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.
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)
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.
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
Introduccin
Entornos de programacin Java
JDK: Java Development Kit Java SDK: Software Development Kit (versiones 1.2 a 1.4)
Opciones de entorno:
JDK + editor de texto IDE
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
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
18
Clases o interfaces
19
Para qu utilizar las clases wrappers? Java no es un lenguaje orientado a objetos puro.
20
22
23
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
27
Clases y Objetos
Paradigma de Programacin:
Conjunto de:
Elementos, Estructuras, y Reglas
Para:
Disear y construir Programas
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
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?
33
Clases y Objetos
Objetos como Abstracciones
Un objeto presenta:
Un comportamiento bien determinado
Qu hace el objeto? Representa la esencia del ente
Una Identidad
Cmo podemos distinguir un objeto de otro? Identidad vs. Igualdad
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
Clases y Objetos
Un ejemplo simple
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
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.
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
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.
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.
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.
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.
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
44
Clases y Objetos
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.
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];
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
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.
53
Clases y Objetos
Variables:
Visibilidad: bloque de cdigo en donde es accesible la variable Hay 3 categoras:
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] { ... }
Clases y Objetos
Mtodos, modificadores:
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)
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.
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
64
Clases y Objetos
Creacin:
Se lleva a cabo utilizando los constructores.
Rectangle rect = new Rectangle();
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);
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;
67
Clases y Objetos
Finalizacin:
Conceptualmente existen dos variantes:
El usuario se encarga de liberar los recursos (Delphi).
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.
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.
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();
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;
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.
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.
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); } }
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(); } }
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.
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
85
Herencia
86
Herencia
public class CajaDeAhorro extends CuentaBancaria { }
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(); } }
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();
89
Herencia
90
Herencia
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)
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
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 ==)
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
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.
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.
97
98
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
102
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)
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.
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
111
Excepciones
Declaracin:
Para crear excepciones propias generalmente se hace una subclase de Exception.
package nombrePaquete; {importaciones} [modificadores] class nombreException extends Exception { }
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(); ... }
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. }
114
Excepciones
Ejemplo
public Object pop() throws SinElementosException { if (this.getElementos().isEmpty()) {
throw new SinElementoException();
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.
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
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; } }
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.
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.
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.
124
Ejercicio
125
Ejercicio
126
Ejercicio
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.
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
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));
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
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
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.
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;} }
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();
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>
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
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>
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; }
Anotaciones
La otra abreviatura es la de anotacin de valor nico:
public @interface Bug { String value(); } @Bug(1234)
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)
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.
@Documented @Inherited Cuando una clase tiene una anotacin heredada, todas sus subclases poseen automticamente la misma anotacin.
149
Anotaciones
Ejemplos:
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Hack { String value() default "";}
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
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