You are on page 1of 19

Programacin II

POO Avanzada:
Aserciones y Excepciones
ngel Lucas Gonzlez Martnez
Jaime Ramrez Rodrguez

DLSIIS. Facultad de Informtica


Universidad Politcnica de Madrid

Aserciones

Assert
Sirven para detener la ejecucin ante
situaciones anmalas
Los assert se generan cuando una condicin no
Nombre
de
se cumple (se evala a falso)
clase.
pone es
Los assert slo se tienen en cuenta con Siparano setodas
las
clases
determinadas opciones de ejecucin
java -ea[:<nombrePaquete>|:<nombreClase>]
El assert en java sigue el siguiente formato:
assert expresion1 [: expresion2];
Expresion1 es booleana. Si es falso se para la ejecucin
mostrando el valor de expresion2 (no puede ser void)
3

Assert
Se utilizan durante la fase de pruebas de un
programa para detectar errores en el cdigo.
Tienen la ventaja de que una vez que se ha
completado la depuracin del cdigo, no es
necesario retirarlas del cdigo.

Ejemplo assert
Si la cola est vaca y se ha ejecutado
java ea[:<nombreClase>] se
evala el assert y se para la ejecucin

while (contador < n - sacar)


{//W
assert !colaEnteros.estaVacia() : "Cola Vaca " + "antes de sacar";
aux=colaEnteros.sacarPrimero();
assert aux == (contador+sacar) : "No se almacenan "
+"bien los valores";
contador++;
}//W
assert colaEnteros.estaVacia(): "La cola no est " + "vaca";

EXCEPCIONES

Excepcin
Notificar una situacin anmala
Se presenta durante la ejecucin de un
programa
Ejemplos:

Acceso a una posicin de un array que no existe


Divisin por cero
Agotamiento de la memoria
Fichero no encontrado
Problemas al construir una instancia de una clase
Conexin por red no lograda, etc.
7

Excepcin
El manejo de excepciones permite controlar y dar
respuestas a situaciones anmalas
Mejor que devolver un cdigo de error

Separacin:
Cdigo que resuelve un problema (try)
Cdigo que trata situaciones especiales (catch)
Cdigo que se ejecuta en cualquier caso (finally)

Para generar una excepcin se utiliza throw


Cuando un mtodo o constructor puede generar una
excepcin debe indicarlo en su especificacin:
public int read() throws IOException
8

Tipos de Excepciones
1. Predefinidas del lenguaje Java

No hace falta declararlas en las cabeceras o capturarlas


Ejemplos: Vase la siguiente transparencia

2. Definidas en la API de Java

Por ejemplo: FileNotFoundException, ConnectException,


etc.

3. Definidas por el programador

Se pueden lanzar cuando no se cumple la precondicin


de un mtodo: E.g. el factorial recibe un nmero
negativo.
Se pretende construir un objeto con datos de entrada no
vlidos: E.g. El concesionario recibe un nmero de
coches negativo en el constructor
9

Jerarqua de Excepciones Predefinidas

10

Manejo de una excepcin


Supongamos que en una funcin f de Java se
detecta una situacin anmala, entonces:
Se ejecuta:
throw new MiException([msg]);

Para que pueda ser capturada:


try {// bloque try
f(...); // u otra funcin que llame a f.
}

11

Manejo de una excepcin


El tratamiento de la excepcin se especifica mediante una
sentencia catch:
try {
f(...) // posible fuente de la excepcin
........
} catch (tipo_excepcion1 parmetro1) {
tratamiento de la excepcin1
} catch (tipo_excepcion2 parmetro2) {
................................
} catch (tipo_excepcionN parmetroN) {
tratamiento de la excepcinN
} [ finally {
bloque que se ejecuta siempre
}]
12

Manejo de una excepcin

Tras ser lanzada una excepcin el proceso es:


1. Se busca de arriba a abajo un catch en el mismo
nivel que el try que encierra la llamada a f
2. Si no hay ninguno que sirva, se busca en un
posible try que encierre al try anterior, y as
sucesivamente hasta que se encuentre un try con
un catch apropiado
3. Si se llega al main y no hay ninguno que sirva, se
detiene la ejecucin con un mensaje de error

Si es tratada, la ejecucin contina con la


siguiente sentencia al bloque try catch que
trat la excepcin.
13

Definicin de Excepciones

14

Creacin de clases de Excepciones


Se debe definir una nueva clase subclase de la
clase Exception.
class MiExcepcion extends Exception {
public MiExcepcion() { }
// si se quiere mostrar un cierto mensaje
// se debe definir este segundo constructor
public MiExcepcion(String msg) {
super(msg);
}
}
15

Algunos servicios de Exception


Servicios proporcionados:

Exception(String message)
String getMessage()
void printStackTrace()
void printStackTrace(PrintStream s)

16

Declaracin y tratamiento de una


Excepcin
class MiExcepcion extends Exception
{
MiExcepcion(String sMensaje)
{//Constructor
super (sMensaje);
}//Constructor
}
public class Ejemplo{//Ejemplo
private int nMax;
Ejemplo(int nMaximo){//Ejemplo
nMax=nMaximo;
}//Ejemplo
void generarExcepcion(int nValor) throws MiExcepcion
{//generarExcepcion
if (nValor>=nMax)
throw new MiExcepcion ("El valor:"+nValor+
" supera el rango");
}//generarExcepcion
17

Declaracin y tratamiento de una


Excepcin
static public void main(String args[]){//main
Ejemplo Ej=new Ejemplo(4);
for (int i=0;i<6;i++){//for
try {//try
Ej.generarExcepcion(i); //Uso de mtodos que pueden
//producir excepcin
}//try
catch (MiExcepcion e) //Tratamiento de excepciones
{//catch
System.out.println (e.getMessage());
}//catch
finally //Cdigo que siempre se ejecuta
{//finally
System.out.println("El valor del contador en esta
" iteracin es: "+i);
}//finally
}//for
}//main
}//Ejemplo
18

Ejercicio
Dada una clase Cuenta con los siguientes mtodos:
Atributos: saldo, gastosApertura (el mismo para todas las
cuentas, 10)
Constructor (cliente, saldo inicial): resta gastos de apertura
void sacarDinero(cantidad)
void ingresarDinero(cantidad)

Crear una excepcin SaldoInicialInsuficiente


lanzarla desde el constructor si el saldo inicial es menor que los
gastos de apertura

Crear una excepcin SaldoInsuficiente


lanzarla desde sacarDinero() si el saldo es menor que la
cantidad que se desea retirar.
19

You might also like