Java: Clases Abstractas e Interfaces

Documentos relacionados
Java: Clases Abstractas e Interfaces

Clases y herencia. FJP Unidad 8. Diseño de clases

o Los arreglos son colecciones ordenadas de datos del mismo tipo. o Ejemplos: 2

POO en Java IV: Herencia (Parte 1)

CONCEPTO DE INTERFACE Y HERENCIA MÚLTIPLE EN JAVA. IMPLEMENTS. EJEMPLOS Y DIAGRAMAS DE CLASES. (CU00696B)

18. Interfaces Declaración de una interfaz

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.

Programación orientada a objetos

Recursividad. Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile

Herencia y Polimorfismo

o Una clase es un tipo al cual pertenecen objetos o instancias de la clase.

Relaciones entre clases

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

Derechos de Acceso: COMPOSICION

Definición. Mónica E. García García Feb 07

Interfaces. Amparo López Gaona. Septiembre de Amparo López Gaona () Interfaces Septiembre de / 1

// Método Comunicarse, sera implementado por las clases concretas que hereden de la clase //animal

Polimorfismo Java y Servicios Web I Master en Ingeniería Matemática

Tema 10: Interfaces. Índice

Introducción a OOP. Programación Orientada a Objeto

Tema 1. Herencia y Polimorfismo

Guía práctica de estudio 08: Polimorfismo

Examen Teórico Convocatoria de Junio de 2012

Bases de Datos: Introducción

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Clases Abstractas e Interfaces

Conceptos Básicos. Programación Orientada a Objetos 2

PARA QUÉ SIRVEN LAS INTERFACES JAVA. IMPLEMENTAR UNA INTERFAZ DEL API. VENTAJAS. EJEMPLOS BÁSICOS. (CU00697B)

Java Avanzado Facultad de Ingeniería. Escuela de computación.

Arquitecturas cliente/servidor

Programación Dirigida a Objetos. MATERIAL COMPLEMENTARIO Tema 5.- Herencia

Taller de Programación I. Tema 10: Herencia en Java

A3F. Polimorfismo. Carlos Fontela

Java Básico. Polimorfismo. Copyright

Diagramas de clases de UML

Patrones de Diseño. Ing. Miguel Angel Cedeño Garcidueñas

Tema 6 Patrones de Diseño. Programación Orientada a Objetos Curso 2010/2011

1. Qué tipos de relación hay entre las siguientes clases?

Estructuras de control selectivas

Interfaces y Clases Internas. ELO329: Diseño y Programación Orientados a Objetos

Por ejemplo, considerando la jerarquía de herencia de Figuras Geométricas de la siguiente figura, es posible hacer uso del concepto de polimorfismo.

Java: control de excepciones

Excepciones. Excepciones

Tema: Funciones Virtuales y Polimorfismo.

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFAZ CLONEABLE DE JAVA. MÉTODO CLONE() PARA CLONAR OBJETOS. (CU00912C)

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

Ejercicios de Lenguaje Java y Entorno de Desarrollo

Herencia y Clases Abstractas

Construcciones del Lenguaje Java

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Estructuras de Datos Clase 1 - Introducción

Curso de Java POO: Programación orientada a objetos

Concurso: Cuánto sabes de JAVA?

Tema: Funciones Virtuales y Polimorfismo.

Tema: Funciones Virtuales y Polimorfismo.

Modelado Estructural F E B R E R O,

Herencia en Java. Agustín J. González Diseño y Programación Orientados a Objetos

Objetivos. El alumno empleará el concepto de excepción en la programación orientada a objetos para el manejo de errores de ejecución.

Programación Orientada a Objetos con Java. Elementos Básicos del Lenguaje Java. Relación entre clases. Ejemplo de Clase: Punto !

3.4 Clases y Objetos 05/04/2004. Conceptos Generales. Modificadores de la Clase. Estructura de una Clase. Variables Miembros

Programación Orientada a Objetos (Grado en Ingeniería Informática y Grado en Ingeniería en Tecnologías de la Información - UNED)

