0% encontró este documento útil (0 votos)
43 vistas29 páginas

AlgoritmosyEstructuradeDatos 10

Presentacion sobre algoritmos y estructura de datos

Cargado por

Javier Prudencio
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
43 vistas29 páginas

AlgoritmosyEstructuradeDatos 10

Presentacion sobre algoritmos y estructura de datos

Cargado por

Javier Prudencio
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 29

Algoritmos y Estructura

de Datos

Razón social
00.00.2015
Logro de la sesión

Al finalizar la unidad, el estudiante


desarrollará programas en JAVA utilizando
excepciones y la clase File para almacenar
datos.

2
Agenda

• Manejo y jerarquía de errores


• Excepciones
• Tipos de Excepciones
• Código para manejo de excepciones
• Lanzamiento de excepciones
• Uso del Boque try catch
• Algoritmo de ordenación Heapsort
3
¿Cuándo los buenos programas salen mal?
• Pueden ocurrir una variedad de errores cuando se ejecuta un
programa. Por ejemplo
– Error de entrada del usuario: Ingresa mal la URL
– Errores de dispositivo: Servidor remoto no disponible
– Limitaciones físicas: Disco lleno
– Errores de código: Interactuar con código que no cumple con sus
condiciones previas y posteriores
• Cuando ocurre un error, se debe volver a un estado seguro,
salir con gracia.

4
¿Cómo manejar errores?
• Es posible detectar y manejar errores de varios tipos.
• Problema: esto complica el código y hace que sea más difícil de
entender.
– El código de detección y manejo de errores tiene poco o nada que
ver con lo que el código real está tratando de hacer.
• Se tiene que buscar el equilibro entre garantizar el
comportamiento correcto en todas las circunstancias posibles y
la claridad del código.

5
Jerarquía de errores
• Todo comienza por un error en
tiempo de compilación (sintaxis) o
en tiempo de ejecución
• Todo objeto error que se genera
en un programa Java hereda de la
clase Throwable
• Cuando un “error” hereda de la
clase error, típicamente debe ser
un tema de hardware poco
espacio de almacenamiento, error
en la memoria.
• La gestión de errores que se
trataran son las que heredan de la
clase Exception. 6
Excepciones
Jerarquía de la clase Exception

• Muchos lenguajes, Throwable


incluido Java, utilizan
un mecanismo conocido Error Exception
como Excepciones para
manejar errores en IOException RuntimeException
tiempo de ejecución.
EOFException FileNotFound
Exception

• En Java, Exception, es Arithmetic NullPointer IndexOut Illegal


una clase con muchos Exception Exception ofBounds Argument
Exception Exception
descendientes. 7
Excepciones

8
Creación de excepciones
• A medida que se ejecuta un programa, si se produce una
situación anómala (manejada por excepciones), se produce lo
siguiente:
– Se crea un objeto de la clase Exception del tipo adecuado
– El flujo de control se transfiere del bloque de código actual, al
código que puede manejar o tratar la excepción
– El flujo normal del programa se detiene y el código de manejo de
errores se hace cargo (si existe).

• Las excepciones en Java se dividen


en dos categorías diferentes:
- Comprobadas (diferente a RuntimeException) y
9
no comprobadas (RuntimeException)
Excepciones no Comprobadas
• Las excepciones no comprobadas son completamente
prevenibles y nunca deberían ocurrir. Son causados por
errores en la lógica de programación, creados por
nosotros, los programadores.
• Descendientes de la clase RuntimeException

• Ejemplos:ArrayIndexOutOfBoundsException (Recorrer un arreglo en una posición


que excede su tamaño), NullPointerException, ArithmeticException

• No es necesario que haya un código especial de manejo de errores solo código de


prevención de errores regular

• Si se requiriera un código de manejo de errores, los programas serían difíciles de


manejar porque muchas declaraciones Java tienen la posibilidad de generar o
causar una excepción no comprobada 10
Excepciones no comprobadas

11
Excepciones Comprobadas
• "Las excepciones comprobadas representan condiciones que,
aunque son excepcionales, se puede esperar razonablemente
que ocurran, y si se producen deben tratarse de alguna
manera. [Aparte de la finalización del programa]".
• ¡Las excepciones comprobadas representan errores que
nosotros no podemos evitar!

• Ejemplo: El archivo al cual se


quiere acceder no se encuentra

12
Código de manejo de errores
• Si llama a un método que puede generar una excepción
comprobada, debe elegir cómo lidiar con ese posible
error
• Por ejemplo, una clase para leer archivos es la clase
FileReader
public FileReader(String fileName) throws FileNotFoundException

• Este constructor tiene la posibilidad de lanzar una


FileNotFoundException.
• FileNotFoundException es una excepción comprobada
13
Excepciones comprobadas en el código
• Si tenemos un programa que intenta construir un objeto FileReader,
debemos considerar la posibilidad de que ocurra una excepción.
• El siguiente código import java.io.FileReader;
contiene un error de
public class Tester
sintaxis: "unreported exception {
java.io.FileNotFoundException”; public int countChars(String fileName)
must be caught or declared to be { FileReader r = new FileReader(fileName);
thrown. int total = 0;
while( r.ready() )
{ r.read();
total++;
}
r.close();
return total;
}
}
14
Manejo de Excepciones comprobadas
• En el código de la diapositiva anterior, de hecho, hay 4 declaraciones
que pueden generar excepciones comprobadas..
• El constructor FileReader
• El método ready
• El método read
• El método close
• Para lidiar con las excepciones
comprobadas, podemos indicar lo sgte:
O bien que el método lance una
excepción del tipo apropiado o bien
manejar la excepción dentro del mismo
método. 15
Métodos que lanzan excepciones
• Puede ser que no sepamos cómo manejar un error dentro del método
que pueda generarlo
• En este caso pasaremos el problema a quien llame al método

