Está en la página 1de 8

Abstraccin Volviendo a la figura anterior de la relacin de herencia entre clases, se puede pensar en una jerarqua de clase como la definicin

de conceptos demasiado abstractos en lo alto de la jerarqua y esas ideas se convierten en algo ms concreto conforme se desciende por la cadena de la superclase. Sin embargo, las clases hijas no estn limitadas al estado y conducta provistos por sus superclases; pueden agregar variables y mtodos adems de los que ya heredan de sus clases padres. Las clases hijas pueden, tambin, sobreescribir los mtodos que heredan por implementaciones especializadas para esos mtodos. De igual manera, no hay limitacin a un slo nivel de herencia por lo que se tiene un rbol de herencia en el que se puede heredar varios niveles hacia abajo y mientras ms niveles descienda una clase, ms especializada ser su conducta. La herencia presenta los siguientes beneficios:
o

Las subclases proveen conductas especializadas sobre la base de elementos comunes provistos por la superclase. A travs del uso de herencia, los programadores pueden reutilizar el cdigo de la superclase muchas veces. Los programadores pueden implementar superclases llamadas clases abstractas que definen conductas "genricas". Las superclases abstractas definen, y pueden implementar parcialmente, la conducta pero gran parte de la clase no est definida ni implementada. Otros programadores concluirn esos detalles con subclases especializadas.

obrecarga de mtodos y de constructores La firma de un mtodo es la combinacin del tipo de dato que regresa, su nombre y su lista de argumentos. La sobrecarga de mtodos es la creacin de varios mtodos con el mismo nombre pero con diferentes firmas y definiciones. Java utiliza el nmero y tipo de argumentos para seleccionar cul definicin de mtodo ejecutar. Java diferencia los mtodos sobrecargados con base en el nmero y tipo de argumentos que tiene el mtodo y no por el tipo que devuelve. Tambien existe la sobrecarga de constructores: Cuando en una clase existen constructores mltiples, se dice que hay sobrecarga de constructores.
Ejemplo /* Mtodos sobrecargados */ int calculaSuma(int x, int y, int z){ ... } int calculaSuma(double x, double y, double z){ ... } /* Error: estos mtodos no estn sobrecargados */ int calculaSuma(int x, int y, int z){ ... } double calculaSuma(int x, int y, int z){ ... } Ejemplo /* Usuario4.java */ class Usuario4 { String nombre; int edad; String direccion; /* El constructor de la clase Usuario4 esta sobrecargado */ Usuario4( ) { nombre = null; edad = 0; direccion = null; } Usuario4(String nombre, int edad, String direccion) { this.nombre = nombre; this.edad = edad; this.direccion = direccion;

} Usuario4(Usuario4 usr) { nombre = usr.getNombre(); edad = usr.getEdad(); direccion = usr.getDireccion(); } void setNombre(String n) { nombre = n; } String getNombre() { return nombre; } /* El metodo setEdad() est sobrecargado */ void setEdad(int e) { edad = e; } void setEdad(float e) { edad = (int)e; } int getEdad() { return edad; } void setDireccion(String d) { direccion = d; } String getDireccion() { return direccion; } } Ejemplo /* ProgUsuario4.java */ class ProgUsuario4 { void imprimeUsuario(Usuario4 usr) { // usr.nombre equivale en este caso a usr.getNombre() System.out.println("\nNombre: " + usr.nombre ); System.out.println("Edad: " + usr.getEdad() ); System.out.println("Direccion: " + usr.getDireccion() +"\n"); } public static void main(String args[])

{ ProgUsuario4 prog = new ProgUsuario4( ); /* Se declaran dos objetos de la clase Usuario4 */ Usuario4 usr1,usr2; /* Se utiliza el constructor por omisin */ usr1 = new Usuario4( ); prog.imprimeUsuario(usr1); /* Se utiliza el segundo constructor de Usuario4 */ usr2 = new Usuario4("Eduardo",24,"Mi direccion"); prog.imprimeUsuario(usr2); /* Se utiliza el tercer constructor de Usuario4 */ usr1 = new Usuario4(usr2); usr1.setEdad(50); usr2.setEdad(30.45f); prog.imprimeUsuario(usr1); prog.imprimeUsuario(usr2); } }

Constructores y creacin de objetos Una vez que se tiene definida la clase a partir de la cual se crearn los objetos se est en la posibilidad de instanciar los objetos requeridos. Para la clase Usuario del ejemplo anterior podemos crear un objeto de la siguiente manera:
Usuario usr1; //usr1 es una variable del tipo Usuario usr1 = new Usuario();

La primera lnea corresponde a la declaracin del objeto, es decir, se declara una variable del tipo de objeto deseado. La segunda lnea corresponde a la iniciacin del objeto.

El operador new El operador new crea una instancia de una clase asignando la cantidad de memoria necesaria de acuerdo al tipo de objeto. El operador new se utiliza en conjunto con un constructor. El operador new regresa una referencia a un nuevo objeto.

Constructores Un constructor es un tipo especfico de mtodo que siempre tiene el mismo nombre que la clase, y que se utiliza cuando se desean crear

objetos de dicha clase, es decir, se utiliza al crear e iniciar un objeto de una clase.

Constructores mltiples Cuando se declara una clase en Java, se pueden declarar uno o ms constructores (constructores mltiples) opcionales que realizan la iniciacin cuando se instancia un objeto de dicha clase.

Para la clase Usuario del ejemplo anterior no se especific ningn constructor, sin embargo, Java proporciona un constructor por omisin que inicia las variables del objeto a sus valores predeterminados.
Ej. /* ProgUsuario.java */ class ProgUsuario { public static void main(String args[]) { Usuario usr1, usr2; /* Se declaran dos objetos de la clase Usuario */ boolean si_no; usr1 = new Usuario(); /* Se utiliza el constructor por omisin */ si_no = usr1 instanceof Usuario; if(si_no == true) System.out.println("\nEl objeto usr1 SI es instancia de Usuario."); else System.out.println("\nEl objeto usr1 NO es instancia de Usuario."); usr2 = usr1; /* usr1 y usr2 son el mismo objeto */ si_no = usr2 instanceof Usuario; if(si_no == true) System.out.println("\nEl objeto usr2 SI es instancia de Usuario."); else System.out.println("\nEl objeto usr2 NO es instancia de Usuario."); } }

Sobreescritura de mtodos Una subclase hereda todos los mtodos de su superclase que son accesibles a dicha subclase a menos que la subclase sobreescriba los mtodos. Una subclase sobreescribe un mtodo de su superclase cuando define un

mtodo con las mismas caractersticas ( nombre, nmero y tipo de argumentos) que el mtodo de la superclase. Las subclases emplean la sobreescritura de mtodos la mayora de las veces para agregar o modificar la funcionalidad del mtodo heredado de la clase padre.
Ejemplo class ClaseA { void miMetodo(int var1, int var2) { ... } String miOtroMetodo( ) { ... } } class ClaseB extends ClaseA { /* Estos mtodos sobreescriben a los mtodos de la clase padre */ void miMetodo (int var1 ,int var2) { ... } String miOtroMetodo( ) { ... } }

Interfaces Una interface es una variante de una clase abstracta con la condicin de que todos sus mtodos deben ser asbtractos. Si la interface va a tener atributos, stos deben llevar las palabras reservadas static final y con un valor inicial ya que funcionan como constantes por lo que, por convencin, su nombre va en maysculas.
interface Nomina { public static final String EMPRESA = "Patito, S. A."; public void detalleDeEmpleado(Nomina obj); }

Una clase implementa una o ms interfaces (separadas con comas ",") con la palabra reservada implements. Con el uso de interfaces se puede "simular" la herencia mltiple que Java no soporta.
class Empleado implements Nomina { ... }

En este ejemplo, la clase Empleado tiene una clase padre llamada Object (implcitamente) e implementa a la interface Nomina, quedando el diagrama de clases de la siguiente manera:

La clase que implementa una interface tiene dos opciones: 1) Implementar todos los mtodos de la interface. 2) Implementar slo algunos de los mtodos de la interface pero esa clase debe ser una clase abstracta (debe declararse con la palabra abstract).

