Download PR04 - Diseño de tipos
Document related concepts
no text concepts found
Transcript
Práctica 4 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 Versión 1.0.1 Índice Gestión de excepciones Igualdad, representación y código hash Clonación Orden natural PR4: Diseño de tipos Gestión de excepciones Una excepción es un evento que ocurre durante la ejecución de un programa y que indica una situación anormal que hay que gestionar. Cuando se produce un evento de este tipo se dice que se ha elevado una excepción. Cuando tomamos decisiones después de haberse producido un evento decimos que gestionamos o tratamos la excepción. Un método puede generar excepciones que habrá que gestionar si alguna de ellas se eleva durante su llamada. Hay excepciones que estamos obligados a declarar en la signatura del mismo y hay otras que no. Existen objetos que representan las excepciones. Los podemos tomar de las librerías o crear nosotros las clases. En cada programa necesitamos excepciones (objetos) de tipos específicos. PR4: Diseño de tipos Gestión de excepciones Elevación de una excepción de forma manual: if ( condicion_de_elevación ) { throw new NombreDeLaClase(“TextoExplicativo”); } Las excepciones pueden ser elevadas automáticamente. Ejemplo: al ejecutar la expresión 1/0. Una excepción lanzada será capturada o abortará la ejecución del programa. PR4: Diseño de tipos Gestión de excepciones Ejemplo de elevación de excepción por el sistema: public class TestExcepcion1 extends Test { public static void main(String[] args) { Integer n = 1/0; mostrar(n); } } Exception in thread "main" java.lang.ArithmeticException: / by zero at TestExcepcion1.main(TestExcepcion1.java:8) PR4: Diseño de tipos Gestión de excepciones La excepción puede ser capturada y el programa continuaría siempre que esté dentro de un bloque try, pero las sentencias posteriores a la elevación de la excepción y hasta el final del bloque try no se ejecutan, y sí se ejecutarán las del bloque catch y siguientes. public class TestExcepcion2 extends Test { public static void main(String[] args) { Integer n = null; try { n = 1/0; } catch (ArithmeticException e) { mostrar (n); mostrar ("El valor es infinito "); El objeto es: null } El valor es infinito mostrar ("Final del programa"); Final del programa } } PR4: Diseño de tipos Gestión de excepciones La excepción puede ser elevada por nuestro propio código. Supongamos que consideramos inapropiado construir un Punto con alguna coordenada null. El siguiente constructor elevaría la excepción java.lang.IllegalArgumentException: public PuntoImpl (Double x1, Double y1) { if (x1==null || y1 == null){ throw new IllegalArgumentException ("Algún parámetro es null"); } x=x1; y=y1; } PR4: Diseño de tipos Gestión de excepciones El intento de crear un objeto punto con alguna coordenada null terminará en una excepción y, si no establecemos una captura, con la finalización anormal del programa. public class testExcepcionPunto extends Test { public static void main(String[] args) { Punto p1 = new PuntoImpl(null,4.0); mostrar (p1); } Exception in thread "main" java.lang.IllegalArgumentException: Algún parámetro es null at punto.PuntoImpl.<init>(PuntoImpl.java:7) at test.testPunto.main(testPunto.java:4) PR4: Diseño de tipos Índice Gestión de excepciones Igualdad, representación y código hash Clonación Orden natural PR4: Diseño de tipos Igualdad, representación y código hash Estas propiedades se establecen redefiniendo los métodos correspondientes de la clase Object, que es la raíz de la jerarquía de clases en Java y obligatoria de ser extendida por cualquier nueva clase. ... boolean equals(Object o); int hashCode(); String toString(); ... equals: se utiliza para comparar si dos objetos son iguales. hashCode: devuelve el código hash del objeto. Dos objetos iguales tendrán el mismo código hash. toString: devuelve una cadena de texto que representa al objeto. PR4: Diseño de tipos Igualdad, representación y código hash Puede generar el código utilizando los esquemas explicados en teoría o utilizar el sistema de generación automática de código de Eclipse. Sitúese en el fichero PuntoImpl y active la pestaña Source -> Generate hashCode () and equals() Aparecerá una ventana para elegir los atributos que participan en la igualdad y el código hash. Puede generar los otros métodos de igual forma. PR4: Diseño de tipos Índice Gestión de excepciones Igualdad, representación y código hash Clonación Orden natural PR4: Diseño de tipos Clonación La realizaremos implementando la interfaz Copiable<T>. Para ello usaremos la plantilla de teoría o crearemos una plantilla en Eclipse que nos sirva en otras ocasiones. public interface Copiable<T> extends Cloneable{ T clone(); } public class PuntoImpl implements Punto, Copiable<Punto> { ... public Punto clone(){ Punto copia=null; try{ copia=(Punto)super.clone(); }catch(CloneNotSupportedException e){e.printStackTrace();} return copia; } } PR4: Diseño de tipos Clonación Una plantilla en Eclipse se crea desde la ventana Templates. A la derecha aparecen los botones insertar en el editor, crear, editar, eliminar y en la parte de abajo el código de la plantilla clone. Botones PR4: Diseño de tipos Índice Gestión de excepciones Igualdad, representación y código hash Clonación Orden natural PR4: Diseño de tipos Orden natural La ordenación de un tipo la realizaremos implementando la interfaz Comparable<T>. Para ello usaremos la plantilla de teoría o crearemos una plantilla en Eclipse que nos sirva en otras ocasiones. package java.lang; public interface Comparable<T>{ int compareTo(T o); } public class PuntoImpl implements Punto, Comparable<Punto> { ... public int compareTo(Punto p){ int cmp = getX().compareTo(p.getX()); if(cmp == 0){ cmp = getY().compareTo(p.getY()); } return cmp; } PR4: Diseño de tipos PR4: Diseño de tipos Pasos a la hora de realizar la práctica Crear un directorio como espacio de trabajo llamado WS_Practica04_<usuario> Arrancar Eclipse escogiendo el directorio anterior como espacio de trabajo (Workspace) Crear un proyecto. Añadirle al proyecto los paquetes necesarios. Añadir las clases e interfaces a los paquetes correspondientes. Puede copiar los ficheros de las prácticas anteriores y completarlos. Comprobar que el código Java escrito no tiene errores de compilación. Ejecutar el proyecto y comprobar que tampoco hay errores en tiempo de ejecución y que el programa funciona como se espera. PR4: Diseño de tipos