Intefaces gráficas. Eventos. Jose Jesus García Rueda

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Curso de Java POO: Programación orientada a objetos

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.

Programación II JAVA Dr. Mario Rossainz López

Modulo 11. Clases y Objetos en Java

Unidad Didáctica 1. Introducción a la Programación Orientada a Objetos (POO) Conceptos de clase, objeto e interfaz. Atributos y métodos

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Introducción al Paradigma Orientado a Objetos

PROYECTO FIGURAS DIAGRAMA DE FLUJO

12/08/2017. Diagrama de clases y objetos. Modelo de clases y objetos. Diagrama de clases y objetos. Diagrama de clases y objetos

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

EXAMEN PROGRAMACIÓN 21 de Septiembre de 2007 INGENIERÍA INFORMÁTICA Primera parte: Cuestiones 1,5 horas

12. Tipos de atributos

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Edwin Andrés Cubillos Vega

Examen de Prácticas de Programación Ingeniería Informática

Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura).

Tema: Herencia en C#.

RMI. Aplicaciones Distribuidas

PROGRAMACION ORIENTADA A OBJETOS EN C++

POLIMORFISMO "una interfaz, múltiples métodos".

Soluciones Ejercicios Tema 3

Unidad II Tema 3: Tratamiento de arreglos y cadenas en Java

Soluciones Ejercicios Tema 1

PROGRAMACIÓN EN JAVA

INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C)

Transcripción:

Java: Clases Abstractas e Interfaces Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile fguidi@ucv.cl

Clases abstractas e interfaces v A nivel conceptual, las clases abstractas e interfaces permiten definir qué puede hacer un conjunto o familia de clases relacionadas. v Ejemplo en el contexto de la universidad: Persona Las personas (esto es, alumnos, profesores y administrativos ) conocen y retornan su RUT, nombre, teléfono y dirección Alumno Profesor Administrativo 2

Clases Abstractas Pablo Picasso, Toro (11) v Una subclase de una clase abstracta puede ser instanciada (es decir, puede ser no abstracta ) sólo si provee implementación para todos los métodos abstractos de la superclase. En caso contrario, debe también ser declarada abstracta. v Una clase es declarada abstracta cuando no es posible crear instancias de ella. v Una clase debe ser declarada abstracta si posee al menos un método declarado abstracto. v Un método abstracto es aquél que no provee implementación. 3

