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