Unidad III Programacion Orientada a objetos con JAVA Parte II Ing. José Luis Llamas Cárdenas Unidad III Métodos Constructores Se ejecutan al crearse el objeto en memoria Se llaman igual que la clase No retornan ningún valor y tampoco se les indica Pueden estar sobrecargados Métodos Finalizadores Unidad III Los finalizadores son métodos que vienen a completar la labor del garbage collector. Un finalizador es un método que se llama automáticamente cuando se va a destruir un objeto. Se utilizan para ciertas operaciones de terminación distintas de liberar memoria Un finalizador es un método de objeto (no static), sin valor de retorno, sin argumentos y que siempre se llama finalize(). Los finalizadores se llaman de modo automático Unidad III Sobrecarga de métodos Los métodos pueden estar sobrecargados, esto significa la capacidad de tener mas de un método con el mismo nombre pero con diferente número y tipo de argumentos o de valores de retorno. Ejercicios 3.2 Unidad III Construir un constructor para la clase Persona que inicialice el nombre y la edad. Construir una clase Circulo con un atributo, radio y dos metodos constructores uno que reciba el radio y otro que no reciba radio y le asigne un random. 4 Herencia Unidad III La herencia permite que se pueden definir nuevas clases basadas en clases existentes, lo cual facilita re-utilizar código previamente desarrollado. Si una clase deriva de otra (extends) hereda todas sus variables y métodos. La clase derivada puede añadir nuevas variables y métodos y/o redefinir las variables y métodos heredados Unidad III Herencia Redefinición de Métodos Unidad III Una clase puede redefinir (volver a definir) cualquiera de los métodos heredados de su super-clase que no sean final o static. El nuevo método sustituye al heredado para todos los efectos en la clase que lo ha redefinido. Los métodos redefinidos pueden ampliar los derechos de acceso de la super-clase (por ejemplo ser public, en vez de protected o private), pero nunca restringirlos. Unidad III Clases y Métodos Abstractos Una clase abstracta (abstract) es una clase de la que no se pueden crear objetos. Su utilidad es permitir que otras clases deriven de ella, proporcionándoles un marco o modelo que deben seguir y algunos métodos de utilidad general. Las clases abstractas se declaran anteponiéndoles la palabra abstract, como por ejemplo, public abstract class Geometria { ... } Una clase abstract puede tener métodos declarados como abstract, en cuyo caso no se da definición del método. Ejercicio 12 Unidad III Crear la clase taxista derivada de la clase persona. Persona Taxista No.Licencia AsignarLicencia(); LeerLicencia(); Concepto de Interface Unidad III Una interface es un conjunto de declaraciones de funciones. Si una clase implementa (implements) una interface, debe implementar todas las funciones especificadas por la interface. Una clase puede implementar más de una interface, representando una forma alternativa de la herencia múltiple. Clases y Métodos Finales Unidad III las variables declaradas como final no pueden cambiar su valor una vez que han sido inicializadas. Una clase declarada final no puede tener clases derivadas. Esto se puede hacer por motivos de seguridad y también por motivos de eficiencia, porque cuando el compilador sabe que los métodos no van a ser redefinidos puede hacer optimizaciones adicionales. Análogamente, un método declarado como final no puede ser redefinido por una clase que derive de su propia clase. Interfaces Unidad III Una interface es un conjunto de declaraciones de métodos (sin definición). También puede definir constantes, que son implícitamente public, static y final, y deben siempre inicializarse en la declaración. Todas las clases que implementan una determinada interface están obligadas a proporcionar una definición de los métodos de la interface, y en ese sentido adquieren una conducta o modo de funcionamiento. Interfaces Unidad III Una clase puede implementar una o varias interfaces. Para indicar que una clase implementa una o más interfaces se ponen los nombres de las interfaces, separados por comas, detrás de la palabra implements, que a su vez va siempre a la derecha del nombre de la clase o del nombre de la superclase en el caso de herencia. Por ejemplo, public class CirculoGrafico extends Circulo implements Dibujable, Cloneable { ... } Definición de Interfaces Unidad III Una interface se define de un modo muy similar a las clases. A modo de ejemplo se reproduce aquí la definición de la interface Dibujable: // archivo Dibujable.java import java.awt.Graphics; public interface Dibujable { public void setPosicion(double x, double y); public void dibujar(Graphics dw); } Jerarquía e Interfaces Unidad III Clase Padre Clase Hija Clase Padre Clase Hija Clase Padre Clase Hija Herencia permitida por java Herencia no válida en Java Clase Padre Interface Clase Hija Uso de Interfaces Ejemplo Unidad III Clase Object Clase CCuenta Clase CCuentaAhorro Clase CCuentaCorriente Clase CCuentaCorrienteConIn Clase CBanco Interfase IFecha Ejercicio 13 Unidad III Crear una interfaz, llamada Cantante para hacer cantar a los objetos de la clase persona Crear El archivo Interfaz.java para hacer cantar un objeto persona Polimorfismo Unidad III El polimorfismo tiene que ver con la relación que se establece entre la llamada a un método y el código que efectivamente se asocia con dicha llamada. Con funciones normales o sobrecargadas se utiliza vinculación temprana Con funciones redefinidas en Java se utiliza siempre vinculación tardía, excepto si el método es final. La vinculación tardía hace posible que, con un método declarado en una clase base (o en una interface) y redefinido en las clases derivadas (o en clases que implementan esa interface), Excepciones Unidad III Una Excepción es un cierto tipo de error o una condición anormal que se ha producido durante la ejecución de un programa. Algunas excepciones son fatales y provocan que se deba finalizar la ejecución del programa. En este caso conviene terminar ordenadamente y dar un mensaje explicando el tipo de error que se ha producido. Excepciones Unidad III class Principal { public static void main( String[] a ) { int i=0, j=0, k; k = i/j; } } // Origina un error de division-by-zero Unidad III Excepciones class Exep01 { public static void main(String[] Args) { String holas[] = {"Hola", "Hola", "Hola", "Hola", "Hola"}; try { for(int i = 0; i < 6; i++) System.out.println(holas[i]+" "+(i+1)); } catch(ArrayIndexOutOfBoundsException e) { System.err.println("Arreglo Desordado"); } catch(Exception e2) { System.err.println("Ocurrio otro error"); } finally { System.out.println("Siempre sale esto"); } } } Unidad III Excepciones Predefinidas Lanzar una Excepción Unidad III Se crea un objeto Exception de la clase adecuada. Se lanza la excepción con la sentencia throw seguida del objeto Exception creado. Unidad III Creación de Excepciones class ServerTimeOutException extends Exception {} public void conectame( String nombreServidor ) throws Exception { int exito; int puerto = 80; exito = open( nombreServidor,puerto ); if( exito == -1 ) throw ServerTimeOutException; }