Ejemplo de Clase Abstracta public abstract class Poligono { int lados; public int setlados(int l){ lados = l; public abstract double getarea();... Clase abstracta Polígono public class Cuadrado extends Poligono { int longitud; public double getarea(){ return longitud*longitud;... Clase concreta que extiende la clase abstracta. 4

Interfaces v En ocasiones, en vez de implementar herencia, es posible implementar interfaces. v Una interfaz define un tipo de dato. Esta definición especifica el identificador de un tipo y declara los métodos que el tipo provee (sin implementación). v Las interfaces son frecuentemente descritas como contratos: una interfaz garantiza que una clase proveerá cierta funcionalidad, pero sin especificar cómo esta funcionalidad será implementada. v La implementación de interfaces se conoce también como herencia por contrato o herencia de interfaces. En estos casos sólo se hereda la interfaz, no hay herencia de funcionalidad. 5

Interfaces en Java v Contenido de una interfaz: Nombre y visibilidad Eventuales otras interfaces extendidas Declaraciones de métodos Constantes (declaradas como static final) v Una interfaz no provee: Variables de instancia o de clase Implementación para los métodos v Útiles cuando una clase debe usar objetos de distintas clases, pero que operan de la misma forma (ej. un temporizador para videograbador, radio, etc.) 6

Analogía Destornillador Clase que debe usar ciertos objetos Modelos de cabezas De tornillos Interfaces Tornillos Clases que implementan alguna de las interfaces 7

Ejemplo de Interfaz public interface Despertable { public static final int DORMIDO = 1; public static final int DESPIERTO = 2; public void despierta(); La interfaz Despertable public class Persona implements Despertable{ int estado = DESPIERTO; public void dormir() { estado = Despertable.DORMIDO; public void despierta(){ estado = DESPIERTO;... Una clase que implementa la interfaz Despertable 8

Ejemplo de Interfaz (cont.) public class Alarma {... public static void despertar(despertable d){ d.despierta(); public class Ejemplo { public static void main(string[] arg){ Persona p1 = new Persona(); Alarma.despertar(p1); Despertable p2 = new Persona(); Alarma.despertar(p2); La Alarma es capaz de despertar cualquier objeto que implemente la interfaz Despertable. 9

Uso de Interfaces v Una clase puede implementar múltiples interfaces: public class Anfibio implements Terrestre, Acuático {... v Una interfaz puede extender otras interfaces. public interface Anfibio extends Terrestre, Acuático {... v Algunos enuncian que el uso de interfaces representa una forma de enfrentar el problema de la herencia múltiple en Java. 10

Interfaces y excepciones v Las excepiones declaradas en los métodos de una interfaz (cláusula throws) también deben ser declaradas en los métodos de las clases que implementan la interfaz. 11

Interfaces y clases abstractas: aspectos comunes v Tanto clases abstractas como interfaces necesitan implementación en otras clases, para sus propiedades abstractas: Clases abstractas: requieren subclase(s). Interfaces: requieren clase(s) que implemente(n) la interfaz. 12

Ejemplo v El Aerosub ( Viaje al fondo del mar ) public interface Aéreo { public void despegar(); public void acuatizar(); public interface Acuático { public void emerger(); public void sumergirse(); public class Aerosub implements Aéreo, Acuático{ public void despegar(){ public void acuatizar(){ public void emerger(){ public void sumergirse(){ 13

Ejemplo (cont.) v Clase que accede a las funciones del Aerosub: public class Comandante { public Aerosub vehículo; public Comandante(Aerosub v){ vehículo = v; public void comandar(){ vehículo.emerger(); vehículo.despegar(); vehículo.acuatizar(); vehículo.sumergirse(); 14

Ejemplo (cont.) v Clases que acceden al Aerosub con funcionalidades limitadas: public class Aviador { public Aéreo vehículo; public Aviador(Aéreo v){ vehículo = v; public void pilotear(){ vehículo.despegar(); vehículo.acuatizar(); public class Marino { public Acuático vehículo; public Marino(Acuático v){ vehículo = v; public void navegar(){ vehículo.sumergirse(); vehículo.emerger(); 15

Atención en el uso de la herencia e implementación de Interfaces v Deben considerarse relaciones con valor semántico en el dominio del problema. Ejemplos como este pueden no tener sentido: public class ReyDeLaSelva implements Elefante, Pistola A menos que 16

Ejercicio 1 v Una empresa desarrolladora de software de monitoreo debe crear aplicaciones capaces de obtener datos desde distintos tipos de sensores (de contaminación por partículas, ruido, voltaje, etc.) y mostrar dichos valores por pantalla. Cada aplicación se desarrolla para trabajar con un tipo de sensor. Los sensores son manejados por clases específicas (e.g. TemperatureSensor, DustSensor, etc.) y proveen tres métodos: (1) un método para activarlo; (2) un método que retorna un double correspondiente al valor percibido por el sensor en el momento; y (3) un método para desactivarlo. Los siguientes son ejemplos de aplicaciones desarrolladas por esta empresa: Para manejar un sensor de Temperatura public class Muestra { public static void main( String[] arg ){ TempSensor t = new TempSensor(); t.activa(); for(int i=0; i<10000; i++ ) System.out.println( t.leetemp() ); t.desactiva(); 17

Ejercicio 1 (cont.) Para manejar un sensor de polvo ambiental public class Muestra { public static void main( String[] arg ){ DustSensor t = new DustSensor(); t.on(); for(int i=0; i<10000; i++ ) System.out.println( t.readmeasure() ); t.off(); A pesar de lo similar de las aplicaciones, en cada ocasión es necesario reescribir no sólo la clase de sensor que se utilizará, sino también las invocaciones correspondientes a sus métodos específicos, lo cual hace el desarrollo ineficiente. Se pide determinar una arquitectura que permita a la empresa simplificar su trabajo de desarrollo. 18

Ejercicio 2 v Diseñe y programe las clases e interfaces que permiten resolver el siguiente problema: Se desea construir una clase que permita mantener una colección de objetos ordenados ascendentemente. Los objetos a ordenar pueden ser de cualquier clase. Los objetos deberán implementar un método que permita determinar si un objeto es mayor que otro. 19

Situación 1: La necesidad de clases abstractas e interfaces v Contexto: se está desarrollando una aplicación que trabaja con CD s, DVD s y discos de vinilo. v Problema: se establece que a pesar de tener sus propios atributos, todos ellos disponen de código, sello discográfico y autor. Se desea evitar duplicidad de código. v Decisión: se determina la conveniencia de crear la clase ProductoMusical, que agrupa las propiedades comunes de los tres tipos de productos. La clase ProductoMusical no es instanciable, por lo tanto se lo declara abstracto. CD ProductoMusical {abstract código sello autor DVD Vinilo La superclase aparece por factorización de propiedades comunes 20

Situación 2: La necesidad de clases abstractas e interfaces (cont.) La superclase o interfaz es impuesta a las subclases. v Contexto: se está desarrollando una clase Timer para programar distintos objetos temporizables (ej. relojes, grabadoras, alarmas, etc.) Timer v Problema: Los objetos temporizables pueden ser distintos, y al momento de desarrollar el Timer no se sabe exactamente de qué clase son. Temporizable {abstract v Decisión: se define una interfaz (o una clase abstracta, si hay código en común) que implementarán todos los objetos temporizables. El Timer accede a los objetos temporizables a través de esta interfaz. Reloj Grabadora 21

Discusión v Tanto clases abstractas como interfaces permiten describir propiedades comunes de familias de clases. Cuándo conviene utilizar unas u otras? 22

Caso de estudio: Mars Climate Orbiter v Mars Climate Orbiter (MCO) v Vehículo espacial de la NASA, enviado a Marte para recolectar información v Se perdió el 23 de septiembre de 1999 durante la maniobra de inserción en la órbita de Marte. v Se sospecha que se estrelló en Marte o que ingresó a una trayectoria heliocéntrica. 23

Caso de estudio: Mars Climate Orbiter v Varias irregularidades en la trayectoria se detectaron durante la navegación de 9 meses desde la Tierra hacia Marte. v Durante el inicio del proceso de inserción en la órbita de Marte se observó que el MCO se encontraba 170 km bajo lo planeado v El ingreso a la zona de ocultamiento en la órbita de Marte ocurrió 49 segundos antes de lo previsto. No se reestableció comunicación tras los 21 minutos predichos como duración el ocultamiento. v El 25 de septiembre de 1999 cesaron los intentos por reestablecer comunicación con la nave. v El 29 de septiembre se descubrió que las variables denominadas small forces, utilizadas en los modelos de cálculo de la órbita de los sistemas de tierra, tenían un valor 4,45 veces más pequeño de lo debido. 24

Caso de estudio: Mars Climate Orbiter v Los valores eran más pequeños porque, de acuerdo con lo indicado en las especificaciones de la interfaz de software, el sistema de navegación en tierra consideraba datos de entrada expresados en Newton-seg (sistema Métrico), en cambio éstos eran equivocadamente proporcionados por otro módulo de software en libras_fuerza-seg (sistema Inglés). v Notar que: 1 libra fuerza = 4,45 Newton Gráfico: Mars Climate Orbiter Mishap Investigation Board. November 10, 1999, NASA. 25

Caso de estudio: Mars Climate Orbiter v Causas: Inadecuada visión sistémica sobre la completa misión. Falta de una adecuada comunicación entre equipos de desarrollo. Falta de una acuciosa verificación del software de navegación, y de los modelos computacionales relacionados. 26