• La palabra clave “throws” se usa para indicar que un método tiene la


posibilidad de generar una excepción del tipo indicado.

16
Usando la palabra clave throws
• Si tenemos un programa que intenta construir un objeto FileReader,
debemos considerar la posibilidad de que ocurra una excepción.
public int countChars(String fileName)
• Ahora, quien llame al throws FileNotFoundException, IOException
método también debe { int total = 0;
FileReader r = new FileReader(fileName);
lanzar una excepción o while( r.ready() )
manejarlo { r.read();
total++;
}
r.close();
return total;
}

17
Usando bloques try-catch
• Si desea manejar la excepción comprobada localmente, use las
palabras clave try and catch

• El código que podría causar una excepción se coloca en un bloque de


código precedido por la palabra clave try
• El código que manejará la excepción (si ocurre) se coloca en un
bloque de código precedido por la palabra clave catch

18
Muestra de bloques try-catch
public int countChars(String fileName)
{ int total = 0;
try
{ FileReader r = new FileReader(fileName);
while( r.ready() )
{ r.read();
total++;
}
r.close();
}
catch(FileNotFoundException e)
{ System.out.println("File named "
+ fileName + “ not found. " + e);
total = -1;
}
catch(IOException e)
{ System.out.println("IOException occured " +
"while counting chars. " + e);
total = -1;
}
return total;
} 19
Muestra de bloques try-catch

20
Mecánica del Bloque try y catch
• El código que podría causar la excepción comprobada se coloca en el
bloque try
• Observe cómo se incluyen las declaraciones en un bloque try.
• Cada declaración podría estar en un bloque try separado con un
bloque catch asociado, pero eso es muy difícil de manejar (vea la
siguiente diapositiva)

• Cada bloque try debe tener 1 o más bloques catch asociados

• A continuación el código para manejar el error. En este caso,


simplemente imprimimos el error y establecemos el resultado en -1

21
Muestra de bloques try-catch
public int countChars3(String fileName)
{ int total = 0;
FileReader r = null;
try
{ r = new FileReader(fileName); }
catch(FileNotFoundException e)
{ System.out.println("File named "
+ fileName + "not found. " + e);
total = -1; }
try
{ while( r.ready() )
{ try
{ r.read(); }
catch(IOException e)
{ System.out.println("IOException "
+ "occurred while counting "
+ "chars. " + e);
total = -1;
}
total++;
}
}
catch(IOException e)
{ System.out.println("IOException occurred while counting chars. " + e);
total = -1; }
try
{ r.close();
}
catch(IOException e)
{ System.out.println("IOException occurred while counting chars. " + e);
total = -1; }
return total; 22
}
Más sobre la mecánica del Bloque try y catch
• Si decide manejar localmente la posible excepción en un método con
el bloque try, debe tener un bloque catch correspondiente
• Los bloques catch tienen una lista de parámetros de 1. El parámetro
debe ser Exception o un descendiente de la clase Exception.

• Use múltiples bloques catch con un bloque try en caso de múltiples


tipos de Excepciones

23
¿Qué sucede cuando ocurren excepciones?
• Si se produce una excepción, el flujo normal de control de un
programa se detiene.
• En lugar de ejecutar las declaraciones regulares, el Java Runtime
System comienza a buscar un bloque catch coincidente

• Se ejecuta el primer bloque catch coincidente basado en el tipo de


datos

• Cuando se completa el bloque de código catch, el programa no


"regresa" al lugar donde ocurrió la excepción.

• Encuentra la siguiente instrucción regular después del bloque


catch
24
Contando caracteres de nuevo
public int countChars(String fileName)
{ int total = 0;
try
{ FileReader r = new FileReader(fileName);
while( r.ready() )
{ r.read();// what happens in an exception occurs?
total++;
}
r.close();
}
catch(FileNotFoundException e)
{ System.out.println("File named "
+ fileName + "not found. " + e);
total = -1;
}
catch(IOException e)
{ System.out.println("IOException occured " +
"while counting chars. " + e);
total = -1;
}
return total;
} 25
Lanzando Excepciones nosotros mismos
• Si desea lanzar una excepción en su código, use la palabra clave
“throw”. Lo más común sería por una precondición no satisfecha

public class Circle


{ private int iMyRadius;

/** pre: radius > 0


*/
public Circle(int radius)
{ if (radius <= 0)
throw new IllegalArgumentException
("radius must be > 0. "
+ "Value of radius: " + radius);
iMyRadius = radius;
}
}

26
Ejercicio 1
¿Qué genera el método badUse si se llama con el siguiente código?
int[] nums = {3, 2, 6, 1};
badUse( nums );

public static void badUse(int[] vals){


int total = 0;
try{
for(int i = 0; i < vals.length; i++){ ¿El uso de un bloque try-
int index = vals[i];
total += vals[index]; catch en este caso es un uso
} adecuado de los bloques try-
}
catch(Exception e){
catch?
total = -1;
}
System.out.println(total);
}
27
A. 1 B. 0 C. 3 D. -1 E. 5
¿Preguntas?

28
FIN

29

También podría gustarte