7. Interfaces Herencia múltiple Interfaces Comparable y Comparator

Slides:



Advertisements
Presentaciones similares
Java nos ofrece System.out para escribir en pantalla, pero también tenemos System.in para leer. System.in es un objeto de una clase de java que se llama.
Advertisements

Curso de java básico (scjp)
Curso de java básico (scjp)
Archivos Binarios Usando Serializable. Introducción Utilizar archivos binarios nos ayuda a guardar y leer más fácilmente los datos de archivos. Pero como.
EXCEPCIONES UNIDAD 5.
Programación Interactiva Fundamentos de Java. 2 Ejecución de un programa Para Java una clase ejecutable es aquella que es pública y tiene un método main()
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Orientación a Objetos con Java SE
Algoritmos y Estructura de Datos
Genéricos en Java Jaime Ramírez, Ángel Lucas González
RMI (Remote Method Invocation)
Rosalía Laza Fidalgo Reyes Pavón Rial Curso
Programación Orientada a Objetos en Java
Marzo 2007 Lenguajes Visuales Clase III.
Archivos Contenido: Archivos de Texto Archivos de Acceso Aleatorio
HERENCIA.
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Herencia e Interfaces.
Medio de tele-comunicación
Modificadores.
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Lic. Rosemary Torrico Bascopé
INSTITUTO TECNOLOGICO DE TEHUACAN Ingeniería en sistemas computacionales Curso de apoyo a la titulación EXCEPCIONES EN JAVA Diciembre de 2008.
Práctica III: Java RMI con Serialización y Activation Framework
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA CINCO CONSOLE.
Creación de Aplicaciones
Tema 6: Clases Antonio J. Sierra.
Tema 10: Interfaces Antonio J. Sierra.
Técnicas avanzadas de programación Interfaces
Colecciones.
Igor Santos Grueiro. Ahora tenemos datos y datos …
1 Streams en Java Agustín J. González ELO Generalidades Un Stream es simplemente una fuente o destino de bytes. Los streams más comunes son los.
1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.
SCJP Sun Certified Programmer for Java 6
Patrones de Comportamiento: Patrón de Diseño Observer
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
Clase Teórica No. 4 Programación IV
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
Patrón Observador Un patrón de diseño es una descripción de clases y objetos comunicándose entre si adaptada para resolver un problema de diseño general.
Jerarquía de Clases: Herencia, Composición y Polimorfismo
El lenguaje de programación Java
1 Persistencia en Java Agustín J. González ELO-329.
Tema 11: Excepciones Antonio J. Sierra.
Patrones Creacionales
Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … -
Programación Orientada a Objetos
Streams. / En casi todo programa se necesita traer o enviar información a una fuente externa. / Dicha información puede estar en un archivo en el disco.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Interfaces. Introducción La unidad fundamental en el lenguaje de programación Java es la clase, pero la unidad fundamental del diseño orientado a objetos.
FACULTAD DE ESTUDIOS SUPERIORES ARAGON
PAQUETES Un paquete es un conjunto de clases, interfaces y subpaquetes relacionados. El paquete define un ámbito de visibilidad: los miembros que no tienen.
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Detalles Generales sobre Java
Interfaces y Clases Internas
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
HERENCIA.
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2009.
Clases “ Es una Abstracción de un elemento del mundo real ”
Herencias Conceptos básicos i
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
Diseño de tipos Igualdad, representación, código, copia y relación de orden Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Concepto de Tipo y Subtipo Diseño e Implementación Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 10 Versión.
Tema 1: Concurrencia con Java
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Transcripción de la presentación:

7. Interfaces Herencia múltiple Interfaces Comparable y Comparator Patrón Observer: clase Observable interfaz Observer Interfaces de marca: Cloneable Serializable (persistencia)

