Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … -

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

2. Manejo de memoria Manejo de memoria estática
Ayudantía Pre-Actividad 5 Multimedios. Ayudantía Pre-Actividad 5 (1) creación de varias clases, y composición (2) manejo de threads (3) manejo de excepciones.
Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones.
Curso de Java Capitulo 6: Cadenas y Arrays Profesor:
Introducción a la programación en JAVA
EXCEPCIONES UNIDAD 5.
Programación Interactiva Manejo de Excepciones
Uso de variables de tipo referencia
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Orientación a Objetos con Java SE
Archivos Implementar un método que lea una secuencia de números enteros de un archivo y compute la cantidad de elementos leídos.
Conceptos más avanzados de Programación Orientada a Objetos Programación 2005 Licenciatura de Lingüística y Nuevas Tecnologías.
Algoritmos y Estructura de Datos
Arquitectura CLARO-TECNOTREE CAPITULO 4: Excepciones
Capitulo 4 Excepciones.
Siguiente Excepciones Introducción. AnteriorSiguiente Definición Una excepción es un evento que ocurre durante la ejecución de un programa que desestabiliza.
1.2 Sintaxis del lenguaje Java.
UNIVERSIDAD LATINA (UNILA)
Rosalía Laza Fidalgo Reyes Pavón Rial Curso
Algoritmo y Estructura de Datos I
Conceptos Básicos de Java
HERENCIA.
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
Manejo de excepciones en Java
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Modificadores.
POO Java Módulo 3 Elementos de programas Identificadores
INSTITUTO TECNOLOGICO DE TEHUACAN Ingeniería en sistemas computacionales Curso de apoyo a la titulación EXCEPCIONES EN JAVA Diciembre de 2008.
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Creación de Aplicaciones
Tema 6: Clases Antonio J. Sierra.
6. Herencia. Clases abstractas. Genericidad
Unidad I Java y C++ : Similitudes y diferencias
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
El lenguaje de programación Java
JAVA J.A.C..
7. Interfaces Herencia múltiple Interfaces Comparable y Comparator
Tema 2: Los tipos de datos
Tema 14: java.lang Antonio J. Sierra. Índice 1. Introducción. 2. Gestión de cadenas. –String –StringBuffer 3. Clases para los tipos simples. –Number –Envolventes.
Sintaxis de C# (Declaraciones y Tipos)
Tema 11: Excepciones Antonio J. Sierra.
Lenguaje Java Fundamentos del lenguajes de programación
Curso Programación en Java
El lenguaje de programación Java
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Programación Orientada a Objetos Temario Excepciones – Definición. – Funcionalidad – Tipos de Excepciones – API de las Excepciones – Captura de Excepciones.
USO DE EXCEPCIONES EN JAVA LSC. Natalia Rodríguez Castellón.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA CUATRO CONTROL DE FLUJOS, EXCEPCIONES Y ASERSIONES.
Programación avanzada en Java Miguel Ángel Corella 23 de Septiembre de 2005.
Programación Orientada a Objetos Unidad 4 Excepciones Universidad de Chile Departamento de Ciencias de la Computación.
1 Manejo de Excepciones y otros Agustín J. González ELO-329.
Programación avanzada en Java Miguel Ángel Corella 26 de Septiembre de 2005.
Tratamiento de excepciones
Ing. Esp. Ricardo Cujar.  Lenguaje de programación orientado a objetos.  Desarrollado por Sun MicroSystems.  Independiente del Sistema Operativo gracias.
¿Qué son? – tipos – manejo - ejemplos
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2009.
Elementos básicos.  Fuertemente tipeado.  Sintaxis similar a C/C++.  Sin punteros: garbage collection.  Portable.  Integra librerías para objetos.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Clases “ Es una Abstracción de un elemento del mundo real ”
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
1 Métodos. 2 Un método es un conjunto de instrucciones definidas dentro de una clase, que realizan una determinada tarea y a las que podemos invocar mediante.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Excepciones Diseño y manejo de excepciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 5 Versión
Diseño de tipos Igualdad, representación, código, copia y relación de orden Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Transcripción de la presentación:

Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … - Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … - Ingeniería de la Programación Práctica 2 Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Objetivos Manejar excepciones en Java. Utilizar clases que implementan colecciones de datos en memoria. Programar la entrada/salida de datos por consola y fichero. Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Contenidos Manejo de excepciones. Bibliotecas de Java Paquete java.lang (núcleo principal de java) Paquete java.util (utilidades, colecciones) Paquete java.io (Entrada / Salida) Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Manejo de excepciones Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Una excepción es una condición anormal que ocurre durante la ejecución de un programa que interrumpe el flujo de ejecución normal. Manejo de excepciones: método estructurado para capturar excepciones, es decir, para detectar y gestionar errores/situaciones anormales durante la ejecución de un programa. Levanta una excepción Método donde ocurre una excepción/error Método sin un manejador de excepción Transmite la excepción Llamada a método Captura la excepción Método con un manejador de excepción main() Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Manejo de excepciones Las excepciones son objetos de Java descendientes de la clase Throwable. Existe un conjunto de excepciones predefinidas (explicado después), pero los programadores pueden definir excepciones nuevas en sus métodos. Con la palabra throw se lanza una excepción, es decir, se crea un objeto (con información asociada al tipo de excepción) que se devuelve al método que hizo la llamada. Cuando un método puede devolver excepciones éstas se declaran en su cabecera utilizando: throws TipoExcepción1, TipoExcepción2 Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Manejo de excepciones try { llamada a método_m() } método_m() throws Exception1 { throw new Exception1() } catch( Exception1 e) { ….. } Bloque donde puede producirse una excepción … catch( Exception2 e) { ….. } Manejadores finally { ….. } Bloque opcional Práctica 2: Aspectos de Java

