Clases Abstractas e Interfaces

Documentos relacionados
Universidad de Cantabria

18. Interfaces Declaración de una interfaz

Programación orientada a objetos

Derechos de Acceso: COMPOSICION

A3F. Polimorfismo. Carlos Fontela

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

Java Básico. Polimorfismo. Copyright

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

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

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

Concurso: Cuánto sabes de JAVA?

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

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

Herencia y Polimorfismo

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

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

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 + +.

Curso de Java POO: Programación orientada a objetos

Estructuras de control selectivas

Herencia y Clases Abstractas

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

Tema 3: Genericidad en Java. Tema 3: Genericidad en Java. Objetivos y Bibliografía. Modelos de Datos Genéricos

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

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

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

Examen Teórico Convocatoria de Junio de 2012

Aplicaciones de Escritorio

Interfaces y Clases Internas

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

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

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

Herencia. Hay clases que comparten gran parte de sus características.

Curso de Java orientado a Android Parte 2

Conceptos más avanzados de Programación Orientada a Objetos

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

3.6 Interfaces y Paquetes

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

Fundamentos de Programación

PROGRAMACIÓN EN JAVA

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

Algoritmos y Estructuras de Datos: Ordenación y Colas con Prioridad. Guillermo Román Díez

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

Construcciones del Lenguaje Java

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

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

PROGRAMACIÓN GENÉRICA

INICIACIÓN A LA PROGRAMACIÓN LENGUAJE JAVA con BlueJ

Parte I: Programación en un lenguaje orientado a objetos