Interfaces Declaración: Permite SIMULAR la herencia múltiple. La definición de un interfaz no tiene constructor, por lo que no es posible invocar el operador new sobre un tipo interfaz. Declaración: Interface es el modo de declarar un tipo formado sólo por métodos abstractos (abstract) y constantes (final), ambos public, permitiendo que se escriba cualquier implementación para estos métodos. Aunque un interfaz puede extender múltiples interfaces, no puede extender clases. [public] interface MiInterfaz [ extends otraI1,otraI2,... ] { double PI = 3.14159; void met1(); //public abstract ... }

El lenguaje de programación Java Interfaces Implementación: Un interfaz se utiliza definiendo una clase que implemente el interfaz a través de su nombre La clase debe proporcionar la definición completa de todos los métodos declarados en el interfaz y, también, la de todos los métodos declarados en todos los superinterfaces de ese interfaz. Una clase puede implementar más de un interfaz, incluyendo varios nombre de interfaces separados por comas. En este caso, la clase debe proporcionar la definición completa de todos los métodos declarados en todos los interfaces de la lista y de todos los superinterfaces de esos interfaces. Class MiClase extends OtraClase implements UnInterfaz, OtroInterfaz { ... } El lenguaje de programación Java

El lenguaje de programación Java Colisión de nombres public interface Interfaz1 { int CTE = 1; void met(); } public interface Interfaz2 { int CTE = 789; public class Clase implements Interfaz1, Interfaz2{ public void met(){ //única semántica del método System.out.println(“Única implementación de met"); System.out.println(“El valor de la cte es” + Interfaz1.CTE); El lenguaje de programación Java

El lenguaje de programación Java Interfaces UnInterfaz OtraClase supertipos OtraClase oc; UnInterfaz ui; MiClase mc = new MiClase(); oc = mc; ui = mc; MiClase Una interfaz puede utilizarse como nombre de tipo. mc incluye todos sus supertipos (clases e interfaces). A ui se le puede asignar cualquier objeto que implemente la interfaz. El lenguaje de programación Java

Clase abstracta vs interfaces Dos DIFERENCIAS importantes: Una clase abstracta puede estar parcialmente implementada, partes protected y/o static. Una interfaz está limitada a métodos públicos y abstractos. La s interfaces proporcionan una forma de herencia múltiple. Una clase puede heredar de una única clase, incluso si sólo tiene métodos abstractos. Recomendaciones: clase parcialmente diferida  clases abstractas clase sin ninguna implementación  Interfaz Hay cierta SIMILITUD entre ambas. El propósito de los interfaces es proporcionar nombres, es decir, solamente declara lo que necesita implementar el interfaz, pero no cómo se ha de realizar esa implementación; es una forma de encapsulación de los protocolos de los métodos sin forzar al usuario a utilizar la herencia.

El lenguaje de programación Java Clase Arrays static void sort (Object [] a) Aunque el parámetro es un array de Object presupone que es un array de objetos comparables (Comparable[]) static void sort (Object [] a, Comparator c) static boolean equals (Object [] a, Object [] a2) static int binarySearch(Object [] a, Object key) static int binarySearch(Object [] a, Object key, Comparator c) El lenguaje de programación Java

Interfaces Comparable y Comparator La interfaz java.lang.Comparable puede ser implementada por cualquier clase cuyos objetos puedan ser ordenados. Tiene un único método que devuelve un valor menor, igual o mayor que cero si el objeto actual es menor, igual o mayor que el objeto que se le pasa como parámetro. public interface Comparable{ int compareTo(Object o); } Para las colecciones ordenadas es posible especificar el orden (distinto al orden natural definido por el método compareTo) que se establece mediante el interfaz java.util.Comparator. public interface Comparator{ int compare(Object o1, Object o2);

El lenguaje de programación Java Ejemplo Comparable Compara los empleados de una empresa por antigüedad public class Empleado implements Comparable{ … public int compareTo (Object otro){ int otroAnyo = (Empleado)otro.anyoContrato; if (anyoContrato == otroAnyo) return 0; else if (anyoContrato < otroAnyo) return -1; else return 1; } Ordenamos los empleados por antigüedad: Empleado[] plantilla; Arrays.sort(plantilla); El lenguaje de programación Java

El lenguaje de programación Java Ejemplo Comparator El criterio para ordenar los empleados atendiendo al orden alfabético de sus nombres: public class ComparadorAlfabetico implements Comparator{ public int compare(Object o1, Object o2){ Empleado e1 = (Empleado)o1; Empleado e2 = (Empleado)o2; return e1.getNombre().compareTo(e2.getNombre()); } Ordenamos los empleados por orden alfabético (criterio distinto al “natural”) Empleado[] plantilla; … Arrays.sort(plantilla, new ComparadorAlfabetico()); El lenguaje de programación Java

El lenguaje de programación Java Patrón Observer observers java.util.Observer update(Observable obj, Object arg) java.util.Observable addObserver(Observer o) deleteObserver(Observer o) notifyObservers (Object arg) For each obj in observers do obj.update (this,arg); ConcreteObserver update+ aQuienMiro ConcreteObservable El lenguaje de programación Java

El lenguaje de programación Java Patrón Observer Java.util.Observable addObserver(Observer o) deleteObserver(Observer o) notifyObservers (Object arg) observers Java.util.Observer update(Observable obj, Object arg) … observer.update jefe Jefe update+(…) Empleado descansar() … notifyObservers El lenguaje de programación Java

Ejemplo: Observable y Observer public class Empleado extends Observable{ public void descansar(){ if (hora!=desayuno) { setChanged(); notifyObservers(“ocioso”); } ... public class Jefe implements Observer{ public void supervisar(Empleado e){ e.addObserver(this); public void update (Observable e, Object estado){ if ((String)estado.equals(“ocioso”)) (Empleado)e.darToqueAtencion(); El lenguaje de programación Java

Clonación de objetos: Object.clone Devuelve un nuevo objeto cuyo estado inicial es una copia del estado actual del objeto sobre el que se invoca a clone Factores a tener en cuenta: La clase que proporciona el método clone debe implementar el interfaz Cloneable Definir el método clone como public (en la clase Object es protected, por lo que no se puede hacer el clone de un Object) Puede ser necesario cambiar la implementación por defecto del método para hacer un clone en profundidad Se puede utilizar la excepción CloneNotSupportedException para indicar que no se debería haber llamado al método clone. El lenguaje de programación Java

Clonación de objetos buffer tope 2 2 9 7 3 2 buffer tope objPila1 public class Pila implements Cloneable { public Object clone() throws CloneNotSupportedException{ return super.clone(); } ... La implementación por defecto hace un clone superficial: objPila2=(Pila)objPila1.clone(); buffer tope 2 2 9 7 3 2 buffer tope objPila1 objPila2 El lenguaje de programación Java

El lenguaje de programación Java Clone en profundidad Redefinir clone para que haga una copia en profundidad public class Pila implements Cloneable{ ... public Object clone() throws CloneNotSupportedException { Pila nuevaPila = (Pila)super.clone(); nuevaPila.buffer = (int[])buffer.clone(); return nuevaPila; } buffer tope 2 2 9 7 3 2 9 7 3 2 buffer tope objPila1 objPila2 El lenguaje de programación Java

Interfaz Serializable (java.io) Convierte un objeto que implemente el interfaz Serializable en una secuencia de bytes que puede restablecerse completamente en el objeto original INDEPENDIENTEMENTE de la plataforma donde se haya creado. Útil para implementar “persistencia” de objetos. El interfaz no tiene métodos sirve sólo para identificar la semántica de que es serializable. Cualquier subclase de una clase serializable también lo es. Este proceso no solo salva una imagen del objeto sino que también, de manera recursiva, guarda todas las referencias que contiene dicho objeto. Si estas serializando en el mismo Stream se recuperará la misma estructura de objetos sin duplicados. El lenguaje de programación Java

Efecto de la serialización obj1 obj2 SI guardamos en streams diferentes: stream1.writeObject(obj1); stream2.writeObject(obj2); obj1 SE DUPLICA obj2 El lenguaje de programación Java

Efecto de la serialización obj1 obj2 SI guardamos en el mismo stream: stream1.writeObject(obj1); stream1.writeObject(obj2); obj1 Se mantienen las ref. compartidas obj2 El lenguaje de programación Java

Interfaz Serializable Para serializar un objeto: Crear algún objeto de clase OutputStream y encapsularlo en un objeto ObjectOutputStream invocando a writeObject()el objeto se serializa y se envía al OutputStream Si la clase no implementa la interfaz Serializable se lanza la excepción NotSerializableException. Marcar con transient los atributos que no se serializan. Para des-serializar un objeto: Encapsula un objeto InputStream y encapsularlo en un objeto ObjectInputStream invocando a readObject()el objeto se des-serializa y se devuelve una referencia al objeto recuperado downcast para convertir el Object a la clase adecuada El lenguaje de programación Java

Ejemplo Serializable (guardar) import modelo.*; import java.io.*; public class TestSerializable { public static void main(String[] args) { Empleado[] plantilla = new Empleado[10]; Secretaria secre = new Secretaria("Ana"); plantilla[0] = secre; plantilla[1] = new Jefe("kike", secre); plantilla[2] = new Jefe("Pedro", secre); try{ ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("empleados.ser")); out.writeObject(plantilla); out.close(); }catch (Exception e){ e.printStackTrace(); } El lenguaje de programación Java

Referencias compartidas y serialización plantilla “Kike” “Ana” objSecretaria “Pedro” objJefe1 objJefe2 out.writeObject(plantilla) para conservar las referencias compartidas El lenguaje de programación Java

Ejemplo Serializable (recuperar) try{ ObjectInputStream in = new ObjectInputStream(new FileInputStream("empleados.ser")); Empleado [] plantilla2; plantilla2= (Empleado[]) in.readObject(); }catch (Exception e){ e.printStackTrace(); } }//FIN MAIN }//FIN TestSerializable La clase Empleado implementa Serializable. Todos los empleados se guardan en el mismo Stream para no duplicar el objeto Secretaria. El lenguaje de programación Java

Guardar variables de clase Las clases que necesiten un tratamiento especial durante la serialización y des-serialización deben implementar métodos especiales con la signatura: private void writeObject(java.io.ObjectOutputStream out) throws IOException {} private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {} El lenguaje de programación Java

Ejemplo guardar variables static En la clase Jugador: private void writeObject(ObjectOutputStream out) throws IOException{ out.defaultWriteObject(); out.writeInt(nextNumero); } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{ in.defaultReadObject(); nextNumero = in.readInt(); El lenguaje de programación Java