Objetivos El alumno empleará el concepto de excepción en la

Anuncio
PRÁCTICA
PROGRAMACIÓN ORIENTADA A OBJETOS (MANEJO DE EXCEPCIONES)
Objetivos
El alumno empleará el concepto de excepción en la programación orientada a objetos para
el manejo de errores de ejecución.
Al final de esta práctica el alumno podrá:
Implementar programas orientados a objetos que manejen errores de ejecución.
Antecedentes
1. Haber aplicado los conceptos básicos de la programación orientada a objetos en
programas sencillos.
2. Manejar sentencias de control de flujo en lenguaje Java.
Introducción
Una excepción se genera cuando ocurre un error en tiempo de ejecución. En Java es común
manejar las excepciones para controlar la ejecución del programa. Es por ello la
importancia de conocer cómo se pueden detectar y manipular las diferentes excepciones
definidas en el lenguaje.
Por ejemplo, si para la correcta ejecución de un programa requiere que los datos se le den
desde la línea de comandos, se puede utilizar la excepción llamada IOException, la cual se
generará si no se dan los datos de la forma establecida.
Una vez que se conoce el tipo de excepción que se puede generar en cierta parte del código
de un programa, es necesario emplear la sentencia try-catch para indicar las acciones que
debe realizar el programa en caso de que ocurra la excepción. La sintaxis de la sentencia
try-catch, se presenta a continuación:
try {
Código donde puede ocurrir el error
}
catch (nombre_de_excepción, variable_de_excepción){
Código que se ejecuta en caso de que ocurra el error
}
Ejemplo 1
Excepción ArrayIndexOutOfBoundsException
Cuando se ejecuta una clase definida con parámetros y éstos no se dan desde la línea de
comandos, se genera una excepción debido a que se usan localidades de la variable args; al
no tener elementos que leer, se genera un ArrayIndexOutOfBoundsException, excepción
que puede ser manejada usando try-catch. El siguiente programa incluye el código de
manejo de dicha excepción:
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
PROGRAMACIÓN ORIENTADA A OBJETOS (MANEJO DE EXCEPCIONES)
import java.lang.*;
public class ComplejoAPolar{
public static void main (String[] args){
try{
ComplejoAPolar cap = new ComplejoAPolar();
double real = Double.parseDouble( args[0] );
double imaginario = Double.parseDouble( args[1] );
double r;
double ang;
r = cap.obtenMagnitud(real, imaginario);
ang = cap.obtenAngulo(real, imaginario);
System.out.println("El numero complejo "+real+" +"
+imaginario+" i en su forma polar");
System.out.println("es "+r+" exp("+ang+")");
}
catch(ArrayIndexOutOfBoundsException aioobe){
System.out.println("ERROR!!");
System.out.println("Sintaxis: java ComplejoAPolar”
+” real imaginario");
}
}
public double obtenMagnitud(double r, double i){
double resultado;
resultado = Math.sqrt(Math.pow(r,2)+Math.pow(i,2));
return resultado;
}
public double obtenAngulo(double r, double i){
double resultado;
resultado = Math.atan(i/r);
//El resultado de atan es en radianes, se convierte a grados
resultado=resultado*180/Math.PI;
return resultado;
}
}
La salida del programa, en caso de no incluir los datos de entrada en la línea de comandos
al momento de ejecutar la clase, es la siguiente:
>java ComplejoAPolar
ERROR!!
Sintaxis: java ComplejoAPolar real imaginario
Ejemplo 2
Lectura de una cadena desde la línea de comandos, y excepción IOException.
Este programa leerá una cadena desde la línea de comandos al momento de mandar la
orden de ejecución. Para ello se usarán algunas clases predefinidas en java que se
encuentran en java.io; estas clases son:
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
PROGRAMACIÓN ORIENTADA A OBJETOS (MANEJO DE EXCEPCIONES)
-
InputStreamReader: La cual va leyendo los bytes de la cadena de entrada y los
transforma a caracteres. Para leer una cadena completa desde el teclado, se debe
generar un objeto de esta clase, cuyo argumento es el medio de entrada de los datos;
en este caso es System.in. Por lo tanto la creación de dicho objeto se muestra a
continuación:
InputStreamReader isr = new InputStreamReader(System.in);
-
BufferedReader: Esta clase permite una lectura eficiente, y sirve de puente entre el
origen de los datos y donde se guardarán. Para ello se debe definir un objeto de esta
clase usando el InputStreamReader creado previamente. Además se utilizará el
método readLine() definido en esta clase para leer una línea completa.
BufferedReader br = new BufferedReader(isr);
Este programa podría generar una excepción IOException en caso de no incluir una cadena
en el momento de ejecutarlo, por lo que habrá que utilizar try-catch.
import java.io.*;
public class LeerUnaCadena{
public static void main(String args[]){
try{
// Definir un flujo de caracteres de entrada
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
// Variable para almacenar una línea de texto
String sdato;
System.out.print("Introduzca un texto: ");
sdato = br.readLine(); // leer una línea de texto
// Escribir la línea leída
System.out.println("La cadena leida es: "+sdato);
}
catch(IOException ioe){
//La ignorará
}
}
}
Otra forma de manejar las excepciones, es utilizando la cláusula throws, que identifica la
lista de posibles excepciones que un método puede generar. Esta cláusula se aplica a todo
un método, a diferencia de la sentencia try-catch que acota el código susceptible a generar
una excepción. Como el método que utiliza throws no tiene código para manejar las
excepciones que pueda generar, los métodos que lo invoquen deberán tener protecciones
frente a esas excepciones. La declaración del método con uso de throws presenta la
siguiente sintaxis.
tipo nombreMetodo(argumentos) throws lista_excepciones { código_del_método}
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
PROGRAMACIÓN ORIENTADA A OBJETOS (MANEJO DE EXCEPCIONES)
Ejemplo 3
Programa que solicita una cadena; emplea un método que utiliza la cláusula throws para
leer la cadena.
import java.io.*;
public class LeerUnaCadena{
public static void main(String args[]) {
LeerUnaCadena objCad = new LeerUnaCadena();
String cadena;
try {
// Se invoca al método que puede generar un IOException
cadena = objCad.leeCadena();
System.out.println("\n La cadena leida es: "+ cadena);
} catch (IOException e) {
System.out.println("Error de entrada salida");
}
}
// Método que da lectura de la cadena; usa throws
public static String leeCadena() throws IOException{
// Definición de un flujo de caracteres de entrada
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
// Variable para almacenar una línea de texto
String sdato;
System.out.print("Introduzca un texto: ");
sdato = br.readLine(); // leer una línea de texto
return sdato;
}
}
Se puede observar que el método leeCadena emplea la cláusula throws; esto es obligatorio
porque la línea
sdato = br.readLine(); // leer una línea de texto
puede generar un IOException.
También es necesario que el método main maneje la excepción IOException. Esto lo hace
con la sentencia try-catch mostrada en negritas.
A manera de ejercicio de prueba, realiza las siguientes actividades:
a) Transcribe el ejemplo 3, compílalo y ejecútalo. Notarás que no hay errores ni de
compilación ni de ejecución.
b) Ahora elimina la cláusula throws del método leeCadena. La línea debe quedar de la
siguiente forma:
public static String leeCadena(){
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
PROGRAMACIÓN ORIENTADA A OBJETOS (MANEJO DE EXCEPCIONES)
Compila el programa. Deberá presentar un mensaje de error y no generará el
archivo .class. Explica por qué sucede.
c) Vuelve a incluir la cláusula throws al método leeCadena y comenta las siguientes
líneas del método main
try {
} catch (IOException e) {
System.out.println("Error de entrada salida");
}
Con esto se está excluyendo el manejo de la excepción IOException. Compila el
programa. Notarás que también marca error de compilación. Explica porqué.
El programa del ejemplo 3 también se puede reducir empleando exclusivamente el método
main con la cláusula throws. Finalmente el programa queda como se presenta a
continuación:
import java.io.*;
public class LeerUnaCadena{
public static void main(String args[]) throws IOException{
// Definir un flujo de caracteres de entrada: flujoE
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
// Variable para almacenar una línea de texto
String sdato;
System.out.print("Introduzca un texto: ");
sdato = br.readLine(); // leer una línea de texto
// Escribir la línea leída
System.out.println("La cadena leida es: "+sdato);
}
}
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
PROGRAMACIÓN ORIENTADA A OBJETOS (MANEJO DE EXCEPCIONES)
Ejercicios Propuestos
1. El siguiente código:
public class Division{
public static void main(String args[]){
int x,y,z;
x=2;
y=0;
z=x/y;
System.out.println("El resultado es: "+z);
}
}
genera una excepción al ejecutarse.¿Qué excepción se genera? ¿Por qué?
Modifique el código utilizando try-catch, para que despliegue en pantalla la razón de la
excepción. Además, haga que el programa reciba parámetros desde la línea de
comandos.
2. Investigue con qué tipo de datos se genera la excepción del ejercicio anterior.
Utilizando el código original del ejercicio anterior, si se cambia el tipo de dato, por
ejemplo a double, ¿qué sucede?
3. El siguiente código:
public class Arreglo{
public static void main(String args[]){
int n = Integer.parseInt(args[0]);
int arr[] = new int[n];
for(int i=0;i<n;i++){
arr[i]=i+1;
}
for(int i=0;i<n;i++){
System.out.println("arr["+i+"]: "+arr[i]);
}
}
}
genera una excepción al ejecutarse.¿Qué excepción se genera?, ¿por qué?
Modifique el código utilizando try-catch, para que despliegue en pantalla la razón de la
excepción.
(OSURIHVRUSRGUiGLVHxDUVXVSURSLRVHMHUFLFLRVVLHPSUH\FXDQGRFXEUDSRUFRPSOHWRHOREMHWLYRGH
ODSUiFWLFD
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
Descargar