Clases y métodos parciales (Guía de programación de C#)

Programación orientada a objetos. Resumen de Temas Unidad 6: Polimorfismo y reutilización

Soluciones Ejercicios Tema 1

Patrones de Diseño. Patrón de comportamiento Iterator. Técnicas de Programación - Curso 2007/08

HOJA DE EJERCICIOS 3 HERENCIA ENTRE CLASES Y POLIMORFISMO DE MÉTODOS

16. Herencia Definición de herencia. 168 A. García-Beltrán y J.M. Arranz

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

Universidad de Cantabria

Introducción a la Programación Orientada a Objetos (POO)

Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez

Relaciones entre clases

Bloque II. Elementos del lenguaje de programación Java

Prueba N o 1. Programación II

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

12. Tipos de atributos

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Unidad Didáctica 19. Tratamientos Secuenciales Generalizados II. Versión 1.0.0

10 -Herencia Y Polimorfismo. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

INTRODUCCION A LA PROGRAMACION EN JAVA

Diseño Basado en Componentes. Curso 2008 / 09

IMPORTAR Y USAR CLASES DEL API DE JAVA. EJEMPLO CLASE MATH Y MÉTODO POW. CONSTRUCTORES PRIVADOS. (CU00647B)

Programación Orientada a Objetos Clases, métodos, atributos. Concepto de herencia, clases derivadas, tipos de herencia.

o Una clase en Java se compone de: o A los anteriores se les conoce también como miembros de la clase.

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

Prácticas POO Curso 10/11

Contenido. 1 Qué es un diagrama de clase? 2 Elementos de un diagrama de clase. 3 Clase, atributo, método y visibilidad. 4 Agregación y composición

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

Los Constructores(1)

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Práctica 5. Fecha límite de entrega: viernes, 14 de diciembre

La Herencia: Teoría (1)

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

Ejercicio 1 (proyecto prlistas, paquete listas)

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

15. Parámetros o argumentos

Tema 1. Introducción a la Programación Orientada a Objetos

Ordenación de colecciones de objetos.

PATRONES DE DISEÑO DE CREACIÓN. Abstract Factory Builder Factory Method Prototype

Diseño y Programación Orientados a Objetos 29 de Abril de Primer Certamen

Edwin Andrés Cubillos Vega

PROGRAMACION ORIENTADA A OBJETOS EN C++

HERENCIA. Problema: Reparar el el coche. Jesús (Valencia) Luis, Mecánico (Valencia) Antonio, Servicio Técnico Ferrari (Madrid)

Memoria en C++ Punteros - Referencias Clases Y ahora, a trabajar! Memoria Dinámica en C++

UAA-DSE Programación 2 / C++ Eduardo Serna-Pérez

CLAVE EXAMEN: a cd. c u r s o r = c u r s o r. g e t S i g u i e n t e ( ) ; p o s i c i o n ++;

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 DELEGADOS. Ing. Bruno López Takeyas, M.C.

Packages, Classpath y

Tema: Herencia en C#.

CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE

PRÁCTICA No 4 POO Encapsulación. El alumno conocerá los principios de la encapsulación, y el uso de constructores para la inicialización de datos

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

Transcripción:

Clases Abstractas e Interfaces Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria corcuerp@unican.es

Objetivos Aprender a crear y utilizar clases y métodos abstractos Aprender a crear y utilizar interfaces Java 2

Índice Métodos y Clases Abstractos Qué una interface? Definiendo interfaces Implementando interfaces Constantes en interfaces Porqué usar interfaces? Interface vs. Clase Abstracta Interface como Tipo Herencia entre interfaces La interface Comparable Java 3

Métodos Abstractos Son métodos que no tienen implementación (body) Para crear un método abstracto sólo escribir la declaración del método sin el cuerpo y usar la palabra reservada abstract Sin { Ejemplo: // Notese que no hay cuerpo public abstract void algunmetodo(); Java 4

Clase Abstracta Una clase abstracta es una clase que contiene uno o más métodos abstractos Una clase abstracta no se puede instanciar // Da error de compilacion MiClaseAbst a1 = new MiClaseAbst(); Otra clase (clase concreta) tiene que proporcionar la implementación de los métodos abstractos La clase concreta tiene que implementar todos los métodos abstractos de la clase abstracta para que sea usada para instanciarla Las clases concretas usan la palabra reservada extends Java 5

Ejemplo de Clase Abstracta public abstract class LivingThing { public void breath(){ System.out.println("Living Thing breathing..."); public void eat(){ System.out.println("Living Thing eating..."); /** * Abstract method walk() * Queremos que este metodo sea implementado * por una clase concreta. */ public abstract void walk(); Java 6

Entendiendo una Clase Abstracta Cuando una clase concreta extiende la clase abstracta LivingThing, debe implementar el método abstracto walk(), o también, la subclase también se convierte en una clase abstracta y por eso no puede instanciarse Ejemplo public class Human extends LivingThing { public void walk(){ System.out.println("Human walks..."); Java 7

Cuándo usar métodos y clases abstractas Los métodos abstractos son normalmente declarados donde dos o más subclases se espera que cumplan un papel similar en diferentes modos a través de diferentes implementaciones (polimorfismo) Las subclases extienden la misma clase abstracta y proporcionan diferentes implementaciones para los método abstractos Usar clases abstractas para definir tipos amplios de comportamientos en la raíz de la jerarquía de clases y usar sus subclases para proporcionar los detalles de implementación de la clase abstracta Java 8

Qué una interface? Define una forma estándar y pública de especificar el comportamiento de clases (define un contrato) Todos lo métodos de una interface son métodos abstractos (firmas de métodos sin implementación) Una clase concreta debe implementar (implements) la interface, es decir, implementar todos los métodos Permite la implementación de clases con comportamientos comunes, sin importar su ubicación en la jerarquía de clases Java 9

Definiendo interfaces Sintaxis para definir una interface: public interface [NombreInterface] { // metodos sin cuerpo Ejemplo: interface que define relaciones entre dos objetos de acuerdo al orden natural de los objetos public interface Relation { public boolean isgreater(object a, Object b); public boolean isless(object a, Object b); public boolean isequal(object a, Object b); Java 10

Implementando interfaces Para crear una clase concreta que implementa una interface, se usa la palabra reservada implements /** * Clase Line implements Relation interface */ public class Line implements Relation { private double x1; private double x2; private double y1; private double y2; public Line(double x1, double x2, double y1, double y2){ this.x1 = x1; this.x2 = x2; this.y1 = y1; this.y2 = y2; Java 11

Implementando interfaces public double getlength(){ double length = Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)* (y2-y1)); return length; public boolean isgreater( Object a, Object b){ double alen = ((Line)a).getLength(); double blen = ((Line)b).getLength(); return (alen > blen); public boolean isless( Object a, Object b){ double alen = ((Line)a).getLength(); double blen = ((Line)b).getLength(); return (alen < blen); public boolean isequal( Object a, Object b){ double alen = ((Line)a).getLength(); double blen = ((Line)b).getLength(); return (alen == blen); Java 12

Diagrama de implementación de interface <<interface>> Relation La línea a trozos con una flecha se usa para indicar relaciones de implements Line Country Java 13

Constantes en interfaces Las interfaces no pueden tener variables de instancia, pero es legal especificar constantes Todas las variables en una interface son automáticamente public static final por lo que se puede omitir en la declaración public interface SwingConstants { int NORTH = 1; int NORTHEAST = 2; int EAST = 3;... Java 14

Errores implementando interfaces Cuando una clase implementa una interface siempre debe implementar todas los métodos de la interface En la implementación debe declararse todos los métodos public Java 15

Porqué usar interfaces? Para revelar la interface de la programación de un objeto (funcionalidad del objeto) sin revelar su implementación (encapsulado) La implementación puede cambiar sin afectar el llamador de la interface, que no necesita la implementación en tiempo de compilación Para tener implementación de métodos similares (comportamientos) en clases sin relacionar Para modelar herencia múltiple, imponiendo conjuntos múltiples de comportamientos a la clase Java 16

Interface vs. Clase Abstracta Todos los métodos de una interface son métodos abstractos mientras algunos métodos de una clase abstracta son métodos abstractos Los métodos abstractos de una clase abstracta tienen el modificador abstract Una interfaz puede definir constantes mientras que una clase abstracta puede tener campos Las interfaces no tienen ninguna relación de herencia directa con una clase particular, se definen independientemente Java 17

Interface como Tipo La definición de una interface implica una definición de un nuevo tipo de referencia y por ello se puede usar el nombre de la interface como nombre de tipo Si se define una variable cuyo tipo es una interface, se le puede asignar un objeto que es una instancia de una clase que implementa la interface Ejemplo: la clase Person implementa PersonInterface Person p1 = new Person(); PersonInterface pi1 = p1; PersonInterface pi2 = new Person(); Java 18

Interface y Clases: características comunes Interfaces y clases son tipos Significa que una interface se puede usar en lugares donde una clase se puede usar Ejemplo: la clase Person implementa PersonInterface PersonInterface pi = new Person(); Tanto la interface como la clase definen métodos Java 19

Interface y Clases: características diferentes Todos los métodos de una interface son métodos abstractos No tienen cuerpo No se puede crear una instancia de una interface. Ejemplo: PersonInterface pi = new PersonInterface(); Una interface sólo puede ser implementado por clases o extendido por otras interfaces Java 20

Relación de una interface a una clase Una clase concreta sólo puede extender una super clase, pero puede implementar múltiples interfaces El lenguaje Java no permite herencia múltiple, pero las interfaces proporcionan una alternativa Todos los métodos abstractos de todas las interfaces tiene que ser implementados por la clase concreta public class IndustrialStudent extends Student implements PersonInterface, OtraInterface, NesimaInterface { // todos los metodos abstractos de todas las // interfaces deben ser implementados Java 21

Herencia entre interfaces Las interfaces no son parte de la jerarquía de clases Sin embargo, las interfaces pueden tener relación de herencia entre ellas public interface PersonInterface { void dosomething(); public interface StudentInterface extends PersonInterface { void doextrasomething(); Java 22

Interface y Polimorfismo Las interfaces permiten polimorfismo, desde que el programa puede llamar un método de la interface y la versión apropiada del método será ejecutada dependiendo del tipo de la instancia del objeto pasado en la llamada del método de la interface Java 23

Reescribiendo una interface existente Si se tiene desarrollada una interface DoIt public interface DoIt { void dosomething(int i, double x); int dosomethingelse(string s); Supongamos que posteriormente se desea añadir un tercer método en DoIt, quedando una nueva versión public interface DoIt { void dosomething(int i, double x); int dosomethingelse(string s); boolean diditwork(int i, double x, String s); Java 24

Reescribiendo una interface existente Si se realiza este cambio, todas las clases que implementan la versión anterior de la interface DoIt no funcionarán porque no implementan todos los métodos de la interface Una solución es crear más interfaces (extendidas) public interface DoItPlus extends DoIt { boolean diditwork(int i, double x, String s); Así se puede continuar usando la versión anterior o actualizar a la nueva interface Java 25

Cuándo usar una clase abstracta sobre interface Para métodos no abstractos se desea usarlos cuando se quiere proporcionar una implementación común para todas las subclases, reduciendo la duplicación Para métodos abstractos, la motivación es la misma que en la interface: imponer un comportamiento común para todas las subclases sin dictar cómo implementarla Nota: una clase concreta puede extender sólo una superclase si ésta está en la forma de clase concreta o abstracta Java 26

La interface Comparable La líbrería Java incluye un número importante de interfaces, entre ellas, Comparable Requiere la implementación de un método: compareto() Se usa para comparar dos objetos Es implementado por varios objetos de la API Java Se puede implementar en las clases para aprovechar las potentes herramientas de Java como el ordenamiento Se invoca en un objeto, y se pasa otro Invocado en un objeto a, devuelve valores: Negativo (a es anterior a b), Positivo (a es posterior a b), 0 (a es igual a b) a.compareto(b); Java 27

El tipo del parámetro de Comparable La interface Comparable usa un tipo especial de parámetro que le permite trabajar con cualquier tipo public interface Comparable<T> { int compareto(t other); El tipo <T> es un marcador de un tipo de objeto (tipos genéricos) La clase ArrayList usa la misma técnica con el tipo encerrado por < > ArrayList<String> names = new ArrayList<String>(); Java 28

Ejemplo de Comparable El método compareto de la clase CuentaBanco compara cuentas de banco por su saldo Los métodos de la interface deben ser públicos public class CuentaBanco implements Comparable<CuentaBanco> {... El parámetro es de tipo de la misma clase (CuentaBanco) public int compareto(cuentabanco other) { if (balance < other.getsaldo()) { return -1; if (balance > other.getsaldo()) { return 1; return 0;... Java 29

Uso de compareto para ordenar El método Arrays.sort usa el método compareto para ordenar los elementos del array Una vez que la clase CuentaBanco implementa la interface Comparable, se puede ordenar (saldo ascendente) con el método Arrays.sort CuentaBanco[] cuentas = new CuentaBanco[3]; cuentas[0] = new CuentaBanco(10000); cuentas[1] = new CuentaBanco(0); cuentas[2] = new CuentaBanco(2000); Arrays.sort(cuentas); Java 30