Manejo de excepciones: Jerarquía parcial Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Manejo de excepciones: Jerarquía parcial Object Throwable Exception Error … … VirtualMachineError AWTError RuntimeException IOException … … OutOfMemoryError NullPointerException StackOverflowError ClassCastException Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Manejo de excepciones Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Las excepciones que se lanzan o declaran explícitamente deben capturarse. Si no, el programa no compilará. Las excepciones que no se capturan explícitamente pueden provocar que se detenga la ejecución del programa. Existen dos categorías: Verificadas: el compilador obliga a su verificación. Cualquier excepción definida por el programador y que se lanza explícitamente. No Verificadas: el compilador no obliga a su verificación. Por ejemplo, Arithmetic Exception, NullPointerException, etc. Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Manejo de excepciones Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) try{ ... } Marca un bloque de código donde puede producirse una excepción. Si se lanza una excepción el control se transfiere a un bloque catch. catch( Excepción e ){ ... } Bloque de código que captura la excepción del tipo “Excepción”. Pueden definirse varios bloques catch para tratar distintas excepciones. Se ejecuta el primer bloque cuyo argumento es compatible. finally{ ... } SIEMPRE se ejecuta, se lance o no una excepción en el bloque try. Código de finalización o de limpieza. throw ObjetoExcepción Lanza explícitamente una excepción. throws listaExcepciones Indica que un método A, que es llamado por un método B, puede generar alguna excepción de la lista, pero no la captura. Será capturada por el método por el cual es llamado (método B). Sólo deben indicarse las excepciones “verificadas”. El resto no es necesario. Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Manejo de excepciones (Ejemplo1) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) class MiExcepcion extends Exception { int datoInformacion; // Constructor MiExcepcion( int datos ) { datoInformacion = datos; } // Sobreescribe el método getMessage() heredado de Throwable public String getMessage() { return( "La máxima es: Compra Barato, Vende Caro\n" + "El valor de datoInformacion es: " + datoInformacion ); Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Manejo de excepciones (Ejemplo1) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) class ejEx01 { public static void main( String args[] ) { try { for( int cnt=0; cnt < 5; cnt++ ) { if( cnt == 3 ) throw new MiExcepcion( 3 ); System.out.println( "Procesando datos para cnt = :" + cnt ); } System.out.println("Esta línea no debe ejecutarse nunca." ); } catch( MiExcepcion e ) { System.out.println("Controlador de Excepciones. ” + e.getMessage() ); System.out.println("Controlador de Excepciones. Ejecutando return." ); return; } finally { System.out.println(”Se entra independientemente de la sentencia return del Controlador de Excepciones." ); } System.out.println( "Esta sentencia nunca se ejecutará debido a la sentencia return del controlador de excepciones." ); Práctica 2: Aspectos de Java

Manejo de excepciones: uso de throws Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Manejo de excepciones: uso de throws class ejEx02 { static void demoproc() throws NullPointerException { // No sería necesario el throws System.out.println( "Dentro de demoproc" ); throw new NullPointerException( "demo" ); } public static void main( String args[] ) { try { demoproc(); catch( NullPointerException e ) { System.out.println( “Capturo la excepción lanzada en demoproc: " + e ); Práctica 2: Aspectos de Java

Manejo de excepciones: uso de throws Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Manejo de excepciones: uso de throws class ejEx03 { static void demoproc() throws MiExcepcion { // SÍ que sería necesario el throws System.out.println( "Dentro de demoproc" ); throw new MiExcepcion( 1 ); } public static void main( String args[] ) { try { demoproc(); } catch( MiExcepcion e ) { System.out.println( “Capturo la excepción lanzada en demoproc: " + e ); Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) La biblioteca de clases (paquetes) Plataforma Java 2 Standard Edition (J2SE) java.lang Núcleo principal de Java. java.util Utilidades de estructuras de datos. java.io Entrada / Salida. java.text Formato y adaptación a idiomas de texto, fechas y números. java.math Operaciones aritméticas con enteros (BigInteger) y coma flotante (BigDecimal). java.awt Componentes para el diseño de la interfaz de usuario y gestión de eventos. javax.swing Nuevas componentes para el diseño de la interfaz de usuario (árbol, tabla, paneles, …). Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) La biblioteca de clases (paquetes) Plataforma Java 2 Standard Edition (J2SE) javax Extensiones al lenguaje Java. java.applet Creación de applets. java.beans Desarrollo de componentes JavaBeans. javax.xml Procesado de documentos XML. java.sql javax.sql Compatibilidad para el acceso a base de datos y procesamiento de datos mediante JDBC. java.rmi Programación distribuida. javax.net Desarrollo de aplicaciones en red. java.security Soporte para seguridad criptográfica. Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Paquete java.lang Este paquete contiene el núcleo principal de Java. Se importa automáticamente en los programas. Incluye entre otros elementos de utilidad: Clases: java.lang.Object: es la clase raíz de la jerarquía de Java. Es la superclase de cualquier clase. java.lang.Class: instancias de Class son las clases, interfaces, tipos primitivos y arrays de un programa en tiempo de ejecución. java.lang.System: contiene atributos y métodos de clase útiles. java.lang.Math: contiene métodos para realizar operaciones matemáticas básicas java.lang.String: instancias de String son cadenas de caracteres. Integer, Float, Double, …: clases que encapsulan tipos primitivos. Interfaces: Cloneable, Runnable, Comparable, … Excepciones: Throwable, Exception, ArithmeticException, ArrayIndexOutOfBoundsException, NullPointerException, … Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) java.lang.Object Raíz de la jerarquía de clases Es la superclase de cualquier clase creada por el programador Define los siguientes métodos que son heredados por la clases derivadas Object clone(): crea y devuelve una copia ‘superficial’ de un objeto. boolean equals(Object obj): indica si dos referencias apuntan al mismo objeto. String toString(): devuelve una cadena con el nombre de la clase y el código (hash) del objeto. Normalmente las clases derivadas redefinen este método para mostrar información acerca del objeto. Class getClass(): devuelve la clase en tiempo de ejecución de un objeto. System.out.print(c.getClass.getName()) mostraría el nombre de la clase a la que pertenece c. int hashCode(): devuelve el código hash de un objeto. Objetos “iguales” deben tener códigos iguales. void finalize(): es el método invocado por el garbage collector de Java cuando el objeto ya no es accesible. Puede ser redefinido por el programador para liberar otros recursos (p.e. cerrar archivos). Práctica 2: Aspectos de Java

java.lang.Object (Ejemplo2) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) java.lang.Object (Ejemplo2) package Figuras; public class Circulo extends Figura implements Cloneable{ … public Object clone() throws CloneNotSupportedException{ return super.clone(); } public String toString(){ String s= "posx= " + x + " posy= " + y + " radio= " +radio; return s + " hash: " + this.hashCode(); Para clonar un objeto: Indicar que se implementa la interfaz Cloneable Redefinir método clone() llamando al método clone de la clase base Capturar la excepción CloneNotSupportedException El objeto devuelto se promociona al tipo esperado (cast) Práctica 2: Aspectos de Java

java.lang.Object (Ejemplo2_1.java) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) java.lang.Object (Ejemplo2_1.java) import Figuras.Circulo; public class Ejemplo2_1 { public static void main(String[] args) { Circulo c1 = new Circulo(100,100,50); Circulo c2; try { c2 = (Circulo) c1.clone(); if (c1.equals(c2)) System.out.println("C1 = C2"); else System.out.println("C1 != C2"); System.out.println("C1: " + c1); System.out.println("C2: " + c2); } catch (CloneNotSupportedException e) { System.out.println("No se puede clonar este objeto."); }}} C1 y C2 son distintos El código hash es diferente Sus atributos valen lo mismo: tanto tipos primitivos, como arrays o referencias. System.out.println("C1: " + c1) es equivalente a System.out.println("C1: " + c1.toString()) Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) java.lang.Math Métodos estáticos que implementan funciones matemáticas. double sin(double ), double cos(double ), double tan(double ), double exp(double ), double log(double ), double pow(double , double ), int max(int, int), float max(float, float ), double max(double, double ), int min(int, int), float min(float, float ), double min(double, double ), int abs(int ), float abs(float ), double abs(double ), double random(), double sqrt(double ), int round(float ), long round(double ). Constantes: PI, E Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) java.lang.String La clase String se utiliza para representar cadenas de caracteres. Son constantes, por lo que su valor no cambia una vez creadas. "...", String(), String(String str), String(char [] str) int length(): devuelve la longitud en caracteres de la cadena. String trim(): Elimina blancos, tabuladores y caract. de control al final de la cadena char charAt(int indice): devuelve el carácter en la posición indice. String substring(int inicio, int fin): devuelve una subcadena entre las posiciones inicio y fin. boolean equals(String str): s1.equals(s2) devuelve true si s1 y s2 guardan la misma cadena. int compareTo(String str): s1.compareTo(s2) devuelve 0 si s1 y s2 guardan la misma cadena, un entero negativo si s1 < s2 y un entero positivo si s1 > s2. int indexOf(int ch): devuelve la posición de la primera ocurrencia de ch. String concat(String str): concatena dos cadenas. String toLowerCase(): transforma los caracteres a minúsculas. String toUpperCase(): transforma los caracteres a mayúsculas. … Práctica 2: Aspectos de Java

java.lang.String (Ejemplo2_2.java) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) java.lang.String (Ejemplo2_2.java) String s1 = "Hola mundo."; String s3 = s1; String s2 = new String("Hola mundo."); if (s1==s3) System.out.println("El mismo objeto cadena!"); if (s1.equals(s2)) System.out.println("Cadenas Iguales!"); System.out.println("La longitud de s1 es: " + s1.length()); System.out.println("El carácter en la posición 3 es: " + s1.charAt(3)); System.out.println("El carácter 'a' está en la posición: " + s1.indexOf('a')); s2= s2.concat(" Adiós"); // s2 <- “Hola mundo. Adiós” String s4="Hola mundo".substring(2,4); //s4 <- ”la” Práctica 2: Aspectos de Java

java.lang.StringBuffer Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) java.lang.StringBuffer La clase StringBuffer también guarda cadenas de caracteres. Puede modificarse el contenido o la capacidad del objeto. StringBuffer(), StringBuffer(String str), StringBuffer(int long) void setLength(int nuevaLong) void setCharAt(int indice, char ch): sustituye el carácter en la posición indice por ch void insert(int posicion, tipo dato): inserta la representación en cadena del dato a partir de la posición indicada. int capacity(): capacidad máxima de la cadena. void append(tipo dato): añade la representación en cadena del argumento al final. String toString( ): devuelve un objeto String que guarda la misma cadena StringBuffer sb1 = new StringBuffer(20); int c=sb1.capacity(); // i <- 20 int l=sb1.length(); // l <- 0 sb1.append("Hoa a Todos"); // s1 <- "Hoa a Todos" l=sb1.length(); // l <- 11 sb1.insert(2,'l'); // s1 <- "Hola a Todos" Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Clases “envoltorio” Las clases “envoltorio” encapsulan un tipo primitivo de datos. Boolean, Byte, Character, Double, Float, Integer, Long, Short. Cada clase proporciona métodos que devuelven el tipo primitivo. char charValue() int intValue() float floatValue() ... Proporcionan algunos métodos estándares clone(), toString(), compareTo() Constantes de clase p.e. MAX_VALUE, MIN_VALUE, en Integer. Métodos de clase Convertir de número a cadena: String toString(int i), devuelve el objeto String que representa al entero i Convertir de cadena a número: int parseInt(String s), devuelve el valor entero correspondiente a s Integer valueOf(String s), devuelve el objeto Integer correspondiente a s Práctica 2: Aspectos de Java

Ejemplo Clases “envoltorio” (Ejemplo2_2.java) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Ejemplo Clases “envoltorio” (Ejemplo2_2.java) String s_ent = Integer.toString(1234); String s_real = Double.toString(123.4); String s5="123a"; String s6="123a"; try { int i = Integer.parseInt("123"); double d = Double.parseDouble("123,4");// error de formato } catch (NumberFormatException e) { System.out.println(“No es un valor numérico"); Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) java.lang.System La clase System proporciona algunos atributos y métodos de clase útiles. No puede ser instanciada. Atributos de clase. static InputStream in: entrada estándar static PrintStream out: salida estándar static PrintStream err: salida de error Métodos de clase static long currentTimeMillis(): devuelve el tiempo en milisegundos desde 1/1/1970 static void exit(int status): termina la ejecución del programa. static Properties getProperties(): obtiene las propiedades del sistema (versión de JRE, classpath, sistema operativo, usuario, etc.) static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length): utilidad para copiar arrays. static void setIn(InputStream in): reasigna la entrada estándar. static void setOut(PrintStream out): reasigna la salida estándar. static void setErr(PrintStream err): reasigna la salida de error. … Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Paquete java.util Utilidades para arrays Colecciones de datos Modelo de eventos Fecha y hora Internacionalización Otras (tokenizadores, generador de números aleatorios, …) Práctica 2: Aspectos de Java

Paquete java.util (Colecciones de datos) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Paquete java.util (Colecciones de datos) java.util.Arrays Utilidades para manipulación de arrays: ordenación, búsqueda, copia y comparación. java.util.ArrayList Lista indexada redimensionable de objetos Implementa las interfaces List, Cloneable y Serializable No está sincronizada, el programador debe controlar la ejecución concurrente de varios threads sobre la lista java.util.HashSet Conjunto de objetos que no se pueden repetir Implementa las interfaces Set, Cloneable y Serializable Utiliza una tabla Hash. Coste de inserción, borrado y búsqueda constante java.util.TreeSet Conjunto implementado con una estructura de árbol. Coste de inserción, borrado y búsqueda logarítmico. Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Paquete java.util java.util.Vector: Lista indexada de objetos redimensionables. Implementa las interfaces List, Cloneable y Serializable. Está sincronizada. java.util.Hashtable: Implementación de un mapa mediante tablas de dispersión. Implementa Map, Clonable y Serializable Asocia claves con valores que pueden ser cualquier objeto. Interface java.util.Iterator: ofrece métodos para recorrer una colección de objetos. Práctica 2: Aspectos de Java

Clase java.util.ArrayList<E> Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Clase java.util.ArrayList<E> ArrayList(), ArrayList(int capacidad_inicial) boolean add (Object obj), boolean add(int indice, E obj) void clear() Object clone(), Object[] toArray() boolean contains(Object obj) E get(int i) int indexOf(Object e), int lastIndexOf(Object e) boolean isEmpty(), E remove(int index), boolean remove(Object obj) E setElementAt(int index, E obj) int size() Iterator iterator() Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Clase java.util.Vector Vector(), Vector(int capacidad), Vector(int capacidad, int incremento) void addElement(Object obj) boolean removeElement(Object obj) void removeAllElements() Object clone(), void copyInto(Object anArray []) int capacity(), int size(), boolean isEmpty(), void setSize(int newSz) boolean contains(Object obj) int indexOf(Object e, int ind), int lastIndexOf(Object e, int ind) Object elementAt(int index) Object firstElement(), Object lastElement() void setElementAt(Object obj, int index) void removeElementAt(int index) void insertElementAt(Object obj, int index) Iterator iterator() Práctica 2: Aspectos de Java

Clase java.util.Hashtable Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Hashtable(), Hashtable(int nElementos), Hashtable(int nElementos, float factorCarga) int size(), boolean isEmpty() Enumeration keys(), Enumeration elements() boolean contains(Object value), boolean containsKey(Object key) Object get(Object key) void rehash() Object put(Object key, Object value) Object remove(Object key) void clear() Object clone() String toString() Práctica 2: Aspectos de Java

Interface java.util.Iterator Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Facilita el recorrido de las estructuras de datos. Ofrece dos métodos: public boolean hasNext () public Object next () Lanza la excepción NoSuchElementException si no hay más elementos public void remove() Borra el último elemento devuelto por next() de la colección Lanza la excepción UnsupportedOperationException si la colección no soporta esta operación Lanza la excepción IllegalStateException si no se ha llamado a next() o se llama dos veces seguidas a remove(). Los objetos de la enumeración sólo se pueden usar una vez. No se puede retroceder a elementos anteriores. Práctica 2: Aspectos de Java

Ejemplo colección ArrayList (Ejemplo2_3.java) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) import java.util.ArrayList; import java.util.Iterator; public class Ejemplo2_3 { public static void main(String[] arg){ ... ArrayList v = new ArrayList(); for (int i=0; i<10; i++) { v.add(new Integer(i)); } // Lista los elementos del vector usando Iterator Iterator it = v.iterator(); while (it.hasNext ()) { System.out.print(it.next() + ", "); System.out.println(); // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, // Lista los elementos del vector usando get(int index) for (int i=0; i<v.size(); i++) { System.out.print(v.get(i) + ", "); // Imprime la representación del vector como cadena System.out.print(v.toString()); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] }} Práctica 2: Aspectos de Java

Entrada / Salida (Flujos de bytes) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Entrada / Salida (Flujos de bytes) Las clases para manejar la E/S derivan de las clases abstractas InputStream y OutputStream. Flujos de bytes (byte streams): secuencias de bytes que se escriben (leen) en (desde) dispositivos externos. En caso de error en la E/S, los métodos generan la excepción IOExcepcion. El programador debe escribir el código necesario para capturarla. P. e. si la fuente de datos no está disponible: el fichero no existe, o no tiene permisos de escritura, etc. FileInputStream y FileOutputStream permiten la lectura y escritura de bytes en ficheros, respectivamente. Práctica 2: Aspectos de Java

Ejemplo flujo de bytes (Ejemplo3, CopiarBytes.java) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Ejemplo flujo de bytes (Ejemplo3, CopiarBytes.java) import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopiarBytes { public static void main(String[] args) throws IOException{ FileInputStream entrada=null; FileOutputStream salida=null; try { entrada= new FileInputStream("entrada.txt"); salida= new FileOutputStream("salida.txt"); int c; while ((c=entrada.read())!=-1){ salida.write(c); } } catch(IOException e) { System.out.println(e.getMessage()); } finally{ if (entrada!=null){ entrada.close(); } if (salida!=null){ salida.close(); } read() devuelve -1 cuando alcanza el final del stream close() en el bloque finally garantiza que se cierra el stream Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Flujos de caracteres Las clases que manejan flujos de caracteres transforman los bytes en caracteres según el juego de caracteres especificado. InputStreamReader y OutputStreamWriter son de propósito general. FileReader y FileWriter son orientadas a fichero y transforman bytes en caracteres según el juego de caracteres local. InputStreamReader y OutputStreamWriter permiten especificar el juego de caracteres. Se definen sobre un flujo de bytes. InputStreamReader in = new InputStreamReader (new FileInputStream (“fichero”)); Práctica 2: Aspectos de Java

Ejemplo flujos de caracteres (Ejemplo3, CopiarCaracteres.java) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Ejemplo flujos de caracteres (Ejemplo3, CopiarCaracteres.java) import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class CopiarCaracteres { public static void main(String[] args) throws IOException{ FileReader entrada=null; FileWriter salida=null; try { entrada= new FileReader("entrada.txt"); salida= new FileWriter("salida_car.txt"); int c; while ((c=entrada.read())!=-1){ salida.write(c); } } catch(IOException e) { System.out.println(e.getMessage()); } finally{ if (entrada!=null){ entrada.close(); } if (salida!=null){ salida.close(); } }} La variable entera c guarda un carácter (16 bits) Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) E/S orientada a líneas Las clases BufferedReader y PrintWriter están diseñadas para leer y escribir líneas de texto, respectivamente. Independientes del terminador de línea (“\r”, “\n”, “\r\n”) Se definen sobre un flujo de caracteres (FileReader, FileWriter). Práctica 2: Aspectos de Java

Ejemplo E/S orientada a líneas (Ejemplo3, CopiarLineas.java) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Ejemplo E/S orientada a líneas (Ejemplo3, CopiarLineas.java) import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.io.BufferedReader; public class CopiarLineas { public static void main(String[] args) throws IOException{ BufferedReader entrada=null; PrintWriter salida=null; try { entrada= new BufferedReader(new FileReader("entrada.txt")); salida= new PrintWriter(new FileWriter("salida_lin.txt")); String l; while ((l=entrada.readLine())!=null){ salida.println(l); } } catch(IOException e) { System.out.println(e.getMessage()); } finally{ if (entrada!=null){ entrada.close(); } if (salida!=null){ salida.close(); } readLine() lee una línea. null indica el final del fichero println() escribe una línea añadiendo el terminador de línea. Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) E/S por consola System.in : Objeto de la clase InputStream. Representa el flujo de entrada estándar (teclado). System.in.read(): lee el siguiente byte. System.out: Objeto de la clase PrintStream. Representa el flujo de salida estándar (pantalla). System.out.print() y System.out.println(): métodos sobrecargados para escribir caracteres. System.err: Representa el flujo de salida de error. System.err.print() y System.err.println(). Práctica 2: Aspectos de Java

Ejemplos E/S estándar (Ejemplo3, LeerCadena.java) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Ejemplos E/S estándar (Ejemplo3, LeerCadena.java) Leer una cadena de la entrada estándar import java.io.BufferedReader; import java.io.InputStreamReader; public class LeerCadena { public static void main(String[] args) { BufferedReader in= new BufferedReader(new InputStreamReader(System.in)); String s=""; System.out.println("Escriba su nombre: "); try{ s=in.readLine(); }catch(Exception E){ s = ""; } System.out.println("Su nombre es: " + s); } Práctica 2: Aspectos de Java

Ejemplos E/S estándar (Ejemplo3, LeerEntero.java) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Ejemplos E/S estándar (Ejemplo3, LeerEntero.java) Leer un entero de la entrada estándar import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class LeerEntero { public static void main(String[] args) { BufferedReader in= new BufferedReader(new InputStreamReader(System.in)); String s=""; int edad=0; System.out.println("Escriba su edad: "); try{ edad=Integer.parseInt(in.readLine().trim()); } catch(NumberFormatException e){ System.out.println("No es un entero."); catch (IOException e){ System.out.println("Error."); System.out.println("Su edad es: " + edad); Práctica 2: Aspectos de Java

Clase java.util.Scanner Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Clase java.util.Scanner Divide la cadena de entrada en tokens separados por un delimitador(espacio en blanco por defecto). El token resultante puede convertirse a un tipo básico utilizando el correspondiente método next. Un objeto de la clase Scanner se construye sobre un flujo de caracteres, un fichero (File) o sobre la entrada estándar (System.in). public void Scanner(File source); public void Scanner(InputStream source): construye un objeto Scanner. public bool hasNext(): devuelve cierto si quedan tokens en la cadena. hasNextDouble(), hasNextInt(), …: devuelven true si el siguiente token es del tipo esperado. public String next(): devuelve el siguiente token (String) public double nextDouble(), public int nextInt(), …: devuelven el siguiente token convertido al tipo indicado. public void useDelimiter(String s): modifica mediante una exp. regular el conjunto de delimitadores. public void useLocale(Locale l): modifica el formato numérico local. Práctica 2: Aspectos de Java

Clase java.util.Scanner (Ejemplo 3, EscanearTeclado.java) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Clase java.util.Scanner (Ejemplo 3, EscanearTeclado.java) import java.util.InputMismatchException; import java.util.Scanner; public class EscaneaTeclado { public static void main(String[] args) { Scanner s=null; try{ s=new Scanner(System.in); System.out.println("Introduce nombre:"); String nombre = s.nextLine(); System.out.println("Introduce edad:"); int edad= s.nextInt(); System.out.println("Nombre:" + nombre); System.out.println("Edad:" + edad); } catch (InputMismatchException e){ System.out.println("Dato incorrecto"); Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Formatear la salida Método format() de PrintWriter (flujo de caracteres) y PrintStream (flujo de bytes). Una cadena con especificadores de formato y la lista de argumentos. System.out.format(“La raíz cuadrada de %d es %f. %n”, n, r); Algunos tipos de especificadores de formato: %d  entero %f  reales %s  cadenas %n  terminador de línea (independiente de la plataforma) Práctica 2: Aspectos de Java

Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Formatear la salida Elementos opcionales (de izq. a dcha.) Índice del argumento con el que empareja el especificador de formato. Flags: +: número con signo Carácter de relleno -: alinea a la derecha ,: formato de número con separadores decimales locales. Anchura mínima, por defecto se alinea a la izquierda. Precisión: para reales es la precisión matemática, para cadenas es la anchura máxima. Se trunca por la derecha. Ejemplo: System.out.format (“%f, %1$+020.10f”, Math.PI) Salida: 3,141593, +0000000003,1415926536 Práctica 2: Aspectos de Java

Flujos de objetos: “Serialización” Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Permite hacer los objetos persistentes, es decir, almacenar objetos en archivos, para poder recuperarlos en otro momento. Para “serializar” una clase, ésta debe implementar la interfaz Serializable (java.io). ObjectOutputStream es el flujo de objetos de salida que se definen sobre FileOutputStream. ObjectOutputStream(FileOutputStream fich); writeObject(Object obj); ObjectInputStream es el flujo de objetos de entrada que se define sobre FileInputStream. ObjectInputStream(FileInputStream fich); Object readObject(); La lectura de los objetos desde el archivo debe realizarse en el mismo orden en que se han escrito . Práctica 2: Aspectos de Java

Ejemplo de “Serialización” (Ejemplo 3, Serializacion.java) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) import java.util.ArrayList; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import Figuras.Circulo; public class Serializacion { static ArrayList v; static void GuardarVector(){ try { ObjectOutputStream objout = new ObjectOutputStream ( new FileOutputStream("prueba.dat")); objout.writeObject(v); objout.close(); System.out.println("Archivo guardado."); } catch (IOException e) { System.out.println("Error guardando archivo: "); Práctica 2: Aspectos de Java

Ejemplo de “Serialización” (Ejemplo 3, Serializacion.java) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) static void LeerVector(){ try { ObjectInputStream objin = New ObjectInputStream (new FileInputStream("prueba.dat")); v= (ArrayList) objin.readObject(); objin.close(); System.out.println("Archivo leído."); } catch (ClassNotFoundException e) { System.out.println("Error!"); catch (IOException ex) { System.out.println("Error abriendo archivo: "); Práctica 2: Aspectos de Java

Ejemplo de “Serialización” (Ejemplo 3, Serializacion.java) Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) public static void main(String[] args) { v = new ArrayList(); // ArrayList ya implementa Serializable for (int i=0;i<10;i++){ Circulo c = new Circulo(1,1,i); v.add(c); } GuardarVector(); v.clear(); //borra los elementos del array LeerVector(); for (int i=0;i<v.size();i++){ ((Circulo) v.get(i)).dibujar(); Los objetos del Array (Circulo) deben definirse como “serializables” public class Circulo extends Figura implements Serializable{ Práctica 2: Aspectos de Java

Ejercicio: Servicio de Mantenimiento Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Cree un proyecto nuevo llamado “GestionActivos” Cree el paquete “dominio” que contendrá las clases del dominio y la lógica de la aplicación. Clase Maquina (fichero Maquina.java) con los atributos: número (int), marca, modelo, numSerie, observaciones (String), con un constructor que inicialice los atributos Menú contextual de eclipse: source -> Generate Constructor using fields Métodos set y get para cada atributo Menú contextual de eclipse: source -> Generate getters and setters Redefina el método toString() para que devuelva en una cadena los valores de los atributos de una instancia. Práctica 2: Aspectos de Java

Ejercicio Servicio de Mantenimiento Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Clase GestionMaquinas (fichero GestionMaquinas.java) Clase que maneja la lista de avisos de incidencias, que será un atributo privado de tipo ArrayList. Con getter y setter para su atributo lista. Con los métodos: void addMaquina(Maquina m) throws MaquinaYaExiste: añade una nueva Máquina a la lista. En caso de que exista ya una máquina con el mismo número, no la añade y lanza la excepción MaquinaYaExiste. Maquina getMaquinaPorNumero(int num): devuelve la Máquina de la lista cuyo número sea num. void borraMaquinaPorNumero(int num): borra la Máquina de la lista cuyo número sea num. void guardaListaMaquinas(String fichero): serializa los objetos de la lista en un fichero. void cargaListaMaquinas(String fichero): carga en memoria la lista de avisos guardada previamente en un fichero. Recuerde indicar en la declaración de Maquina que implementa la interfaz Serializable Práctica 2: Aspectos de Java

Ejercicio Servicio de Mantenimiento Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Cree el paquete "excepciones" e incluya las excepciones que considere necesarias, p.e. Clase MaquinaYaExiste (fichero MaquinaYaExiste.java) Clase que extiende Exception Con constructor vacío. Redefinir el método String getMessage()para que devuelva el mensaje asociado a la excepción. Práctica 2: Aspectos de Java

Ejercicio Servicio de Mantenimiento Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Cree el paquete "interfaz" que incluirá las clases relacionadas con la interfaz de la aplicación con el usuario. Clase Menu (archivo Menu.java) Con los atributos: Titulo del menú (string) Lista de opciones de menú (ArrayList) Con constructor que inicialice los atributos. Con los métodos: public void escribirMenu(): visualiza por consola el menú de la aplicación. public int getOption(): devuelve la opción introducida por teclado. Práctica 2: Aspectos de Java

Ejercicio Servicio de Mantenimiento Ingeniería de la Programación, 4º curso FI ( DSIC - UPV) Las opciones del menú serán las siguientes: 1.- Introducir Máquina 2.- Listar Máquinas 3.- Recuperar Máquina por número 4.- Borrar Máquina por número 5.- Guardar Archivo de Incidencias 6.- Cargar Archivo de Incidencias 0.- Salir Clase PrincipalConsola (archivo PrincipalConsola.java) Inicializa el menú de la aplicación y lo muestra en pantalla. Pide al usuario los datos necesarios para cada una de las opciones del menú e invoca al método de la clase GestionMaquinas que implementa la funcionalidad requerida. Realiza las validaciones sintácticas necesarias sobre los datos (datos tipo int o date) y en caso de error informa al usuario. Práctica 2: Aspectos de Java