La causa de excepciones Java usa las excepciones para proporcionar a los programas la capacidad de manejar los errores.

Excepcin Una excepcin es un evento que ocurre durante la ejecucin de un programa que interrumpe el flujo normal de las instrucciones.

Diversas clases de errores pueden causar excepciones --errores que van desde serios problemas de hardware, hasta simples errores de programacin. Cuando un error ocurre dentro de un mtodo, el mtodo crea un objeto Exception y se lo pasa al sistema de ejecucin. El objeto Exception contiene informacin acerca de la excepcin, incluyendo su tipo y el estado del programa cuando ocurri el error. El sistema de ejecucin es el responsable de encontrar algn cdigo para manejar el error. En la terminologa Java, crear un objeto Exception y pasarlo al sistema de ejecucin es llamado lanzar una exception. Despus de que un mtodo lanza una excepcin, el sistema de ejecucin se encarga de buscar un objeto apropiado capaz de manejar la excepcin. Se dice que objeto seleccionado que tratar la excepcin cacha la excepcin. Manejo de excepciones La forma general de contruir un controlador o manejador de excepciones es la siguiente:

try{ /* sentencias normales del programa */ } catch(TipoExcepcion1 nombreVar){ /* sentencias que tratan la excepcion */ } catch(TipoExcepcion2 nombreVar){ /* otras sentencias para otra clase de excepciones */ } ..... finally{ /* sentencias de finalizacin */ }

try El primer paso en la construccin de un manejador de excepciones es encerrar las sentencias que pueden lanzar una excepcin dentro del bloque try. Una sentencia try debe de ser acompaada de por lo menos una sentencia catch o finallly.

catch Los manejadores de excepciones se asocian con una sentencia try al proporcionar uno ms bloques catch despus del bloque try. La sentencia catch requiere slo de un argumento, similar a la declaracin de un mtodo. El tipo del argumento declara el tipo de excepcin que el manejador puede tratar y debe ser el nombre de una clase que herede de la clase Throwable definida en el paquete java.lang . nombreVar es el nombre por el cual el manejador puede referirse a la excepcin que ha sido cachada. El bloque catch contiene una serie de sentencias que son ejecutadas cuando el manejador es invocado, es decir, cuando es cachada una excepcin.

finally Cuando se requiera de ejecutar algunas sentencias independientemente de si se lanz o no alguna excepcin, dichas sentencias se escriben dentro del bloque finally. Por lo general este tipo de sentencias son tiles para liberar algn recurso, para cerrar algn archivo, para cerrar una conexin a una base de datos, o algo por el estilo.

También podría gustarte